Package net.sf.logsaw.ui.wizards

Source Code of net.sf.logsaw.ui.wizards.DialectWizardPage

/*******************************************************************************
* Copyright (c) 2010, 2011 LogSaw project and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    LogSaw project committers - initial API and implementation
*******************************************************************************/
package net.sf.logsaw.ui.wizards;

import java.util.Collection;

import net.sf.logsaw.core.dialect.ILogDialect;
import net.sf.logsaw.core.dialect.ILogDialectFactory;
import net.sf.logsaw.ui.IHelpContexts;
import net.sf.logsaw.ui.Messages;

import org.eclipse.core.databinding.beans.PojoProperties;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.databinding.viewers.ViewerSupport;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;

/**
* @author Philipp Nanz
*/
public class DialectWizardPage extends WizardPage {

  private Collection<ILogDialectFactory> dialectFactories;
  private TableViewer tableViewer;
  private Text detailsText;
  private String[] columnNames = new String[] {"Name", "Bundle ID"}; //$NON-NLS-1$ //$NON-NLS-2$
  private String[] columnProperties = new String[] {"name", "contributor"}; //$NON-NLS-1$ //$NON-NLS-2$

  /**
   * Constructor.
   * @param dialectFactories the dialect factories available
   */
  public DialectWizardPage(Collection<ILogDialectFactory> dialectFactories) {
    super("selectDialect", Messages.DialectWizardPage_title, null); //$NON-NLS-1$
    Assert.isNotNull(dialectFactories, "dialectFactories"); //$NON-NLS-1$
    this.dialectFactories = dialectFactories;
    setDescription(Messages.DialectWizardPage_description);
    setPageComplete(false);
  }

  /* (non-Javadoc)
   * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
   */
  @Override
  public void createControl(Composite parent) {
    Composite root = new Composite(parent, SWT.NONE);
    root.setLayout(new GridLayout(1, false));
   
    tableViewer = new TableViewer(root, SWT.BORDER | SWT.SINGLE |
        SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
    tableViewer.getControl().setLayoutData(
        new GridData(SWT.FILL, SWT.FILL, true, true));
    tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {

      /* (non-Javadoc)
       * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
       */
      @Override
      public void selectionChanged(SelectionChangedEvent event) {
        IStructuredSelection sel = (IStructuredSelection) event.getSelection();
        if (sel.isEmpty()) {
          detailsText.setText(""); //$NON-NLS-1$
          setPageComplete(false);
        } else {
          ILogDialectFactory dialect = (ILogDialectFactory) sel.getFirstElement();
          detailsText.setText(dialect.getDescription() != null ?
              dialect.getDescription() : ""); //$NON-NLS-1$
          setPageComplete(true);
        }
      }
    });
    tableViewer.setComparator(new ViewerComparator());
    tableViewer.getTable().setHeaderVisible(true);
    tableViewer.getTable().setLinesVisible(true);
   
    // Setup columns
    for (String columnName : columnNames) {
      TableColumn col = new TableColumn(tableViewer.getTable(), SWT.NONE);
      col.setText(columnName);
    }
   
    // Setup data binding
    ViewerSupport.bind(tableViewer, new WritableList(dialectFactories, ILogDialect.class),
        PojoProperties.values(columnProperties));
   
    for (TableColumn col : tableViewer.getTable().getColumns()) {
      col.pack();
    }
   
    Group group = new Group(root, SWT.NONE);
    group.setText(Messages.DialectWizardPage_label_details);
    group.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
    group.setLayout(new GridLayout());
   
    detailsText = new Text(group, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.V_SCROLL | SWT.WRAP);
    GC gc = new GC(detailsText);
    FontMetrics fm = gc.getFontMetrics();
    gc.dispose();
    int cols = 80;
    int rows = 3;
    int width = cols * fm.getAverageCharWidth();
    int height = rows * fm.getHeight();
    GridData gridData = new GridData(SWT.FILL, SWT.NONE, true, false);
    gridData.widthHint = width;
    gridData.heightHint = height;
    detailsText.setLayoutData(gridData);
   
    setControl(root);
   
    // Bind help context
    PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
        IHelpContexts.DIALECT_WIZARD_PAGE);
  }

  /**
   * Returns the selected log dialect factory.
   * @return the selected log dialect factory
   */
  public ILogDialectFactory getSelectedDialectFactory() {
    IStructuredSelection sel = (IStructuredSelection) tableViewer.getSelection();
    return (ILogDialectFactory) sel.getFirstElement();
  }
}
TOP

Related Classes of net.sf.logsaw.ui.wizards.DialectWizardPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.