Example usage for org.eclipse.jface.viewers TableViewer getTable

List of usage examples for org.eclipse.jface.viewers TableViewer getTable

Introduction

In this page you can find the example usage for org.eclipse.jface.viewers TableViewer getTable.

Prototype

public Table getTable() 

Source Link

Document

Returns this table viewer's table control.

Usage

From source file:net.rim.ejde.internal.ui.editors.model.BlackBerryProjectPropertiesPage.java

License:Open Source License

/**
 * Removes the currently selected table item from the viewer and updates controls accordingly
 *
 * @param viewer//  w w  w.  j a  va2 s  . c  o  m
 * @param actionButtons
 * @param updateUIOnly
 *            <code>true</code> only update UI but not remove items from the table; <code>false</code> update UI and remove
 *            items from the table;
 */
public void removeSelectedTableItem(TableViewer viewer, Map<Action, Button> actionButtons,
        boolean updateUIOnly) {
    StructuredSelection selection = (StructuredSelection) viewer.getSelection();
    Table table = viewer.getTable();
    int selectionIndex = table.getSelectionIndex();
    Boolean entryRemoved = false;

    if (!updateUIOnly) {
        for (Iterator<?> iter = selection.iterator(); iter.hasNext();) {
            Object selectedElement = iter.next();

            if (selectedElement != null) {

                viewer.remove(selectedElement);

                if (!entryRemoved) {
                    entryRemoved = true;
                }
            }
        }
    }

    if (updateUIOnly || entryRemoved) {
        int itemCount = table.getItemCount();
        if (itemCount != 0) {
            table.select(itemCount - 1 > selectionIndex ? selectionIndex : itemCount - 1);

            if (actionButtons.containsKey(Action.MOVE_DOWN)) {
                if (selectionIndex == itemCount - 1) {
                    actionButtons.get(Action.MOVE_DOWN).setEnabled(false);
                }

                actionButtons.get(Action.MOVE_UP).setEnabled(itemCount > 1 ? true : false);
            }

            // Used to fire any selection events
            viewer.setSelection(viewer.getSelection());
        } else {
            if (actionButtons.containsKey(Action.EDIT)) {
                actionButtons.get(Action.EDIT).setEnabled(false);
            }
            if (actionButtons.containsKey(Action.REMOVE)) {
                actionButtons.get(Action.REMOVE).setEnabled(false);
            }
            if (actionButtons.containsKey(Action.MOVE_UP)) {
                actionButtons.get(Action.MOVE_UP).setEnabled(false);
            }
            if (actionButtons.containsKey(Action.MOVE_DOWN)) {
                actionButtons.get(Action.MOVE_DOWN).setEnabled(false);
            }
            if (actionButtons.containsKey(Action.SELECT_ALL)) {
                actionButtons.get(Action.SELECT_ALL).setEnabled(false);
            }
            if (actionButtons.containsKey(Action.SELECT_NONE)) {
                actionButtons.get(Action.SELECT_NONE).setEnabled(false);
            }
        }

        // Enable any disabled add buttons - icon scenarios where only 2 icons can be added.
        if (actionButtons.containsKey(Action.ADD)) {
            actionButtons.get(Action.ADD).setEnabled(true);
        }
        if (actionButtons.containsKey(Action.ADD_FROM_PROJECT)) {
            actionButtons.get(Action.ADD_FROM_PROJECT).setEnabled(true);
        }
        if (actionButtons.containsKey(Action.ADD_FROM_EXTERNAL)) {
            actionButtons.get(Action.ADD_FROM_EXTERNAL).setEnabled(true);
        }

        if (table.getColumnCount() > 1) {
            table.getColumn(1).pack();
        }
    }
}

From source file:net.rim.ejde.internal.ui.editors.model.BlackBerryProjectPropertiesPage.java

License:Open Source License

/**
 * Searches the given viewer for the given object and returns its index or -1 if the object was not found
 *
 * @param viewer//from   www  . ja  v  a 2s  . c  o  m
 * @param obj
 * @return
 */
public Integer getObjectIndexInViewer(TableViewer viewer, Object obj) {
    for (int i = 0; i < viewer.getTable().getItemCount(); i++) {
        Object element = viewer.getElementAt(i);
        if ((obj instanceof Icon) && (element instanceof Icon)) {
            IProject project = _blackBerryProject.getProject();

            IPath iconPath = new Path(((Icon) element).getCanonicalFileName());
            IResource iconRes = project.findMember(iconPath);

            IPath projectPath = project.getLocation(), iconRelPath, iconAbsPath;
            if (iconRes != null) {
                iconRelPath = projectPath.append(iconRes.getProjectRelativePath());
                iconAbsPath = iconRes.getLocation();
            } else {
                iconRelPath = null;
                iconAbsPath = projectPath.append(iconPath);
            }

            IPath newIconPath = projectPath.append(((Icon) obj).getCanonicalFileName());

            if (newIconPath.equals(iconRelPath) || newIconPath.equals(iconAbsPath)) {
                return i;
            }
        } else if ((obj instanceof PreprocessorTag) && (element instanceof PreprocessorTag)) {
            PreprocessorTag o1 = (PreprocessorTag) obj;
            PreprocessorTag o2 = (PreprocessorTag) element;

            if (o1.getPreprocessorDefine().equals(o2.getPreprocessorDefine())) {
                return i;
            }
        } else {
            if (obj.equals(element)) {
                return i;
            }
        }
    }
    return -1;
}

From source file:net.rim.ejde.internal.ui.views.process.ProcessView.java

License:Open Source License

public void createTableViewPart(Composite parent) {
    TableViewer tableViewer = new TableViewer(parent,
            SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.VIRTUAL | SWT.SINGLE | SWT.FULL_SELECTION);
    tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
    tableViewer.getTable().setHeaderVisible(true);
    tableViewer.getTable().setLinesVisible(true);
    tableViewer.setContentProvider(new VarContentProvider(tableViewer));
    VarLabelProvider labelProvider = new VarLabelProvider(tableViewer);
    setLabelProvider(labelProvider);//from  www .  j  av  a2  s.  c o m
    tableViewer.setLabelProvider(labelProvider);
    tableViewer.getTable().addMouseListener(new VarMouseAdapter());
    tableViewer.getTable().addSelectionListener(new VarTableRowSelectionListener());
    setTableView(tableViewer);
    // create table columns
    createColumns();
    // create context menu(pop-up menu)
    createContextMenu();
    // start live update
    startLiveupdate();
}

From source file:net.rim.ejde.internal.ui.views.process.ProcessView.java

License:Open Source License

/**
 * Creates columns of the tree view.//w ww .j  a  va  2s.  c  o m
 *
 * @param index
 *            index of column
 *
 */
private void createColumn(int index) {
    int width;
    switch (index) {
    case 0:
    case 2:
        width = 250;
        break;
    default:
        width = 100;
    }
    TableViewer tableviewer = getTableView();
    if (tableviewer == null) {
        return;
    }
    TableColumn tableColumn = new TableColumn(tableviewer.getTable(), SWT.LEFT);
    tableColumn.setText(ProcessesContentsHelper.getColumnName(index));
    tableColumn.setWidth(width);
    tableColumn.setResizable(true);
    tableColumn.addSelectionListener(new VarTableColumnSelectionListener());
}

From source file:net.rim.ejde.internal.ui.views.VarContentDebugView.java

License:Open Source License

/**
 * (no java doc)/*from   w  w w . jav  a 2  s  .  c om*/
 *
 * @see IBasicActions#clear()
 */
@Override
public void clear() {
    TableViewer tableviewer = getTableView();
    if (tableviewer != null) {
        tableviewer.getTable().removeAll();
    }
    setHasData(false);
    updateToolbar();
}

From source file:net.roboconf.eclipse.modeler.dialogs.ImportedVariableDialog.java

License:Apache License

@Override
protected Control createDialogArea(Composite parent) {

    // Global UI/*from   www. ja  v  a2s.  c  o m*/
    Composite bigContainer = (Composite) super.createDialogArea(parent);
    GridLayoutFactory.swtDefaults().margins(5, 0).applyTo(bigContainer);
    bigContainer.setLayoutData(new GridData(GridData.FILL_BOTH));

    getShell().setText("Imported Variables");
    setTitle("Imported Variables");
    setMessage("Edit the variables to import.");

    // Find all the variables
    for (RoboconfFacet type : findAllFacetsAndComponents()) {

        Collection<String> varNames = findAllExportedVariables(type);
        if (!type.getExports().isEmpty())
            varNames.add(type.getName() + ".*");

        for (String varName : varNames) {
            RoboconfImportedVariable var = RoboconfEmfFactory.eINSTANCE.createRoboconfImportedVariable();
            var.setName(varName);
            if (var.getName().startsWith(this.component.getName() + "."))
                var.setOptional(true);

            this.nameToImportedVariables.put(varName, var);
        }
    }

    // Update the map that will act as our model.
    // We do this in two steps because...
    // 1. nameToImportedVariables is a tree map. Variables are sorted alphabetically.
    // 2. importedVariablesToTaken is our model for the UI. Since it is a linked hash map,
    // it preserves insertion order. So, we preserve the order from the tree map.
    //
    // And we cannot directly use a tree map with imported variables.
    // The class was generated by EMF and there is no natural ordering.
    for (RoboconfImportedVariable var : this.nameToImportedVariables.values()) {
        this.importedVariablesToTaken.put(var, Boolean.FALSE);
    }

    // Should they be marked as used?
    updateImportedVariablesStates();

    // Display them in a table viewer
    final TableViewer viewer = new TableViewer(bigContainer, SWT.BORDER | SWT.SINGLE);
    viewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
    viewer.getTable().setHeaderVisible(true);
    viewer.getTable().setLinesVisible(true);

    TableLayout tlayout = new TableLayout();
    tlayout.addColumnData(new ColumnWeightData(12, 90, true));
    tlayout.addColumnData(new ColumnWeightData(40, 200, true));
    tlayout.addColumnData(new ColumnWeightData(12, 90, true));
    viewer.getTable().setLayout(tlayout);

    String[] columnTitles = { "Import", "Variable Name", "Optional" };
    for (int i = 0; i < columnTitles.length; i++) {
        int style = i == 1 ? SWT.LEFT : SWT.CENTER;
        TableColumn column = new TableColumn(viewer.getTable(), style);
        column.setText(columnTitles[i]);
    }

    viewer.setLabelProvider(new ImportedVariableLabelProvider(this.checked, this.unchecked));
    viewer.setContentProvider(new ArrayContentProvider());
    viewer.setInput(this.importedVariablesToTaken.entrySet());
    viewer.getTable().addListener(SWT.MouseDoubleClick, new Listener() {

        @Override
        @SuppressWarnings({ "unchecked", "rawtypes" })
        public void handleEvent(Event event) {

            Point p = new Point(event.x, event.y);
            ViewerCell cell = viewer.getCell(p);

            Map.Entry<RoboconfImportedVariable, Boolean> entry = (Map.Entry) cell.getElement();
            RoboconfImportedVariable var = entry.getKey();

            if (cell.getColumnIndex() == 0) {
                entry.setValue(!entry.getValue());

            } else if (cell.getColumnIndex() == 2) {
                var.setOptional(!var.isOptional());
            }

            viewer.refresh(entry);
        }
    });

    return bigContainer;
}

From source file:net.sf.eclipsensis.config.NSISConfigSelectionPage.java

License:Open Source License

public void createControl(Composite parent) {
    Composite parent2 = new Composite(parent, SWT.NONE);
    parent2.setLayout(new GridLayout(1, false));
    Font wizardFont = parent2.getFont();

    Label l = new Label(parent2, SWT.NONE);
    l.setFont(wizardFont);//from www.j a  v  a 2 s .  c o  m
    l.setText(EclipseNSISPlugin.getResourceString("config.wizard.welcome.message")); //$NON-NLS-1$

    Group g = new Group(parent2, SWT.NONE);
    g.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    g.setLayout(new GridLayout(1, false));
    l = new Label(g, SWT.NONE);
    l.setText(EclipseNSISPlugin.getResourceString("available.config.wizards.label")); //$NON-NLS-1$
    l.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
    l.setFont(wizardFont);

    Table table = new Table(g, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
    table.setFont(wizardFont);
    table.setLinesVisible(false);
    table.setHeaderVisible(false);
    table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    TableViewer viewer = new TableViewer(table);
    viewer.setContentProvider(new CollectionContentProvider());
    viewer.setLabelProvider(new LabelProvider() {
        ImageManager mImageManager = EclipseNSISPlugin.getImageManager();

        @Override
        public Image getImage(Object element) {
            if (element instanceof NSISConfigWizardNode) {
                NSISConfigWizardDescriptor descriptor = ((NSISConfigWizardNode) element).getDescriptor();
                ImageDescriptor icon = descriptor.getIcon();
                if (icon != null) {
                    if (!mImageManager.containsImage(descriptor.getId())) {
                        mImageManager.putImageDescriptor(descriptor.getId(), icon);
                    }
                    return mImageManager.getImage(descriptor.getId());
                }
                return null;
            }
            return super.getImage(element);
        }

        @Override
        public String getText(Object element) {
            if (element instanceof NSISConfigWizardNode) {
                return ((NSISConfigWizardNode) element).getDescriptor().getName();
            }
            return super.getText(element);
        }

    });
    viewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            IStructuredSelection sel = (IStructuredSelection) event.getSelection();
            if (sel.isEmpty()) {
                setSelectedNode(null);
            } else {
                NSISConfigWizardNode node = (NSISConfigWizardNode) sel.getFirstElement();
                setDescription(node.getDescriptor().getDescription());
                setSelectedNode(node);
            }
        }
    });
    viewer.getTable().addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetDefaultSelected(SelectionEvent e) {
            if (canFlipToNextPage()) {
                IWizardPage nextPage = getNextPage();
                if (nextPage != null) {
                    getContainer().showPage(nextPage);
                }
            }
        }
    });
    NSISConfigWizardDescriptor[] wizardDescriptors = NSISConfigWizardRegistry.INSTANCE.getWizardDescriptors();
    Collection<NSISConfigWizardNode> input = new ArrayList<NSISConfigWizardNode>();
    for (int i = 0; i < wizardDescriptors.length; i++) {
        input.add(new NSISConfigWizardNode(this, wizardDescriptors[i]));
    }
    viewer.setInput(input);
    if (input.size() > 0) {
        viewer.setSelection(new StructuredSelection(input.iterator().next()));
    }
    setControl(parent2);
}

From source file:net.sf.eclipsensis.dialogs.NSISTemplatePreferencePage.java

License:Open Source License

@Override
public void createControl(Composite parent) {
    super.createControl(parent);
    TableViewer viewer = getTableViewer();
    TableColumn[] columns = viewer.getTable().getColumns();
    if (columns != null && columns.length > 3) {
        for (int i = 3; i < columns.length; i++) {
            columns[i].dispose();/* w w  w.  j a  va  2 s  .  co m*/
        }
    }
    PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
            INSISConstants.PLUGIN_CONTEXT_PREFIX + "nsis_templateprefs_context"); //$NON-NLS-1$
}

From source file:net.sf.eclipsensis.installoptions.properties.tabbed.section.FilterPropertySection.java

License:Open Source License

@Override
protected Control createSection(final InstallOptionsElement element, Composite parent,
        TabbedPropertySheetPage page, final InstallOptionsCommandHelper commandHelper) {
    if (element instanceof InstallOptionsFileRequest) {
        final FileFilter[] current = { null };
        final boolean[] nonUserChange = { false };
        final IPropertyDescriptor descriptor = element
                .getPropertyDescriptor(InstallOptionsModel.PROPERTY_FILTER);
        final ICellEditorValidator validator = PropertyDescriptorHelper
                .getCellEditorValidator((PropertyDescriptor) descriptor);

        final TabbedPropertySheetWidgetFactory widgetFactory = getWidgetFactory();

        Composite parent2 = createSectionComposite(parent);
        GridLayout layout = new GridLayout(2, false);
        layout.marginHeight = layout.marginWidth = 0;
        parent2.setLayout(layout);//from ww  w .j a  v  a2s .  com

        final Group summaryGroup = widgetFactory.createGroup(parent2,
                InstallOptionsPlugin.getResourceString("filter.summary.group.name")); //$NON-NLS-1$
        summaryGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        summaryGroup.setLayout(new GridLayout(2, false));

        Table summaryTable = widgetFactory.createTable(summaryGroup,
                SWT.FLAT | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
        summaryTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        summaryTable.setLinesVisible(true);
        summaryTable.setHeaderVisible(true);

        TableColumn[] columns = new TableColumn[2];
        columns[0] = new TableColumn(summaryTable, SWT.LEFT);
        columns[0].setText(InstallOptionsPlugin.getResourceString("filter.description")); //$NON-NLS-1$
        columns[1] = new TableColumn(summaryTable, SWT.LEFT);
        columns[1].setText(InstallOptionsPlugin.getResourceString("filter.patterns")); //$NON-NLS-1$
        summaryTable.addControlListener(new TableResizer());

        final TableViewer summaryViewer = new TableViewer(summaryTable);
        summaryViewer.setContentProvider(new CollectionContentProvider());
        summaryViewer.setLabelProvider(new FileFilterLabelProvider());

        final Composite summaryButtons = widgetFactory.createComposite(summaryGroup);
        summaryButtons.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
        layout = new GridLayout();
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        summaryButtons.setLayout(layout);

        final Button summaryAdd = widgetFactory.createButton(summaryButtons, "", SWT.PUSH); //$NON-NLS-1$
        summaryAdd.setImage(CommonImages.ADD_ICON);
        summaryAdd.setToolTipText(EclipseNSISPlugin.getResourceString("new.tooltip")); //$NON-NLS-1$
        summaryAdd.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        summaryAdd.addListener(SWT.Selection, new Listener() {
            @SuppressWarnings("unchecked")
            public void handleEvent(Event e) {
                if (!nonUserChange[0]) {
                    List<FileFilter> list = (List<FileFilter>) summaryViewer.getInput();
                    if (list != null) {
                        String desc = InstallOptionsPlugin
                                .getFormattedString("default.filter.description", new Object[] { "" }).trim(); //$NON-NLS-1$ //$NON-NLS-2$
                        int counter = 1;
                        for (ListIterator<FileFilter> iter = list.listIterator(); iter.hasNext();) {
                            if (iter.next().getDescription().equals(desc)) {
                                while (iter.hasPrevious()) {
                                    iter.previous();
                                }
                                desc = InstallOptionsPlugin.getFormattedString("default.filter.description", //$NON-NLS-1$
                                        new Object[] { new Integer(counter++) });
                                continue;
                            }
                        }
                        FileFilter f = new FileFilter(desc, new FilePattern[] { new FilePattern(
                                InstallOptionsPlugin.getResourceString("default.filter.pattern")) }); //$NON-NLS-1$
                        list.add(f);
                        String error = validator.isValid(list);
                        if (Common.isEmpty(error)) {
                            summaryViewer.refresh(false);
                            summaryViewer.setSelection(new StructuredSelection(f));
                            commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_FILTER,
                                    descriptor.getDisplayName(), element, list);
                        } else {
                            Common.openError(summaryViewer.getTable().getShell(), error,
                                    InstallOptionsPlugin.getShellImage());
                            list.remove(f);
                        }
                    }
                }
            }
        });

        final Button summaryDel = widgetFactory.createButton(summaryButtons, "", SWT.PUSH); //$NON-NLS-1$
        summaryDel.setImage(CommonImages.DELETE_ICON);
        summaryDel.setToolTipText(EclipseNSISPlugin.getResourceString("remove.tooltip")); //$NON-NLS-1$
        summaryDel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        summaryDel.addListener(SWT.Selection, new Listener() {
            @SuppressWarnings("unchecked")
            public void handleEvent(Event e) {
                List<FileFilter> list = (List<FileFilter>) summaryViewer.getInput();
                if (list != null) {
                    IStructuredSelection selection = (IStructuredSelection) summaryViewer.getSelection();
                    if (!selection.isEmpty()) {
                        List<FileFilter> old = new ArrayList<FileFilter>(list);
                        for (Iterator<?> iter = selection.toList().iterator(); iter.hasNext();) {
                            list.remove(iter.next());
                        }
                        String error = validator.isValid(list);
                        if (Common.isEmpty(error)) {
                            summaryViewer.refresh(false);
                            commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_FILTER,
                                    descriptor.getDisplayName(), element, list);
                        } else {
                            Common.openError(summaryViewer.getTable().getShell(), error,
                                    InstallOptionsPlugin.getShellImage());
                            list.clear();
                            list.addAll(old);
                        }
                    }
                }
            }
        });
        summaryDel.setEnabled(!summaryViewer.getSelection().isEmpty());

        final TableViewerUpDownMover<List<FileFilter>, FileFilter> summaryMover = new TableViewerUpDownMover<List<FileFilter>, FileFilter>() {
            @Override
            @SuppressWarnings("unchecked")
            protected List<FileFilter> getAllElements() {
                return (List<FileFilter>) ((TableViewer) getViewer()).getInput();
            }

            @Override
            protected void updateStructuredViewerInput(List<FileFilter> input, List<FileFilter> elements,
                    List<FileFilter> move, boolean isDown) {
                List<FileFilter> old = new ArrayList<FileFilter>(input);
                input.clear();
                input.addAll(elements);
                String error = validator.isValid(input);
                if (Common.isEmpty(error)) {
                    summaryViewer.refresh(false);
                    commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_FILTER,
                            descriptor.getDisplayName(), element, input);
                } else {
                    Common.openError(summaryViewer.getTable().getShell(), error,
                            InstallOptionsPlugin.getShellImage());
                    input.clear();
                    input.addAll(old);
                }
            }
        };
        summaryMover.setViewer(summaryViewer);

        final Button summaryUp = widgetFactory.createButton(summaryButtons, "", SWT.PUSH); //$NON-NLS-1$
        summaryUp.setImage(CommonImages.UP_ICON);
        summaryUp.setToolTipText(EclipseNSISPlugin.getResourceString("up.tooltip")); //$NON-NLS-1$
        summaryUp.setEnabled(summaryMover.canMoveUp());
        summaryUp.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        summaryUp.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                summaryMover.moveUp();
            }
        });

        final Button summaryDown = widgetFactory.createButton(summaryButtons, "", SWT.PUSH); //$NON-NLS-1$
        summaryDown.setImage(CommonImages.DOWN_ICON);
        summaryDown.setToolTipText(EclipseNSISPlugin.getResourceString("down.tooltip")); //$NON-NLS-1$
        summaryDown.setEnabled(summaryMover.canMoveDown());
        summaryDown.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        summaryDown.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                summaryMover.moveDown();
            }
        });

        final Group detailGroup = widgetFactory.createGroup(parent2,
                InstallOptionsPlugin.getResourceString("filter.detail.group.name")); //$NON-NLS-1$
        detailGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        detailGroup.setLayout(new GridLayout(1, false));

        boolean isNull = current[0] == null;
        Composite composite = widgetFactory.createComposite(detailGroup);
        composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        layout = new GridLayout(2, false);
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        composite.setLayout(layout);

        final CLabel descriptionLabel = widgetFactory.createCLabel(composite,
                InstallOptionsPlugin.getResourceString("filter.description")); //$NON-NLS-1$
        descriptionLabel.setLayoutData(new GridData());
        descriptionLabel.setEnabled(!isNull);

        final Text descriptionText = widgetFactory.createText(composite, "", SWT.FLAT | SWT.BORDER); //$NON-NLS-1$
        descriptionText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        final TextChangeHelper helper = new TextChangeHelper() {
            @Override
            protected String getResetValue(Text text) {
                if (current[0] != null) {
                    return current[0].getDescription();
                }
                return ""; //$NON-NLS-1$
            }

            @Override
            @SuppressWarnings("unchecked")
            protected void handleTextChange(Text text) {
                if (current[0] != null) {
                    String oldDescription = current[0].getDescription();
                    current[0].setDescription(text.getText());

                    List<FileFilter> list = (List<FileFilter>) summaryViewer.getInput();
                    String error = validator.isValid(list);
                    if (Common.isEmpty(error)) {
                        summaryViewer.update(current[0], null);
                        commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_FILTER,
                                descriptor.getDisplayName(), element, list);
                    } else {
                        Common.openError(summaryViewer.getTable().getShell(), error,
                                InstallOptionsPlugin.getShellImage());
                        current[0].setDescription(oldDescription);
                    }
                }
            }
        };
        helper.connect(descriptionText);
        descriptionText.addDisposeListener(new DisposeListener() {
            public void widgetDisposed(DisposeEvent e) {
                helper.disconnect(descriptionText);
            }
        });
        descriptionText.setEnabled(!isNull);

        final CLabel patternsLabel = widgetFactory.createCLabel(detailGroup,
                InstallOptionsPlugin.getResourceString("filter.patterns")); //$NON-NLS-1$
        patternsLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        patternsLabel.setEnabled(!isNull);

        composite = widgetFactory.createComposite(detailGroup);
        composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        layout = new GridLayout(2, false);
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        composite.setLayout(layout);

        final Table patternsTable = widgetFactory.createTable(composite,
                SWT.FLAT | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
        patternsTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        patternsTable.setLinesVisible(true);
        patternsTable.setEnabled(!isNull);
        new TableColumn(patternsTable, SWT.LEFT);
        final TextCellEditor textEditor = new TextCellEditor(patternsTable);
        ((Text) textEditor.getControl()).addVerifyListener(new VerifyListener() {
            public void verifyText(VerifyEvent e) {
                e.doit = e.text.indexOf(IInstallOptionsConstants.LIST_SEPARATOR) < 0
                        && e.text.indexOf(InstallOptionsFileRequest.FILTER_SEPARATOR) < 0;
                if (!e.doit) {
                    e.display.beep();
                }
            }
        });
        patternsTable.addControlListener(new TableResizer());

        textEditor.setValidator(new ICellEditorValidator() {
            public String isValid(Object value) {
                if (!Common.isEmpty((String) value)) {
                    return null;
                } else {
                    return InstallOptionsPlugin.getResourceString("empty.filter.pattern.error"); //$NON-NLS-1$
                }
            }
        });

        final TableViewer patternsViewer = new TableViewer(patternsTable);
        patternsViewer.setColumnProperties(new String[] { "pattern" }); //$NON-NLS-1$
        patternsViewer.setContentProvider(new ArrayContentProvider());
        patternsViewer.setLabelProvider(new LabelProvider());
        patternsViewer.setCellEditors(new CellEditor[] { textEditor });
        patternsViewer.setCellModifier(new ICellModifier() {
            public boolean canModify(Object element, String property) {
                return true;
            }

            public Object getValue(Object element, String property) {
                return ((FilePattern) element).getPattern();
            }

            @SuppressWarnings("unchecked")
            public void modify(Object item, String property, Object value) {
                if (value == null) {
                    Common.openError(patternsTable.getShell(), textEditor.getErrorMessage(),
                            InstallOptionsPlugin.getShellImage());
                } else {
                    FilePattern pattern = (FilePattern) ((TableItem) item).getData();
                    String oldValue = pattern.getPattern();
                    pattern.setPattern((String) value);

                    List<FileFilter> list = (List<FileFilter>) summaryViewer.getInput();
                    String error = validator.isValid(list);
                    if (Common.isEmpty(error)) {
                        patternsViewer.update(pattern, null);
                        summaryViewer.update(current[0], null);
                        commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_FILTER,
                                descriptor.getDisplayName(), element, list);
                    } else {
                        Common.openError(summaryViewer.getTable().getShell(), error,
                                InstallOptionsPlugin.getShellImage());
                        pattern.setPattern(oldValue);
                    }
                }
            }
        });

        final Composite patternsButtons = widgetFactory.createComposite(composite);
        patternsButtons.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
        layout = new GridLayout();
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        patternsButtons.setLayout(layout);

        final Button patternsAdd = widgetFactory.createButton(patternsButtons, "", SWT.PUSH); //$NON-NLS-1$
        patternsAdd.setImage(CommonImages.ADD_ICON);
        patternsAdd.setToolTipText(EclipseNSISPlugin.getResourceString("new.tooltip")); //$NON-NLS-1$
        patternsAdd.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        patternsAdd.addListener(SWT.Selection, new Listener() {
            @SuppressWarnings("unchecked")
            public void handleEvent(Event e) {
                if (current[0] != null) {
                    FilePattern[] oldPatterns = (FilePattern[]) patternsViewer.getInput();
                    FilePattern[] patterns = (FilePattern[]) Common.resizeArray(oldPatterns,
                            oldPatterns.length + 1);
                    String filter = InstallOptionsPlugin.getResourceString("default.filter.pattern"); //$NON-NLS-1$
                    FilePattern newPattern = new FilePattern(filter);
                    patterns[patterns.length - 1] = newPattern;
                    current[0].setPatterns(patterns);

                    List<FileFilter> list = (List<FileFilter>) summaryViewer.getInput();
                    String error = validator.isValid(list);
                    if (Common.isEmpty(error)) {
                        patternsViewer.setInput(patterns);
                        patternsViewer.setSelection(new StructuredSelection(newPattern));
                        summaryViewer.update(current[0], null);
                        patternsViewer.editElement(newPattern, 0);
                        ((Text) textEditor.getControl()).setSelection(filter.length());
                    } else {
                        Common.openError(summaryViewer.getTable().getShell(), error,
                                InstallOptionsPlugin.getShellImage());
                        current[0].setPatterns(oldPatterns);
                    }
                }
            }
        });
        patternsAdd.setEnabled(!isNull);

        final Button patternsDel = widgetFactory.createButton(patternsButtons, "", SWT.PUSH); //$NON-NLS-1$
        patternsDel.setImage(CommonImages.DELETE_ICON);
        patternsDel.setToolTipText(EclipseNSISPlugin.getResourceString("remove.tooltip")); //$NON-NLS-1$
        patternsDel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        patternsDel.addListener(SWT.Selection, new Listener() {
            @SuppressWarnings("unchecked")
            public void handleEvent(Event e) {
                if (current[0] != null) {
                    FilePattern[] oldPatterns = (FilePattern[]) patternsViewer.getInput();
                    int[] indices = patternsTable.getSelectionIndices();
                    FilePattern[] newPatterns = (FilePattern[]) Common.resizeArray(oldPatterns,
                            oldPatterns.length - indices.length);
                    int j = 0;
                    int k = 0;
                    for (int i = 0; i < oldPatterns.length; i++) {
                        if (j >= indices.length || i != indices[j]) {
                            newPatterns[k++] = oldPatterns[i];
                        } else {
                            j++;
                        }
                    }
                    current[0].setPatterns(newPatterns);

                    List<FileFilter> list = (List<FileFilter>) summaryViewer.getInput();
                    String error = validator.isValid(list);
                    if (Common.isEmpty(error)) {
                        patternsViewer.setInput(newPatterns);
                        summaryViewer.update(current[0], null);
                    } else {
                        Common.openError(summaryViewer.getTable().getShell(), error,
                                InstallOptionsPlugin.getShellImage());
                        current[0].setPatterns(oldPatterns);
                    }
                }
            }
        });
        IStructuredSelection sel = (IStructuredSelection) patternsViewer.getSelection();
        FilePattern[] patterns = (FilePattern[]) patternsViewer.getInput();
        int len = Common.isEmptyArray(patterns) ? 0 : patterns.length;
        patternsDel.setEnabled(!isNull && !sel.isEmpty() && sel.size() != len && len > 1);

        final TableViewerUpDownMover<FilePattern[], FilePattern> patternsMover = new TableViewerUpDownMover<FilePattern[], FilePattern>() {
            @Override
            protected List<FilePattern> getAllElements() {
                if (current[0] != null) {
                    return Common.makeList((FilePattern[]) ((TableViewer) getViewer()).getInput());
                }
                return Collections.emptyList();
            }

            @Override
            @SuppressWarnings("unchecked")
            protected void updateStructuredViewerInput(FilePattern[] input, List<FilePattern> elements,
                    List<FilePattern> move, boolean isDown) {
                if (current[0] != null) {
                    FilePattern[] oldPatterns = input.clone();
                    for (int i = 0; i < input.length; i++) {
                        input[i] = elements.get(i);
                    }

                    List<FileFilter> list = (List<FileFilter>) summaryViewer.getInput();
                    String error = validator.isValid(list);
                    if (Common.isEmpty(error)) {
                        patternsViewer.refresh();
                        summaryViewer.update(current[0], null);
                    } else {
                        Common.openError(summaryViewer.getTable().getShell(), error,
                                InstallOptionsPlugin.getShellImage());
                        System.arraycopy(oldPatterns, 0, input, 0, input.length);
                    }
                }
            }
        };
        patternsMover.setViewer(patternsViewer);

        final Button patternsUp = widgetFactory.createButton(patternsButtons, "", SWT.PUSH); //$NON-NLS-1$
        patternsUp.setImage(CommonImages.UP_ICON);
        patternsUp.setToolTipText(EclipseNSISPlugin.getResourceString("up.tooltip")); //$NON-NLS-1$
        patternsUp.setEnabled(!isNull && patternsMover.canMoveUp());
        patternsUp.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        patternsUp.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                patternsMover.moveUp();
            }
        });

        final Button patternsDown = widgetFactory.createButton(patternsButtons, "", SWT.PUSH); //$NON-NLS-1$
        patternsDown.setImage(CommonImages.DOWN_ICON);
        patternsDown.setToolTipText(EclipseNSISPlugin.getResourceString("down.tooltip")); //$NON-NLS-1$
        patternsDown.setEnabled(!isNull && patternsMover.canMoveDown());
        patternsDown.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        patternsDown.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                patternsMover.moveDown();
            }
        });

        patternsViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                IStructuredSelection sel = (IStructuredSelection) event.getSelection();
                FilePattern[] patterns = (FilePattern[]) patternsViewer.getInput();
                int len = patterns == null ? 0 : patterns.length;
                patternsDel.setEnabled(!sel.isEmpty() && sel.size() != len && len > 1);
                patternsUp.setEnabled(patternsMover.canMoveUp());
                patternsDown.setEnabled(patternsMover.canMoveDown());
            }
        });

        summaryViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                IStructuredSelection sel = (IStructuredSelection) event.getSelection();
                summaryDel.setEnabled(!sel.isEmpty());
                summaryUp.setEnabled(summaryMover.canMoveUp());
                summaryDown.setEnabled(summaryMover.canMoveDown());
                current[0] = null;
                if (!sel.isEmpty()) {
                    if (sel.size() == 1) {
                        current[0] = (FileFilter) sel.getFirstElement();
                    }
                }
                boolean isNull = current[0] == null;
                descriptionText.setText((isNull ? "" : current[0].getDescription())); //$NON-NLS-1$
                descriptionText.setSelection(descriptionText.getText().length());
                patternsViewer.setInput((isNull ? null : current[0].getPatterns()));
                descriptionLabel.setEnabled(!isNull);
                descriptionText.setEnabled(!isNull);
                patternsLabel.setEnabled(!isNull);
                patternsTable.setEnabled(!isNull);
                patternsAdd.setEnabled(!isNull);
                FilePattern[] patterns = (FilePattern[]) patternsViewer.getInput();
                int len = Common.isEmptyArray(patterns) ? 0 : patterns.length;
                patternsDel.setEnabled(!isNull && !sel.isEmpty() && sel.size() != len && len > 1);
                patternsUp.setEnabled(!isNull && patternsMover.canMoveUp());
                patternsDown.setEnabled(!isNull && patternsMover.canMoveDown());
            }
        });

        summaryViewer.setInput(InstallOptionsFileRequest.FILEFILTER_LIST_CONVERTER
                .makeCopy(((InstallOptionsFileRequest) element).getFilter()));

        final PropertyChangeListener listener = new PropertyChangeListener() {
            @SuppressWarnings("unchecked")
            public void propertyChange(PropertyChangeEvent evt) {
                if (evt.getPropertyName().equals(InstallOptionsModel.PROPERTY_FILTER)) {
                    List<FileFilter> newFilter = (List<FileFilter>) evt.getNewValue();
                    List<FileFilter> oldFilter = (List<FileFilter>) summaryViewer.getInput();
                    if (!Common.objectsAreEqual(newFilter, oldFilter)) {
                        try {
                            ISelection sel = summaryViewer.getSelection();
                            nonUserChange[0] = true;
                            summaryViewer.setInput(
                                    InstallOptionsFileRequest.FILEFILTER_LIST_CONVERTER.makeCopy(newFilter));
                            if (!sel.isEmpty()) {
                                summaryViewer.setSelection(sel);
                            }
                        } finally {
                            nonUserChange[0] = false;
                        }
                    }
                }
            }

        };
        element.addPropertyChangeListener(listener);
        parent2.addDisposeListener(new DisposeListener() {
            public void widgetDisposed(DisposeEvent e) {
                element.removePropertyChangeListener(listener);
            }
        });
        return parent2;
    }
    return null;
}

From source file:net.sf.versiontree.ui.DetailTableProvider.java

License:Open Source License

/**
 * Adds the listener that sets the sorter.
 *//*from  ww w  . jav  a  2s.c  o  m*/
private SelectionListener getColumnListener(final TableViewer tableViewer) {
    /**
     * This class handles selections of the column headers.
     * Selection of the column header will cause resorting
     * of the shown tasks using that column's sorter.
     * Repeated selection of the header will toggle
     * sorting order (ascending versus descending).
     */
    return new SelectionAdapter() {
        /**
         * Handles the case of user selecting the
         * header area.
         * <p>If the column has not been selected previously,
         * it will set the sorter of that column to be
         * the current tasklist sorter. Repeated
         * presses on the same column header will
         * toggle sorting order (ascending/descending).
         */
        @Override
        public void widgetSelected(SelectionEvent e) {
            // column selected - need to sort
            int column = tableViewer.getTable().indexOf((TableColumn) e.widget);
            ValueSorter oldSorter = (ValueSorter) tableViewer.getSorter();
            if (oldSorter != null && column == oldSorter.getColumnNumber()) {
                oldSorter.setReversed(!oldSorter.isReversed());
                tableViewer.refresh();
            } else {
                tableViewer.setSorter(new ValueSorter(column));
            }
        }
    };
}