Example usage for org.eclipse.jface.viewers IStructuredSelection toList

List of usage examples for org.eclipse.jface.viewers IStructuredSelection toList

Introduction

In this page you can find the example usage for org.eclipse.jface.viewers IStructuredSelection toList.

Prototype

public List toList();

Source Link

Document

Returns the elements in this selection as a List.

Usage

From source file:net.sf.commonclipse.popup.actions.JavaTypeObjectAction.java

License:Apache License

/**
 * file selected from menu./*  w w w. j a v a2s. c  o m*/
 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
 */
public void selectionChanged(IAction action, ISelection selection) {
    if (selection != null && selection instanceof IStructuredSelection) {
        IStructuredSelection ss = (IStructuredSelection) selection;
        if (!ss.isEmpty()) {
            this.selected = ss.toList();
        }
    }

}

From source file:net.sf.eclipsecs.ui.actions.ActivateProjectsAction.java

License:Open Source License

/**
 * {@inheritDoc}/*w  ww.  j  a va 2 s .  com*/
 */
@SuppressWarnings("unchecked")
public void selectionChanged(IAction action, ISelection selection) {

    if (selection instanceof IStructuredSelection) {
        IStructuredSelection sel = (IStructuredSelection) selection;
        mSelectedProjects = sel.toList();
    }
}

From source file:net.sf.eclipsefp.haskell.debug.ui.internal.launch.InteractiveLaunchShortcut.java

License:Open Source License

@Override
public void launch(final ISelection selection, final String mode) {
    // launched from workbench selection
    if (selection != null && selection instanceof IStructuredSelection) {
        List<IResource> list = new ArrayList<>();
        IStructuredSelection ssel = (IStructuredSelection) selection;
        for (Object element : ssel.toList()) {
            IResource res = ResourceUtil.findResource(element);
            if (res != null) {
                list.add(res);/*from  w ww.j  av  a2 s.c o m*/
            }
        }
        IResource[] ress = ResourceUtil.toResourceArray(list);
        launch(ress, mode);
    }
}

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

License:Open Source License

@Override
public Control createControl(final Composite parent) {
    mOriginalHeaders = mHeaderAssociationManager
            .getAssociatedHeaders((IFile) ((NSISProperties) mSettings).getResource());
    mHeaders = new HashSet<IFile>();
    initHeaders();//from w  ww .  j av a 2  s.  co  m
    final IFilter filter = new IFilter() {
        public boolean select(Object toTest) {
            if (toTest instanceof IFile) {
                String ext = ((IFile) toTest).getFileExtension();
                if (ext != null && ext.equalsIgnoreCase(INSISConstants.NSH_EXTENSION)) {
                    return mHeaders != null && !mHeaders.contains(toTest);
                }
            }
            return false;
        }
    };

    Composite composite = new Composite(parent, SWT.NONE);
    GridLayout layout = new GridLayout(2, false);
    composite.setLayout(layout);

    Label l = new Label(composite, SWT.NONE);
    l.setText(EclipseNSISPlugin.getResourceString("associated.headers.title")); //$NON-NLS-1$
    GridData data = new GridData(SWT.FILL, SWT.FILL, true, false);
    data.horizontalSpan = 2;
    l.setLayoutData(data);

    Table table = new Table(composite, SWT.FULL_SELECTION | SWT.MULTI | SWT.V_SCROLL | SWT.BORDER);
    table.setHeaderVisible(true);
    table.setLinesVisible(true);
    TableColumn column = new TableColumn(table, SWT.LEFT, 0);
    column.setText(EclipseNSISPlugin.getResourceString("associated.headers.column.label")); //$NON-NLS-1$
    table.addControlListener(new TableResizer());

    mViewer = new TableViewer(table);
    mViewer.setContentProvider(new CollectionContentProvider());
    mViewer.setLabelProvider(new CollectionLabelProvider() {
        @Override
        public String getColumnText(Object element, int columnIndex) {
            if (element instanceof IFile) {
                return ((IFile) element).getFullPath().toString();
            }
            return null;
        }
    });
    mViewer.setComparator(new ViewerComparator() {
        @Override
        public int compare(Viewer viewer, Object e1, Object e2) {
            if (e1 instanceof IFile && e2 instanceof IFile) {
                return ((IFile) e1).getFullPath().toString().compareTo(((IFile) e2).getFullPath().toString());
            }
            return super.compare(viewer, e1, e2);
        }
    });
    data = new GridData(SWT.FILL, SWT.FILL, true, true);
    data.verticalSpan = 2;
    table.setLayoutData(data);
    Button addButton = new Button(composite, SWT.PUSH);
    addButton.setImage(CommonImages.ADD_ICON);
    addButton.setToolTipText(EclipseNSISPlugin.getResourceString("add.associated.header.toolip")); //$NON-NLS-1$
    addButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent arg0) {
            FileSelectionDialog dialog = new FileSelectionDialog(parent.getShell(),
                    ((NSISProperties) mSettings).getResource().getParent(), filter);
            dialog.setDialogMessage(EclipseNSISPlugin.getResourceString("nsis.script.prompt")); //$NON-NLS-1$
            dialog.setHelpAvailable(false);
            if (dialog.open() == Window.OK) {
                IFile file = dialog.getFile();
                IFile script = mHeaderAssociationManager.getAssociatedScript(file);
                if (script != null && !script.equals(((NSISProperties) mSettings).getResource())
                        && mReassociateHeaderWarning.getSelection()) {

                    MessageDialogWithToggle dlg = new MessageDialogWithToggle(parent.getShell(),
                            EclipseNSISPlugin.getResourceString("confirm.title"), //$NON-NLS-1$
                            EclipseNSISPlugin.getShellImage(),
                            EclipseNSISPlugin.getFormattedString("associated.header.warning", //$NON-NLS-1$
                                    new String[] { file.getFullPath().toString(),
                                            script.getFullPath().toString() }),
                            MessageDialog.QUESTION,
                            new String[] { IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL }, 0,
                            EclipseNSISPlugin.getResourceString("associated.header.toggle.message"), false); //$NON-NLS-1$
                    dlg.open();
                    if (dialog.getReturnCode() == IDialogConstants.OK_ID) {
                        mReassociateHeaderWarning.setSelection(!dlg.getToggleState());
                    } else {
                        return;
                    }
                }
                if (!mHeaders.contains(file)) {
                    mHeaders.add(file);
                    mViewer.refresh(false);
                }
            }
        }
    });
    addButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));

    final Button removeButton = new Button(composite, SWT.PUSH);
    removeButton.setImage(CommonImages.DELETE_ICON);
    removeButton.setToolTipText(EclipseNSISPlugin.getResourceString("remove.associated.header.toolip")); //$NON-NLS-1$
    removeButton.setEnabled(false);
    removeButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent arg0) {
            IStructuredSelection sel = (IStructuredSelection) mViewer.getSelection();
            if (!sel.isEmpty()) {
                mHeaders.removeAll(sel.toList());
                mViewer.refresh(false);
            }
        }
    });
    data = new GridData(SWT.FILL, SWT.TOP, false, false);
    data.verticalSpan = 2;
    removeButton.setLayoutData(data);

    Composite c = new Composite(composite, SWT.NONE);
    data = new GridData(SWT.FILL, SWT.FILL, true, false);
    c.setLayoutData(data);
    layout = new GridLayout(2, false);
    layout.marginWidth = layout.marginHeight = 0;
    layout.horizontalSpacing = 3;
    c.setLayout(layout);

    mReassociateHeaderWarning = new Button(c, SWT.CHECK);
    mReassociateHeaderWarning.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
    mReassociateHeaderWarning.setSelection(NSISPreferences.getInstance().getPreferenceStore()
            .getBoolean(INSISPreferenceConstants.WARN_REASSOCIATE_HEADER));
    l = new Label(c, SWT.WRAP);
    l.setText(EclipseNSISPlugin.getResourceString("show.associated.header.warning.label")); //$NON-NLS-1$
    l.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false));

    mViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            IStructuredSelection selection = (IStructuredSelection) event.getSelection();
            removeButton.setEnabled((selection != null && !selection.isEmpty()));
        }
    });

    mViewer.setInput(mHeaders);
    PlatformUI.getWorkbench().getHelpSystem().setHelp(composite,
            INSISConstants.PLUGIN_CONTEXT_PREFIX + "nsis_assochdrproperties_context"); //$NON-NLS-1$
    return composite;
}

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

License:Open Source License

@SuppressWarnings("unchecked")
private void remove() {
    IStructuredSelection selection = (IStructuredSelection) mTableViewer.getSelection();
    if (!selection.isEmpty()) {
        Collection<NSISTaskTag> coll = (Collection<NSISTaskTag>) mTableViewer.getInput();
        for (Iterator<?> iter = selection.toList().iterator(); iter.hasNext();) {
            coll.remove(iter.next());/*from   w  w w .  ja  v a2  s.  c om*/
        }
        mTableViewer.refresh();
    }
}

From source file:net.sf.eclipsensis.installoptions.dialogs.InstallOptionsPreferencePage.java

License:Open Source License

/**
 * @param composite//from   w ww. j a va  2  s  .c o m
 */
private Control createDialogSizesGroup(final Composite composite) {
    final Group group = new Group(composite, SWT.SHADOW_ETCHED_IN);
    GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
    gridData.widthHint = convertWidthInCharsToPixels(60);
    group.setLayoutData(gridData);
    GridLayout layout = new GridLayout(2, false);
    group.setLayout(layout);
    group.setText(InstallOptionsPlugin.getResourceString("dialog.sizes.group.name")); //$NON-NLS-1$

    Table table = new Table(group, SWT.CHECK | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
    gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
    table.setLayoutData(gridData);
    FontData[] fd = table.getFont().getFontData();
    for (int i = 0; i < fd.length; i++) {
        fd[i].setStyle(fd[i].getStyle() | SWT.BOLD);
    }
    final Font boldFont = new Font(table.getShell().getDisplay(), fd);
    table.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            boldFont.dispose();
        }
    });

    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    final TableColumn[] columns = new TableColumn[3];
    columns[0] = new TableColumn(table, SWT.NONE);
    columns[0].setText(InstallOptionsPlugin.getResourceString("dialog.size.name.label")); //$NON-NLS-1$

    columns[1] = new TableColumn(table, SWT.NONE);
    columns[1].setText(InstallOptionsPlugin.getResourceString("dialog.size.width.label")); //$NON-NLS-1$

    columns[2] = new TableColumn(table, SWT.NONE);
    columns[2].setText(InstallOptionsPlugin.getResourceString("dialog.size.height.label")); //$NON-NLS-1$

    mDialogSizeViewer = new CheckboxTableViewer(table);
    DialogSizeLabelProvider provider = new DialogSizeLabelProvider();
    provider.setDefaultFont(boldFont);
    mDialogSizeViewer.setLabelProvider(provider);
    mDialogSizeViewer.setContentProvider(new CollectionContentProvider());
    mDialogSizeViewer.addDoubleClickListener(new IDoubleClickListener() {
        public void doubleClick(DoubleClickEvent e) {
            editDialogSize();
        }
    });

    final Composite buttons = new Composite(group, SWT.NONE);
    buttons.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
    layout = new GridLayout();
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    buttons.setLayout(layout);

    createButton(buttons, CommonImages.ADD_ICON, "new.tooltip", //$NON-NLS-1$
            new Listener() {
                public void handleEvent(Event e) {
                    new DialogSizeDialog(getShell(), null).open();
                }
            });

    mEditDialogSize = createButton(buttons, CommonImages.EDIT_ICON, "edit.tooltip", //$NON-NLS-1$
            new Listener() {
                public void handleEvent(Event e) {
                    editDialogSize();
                }
            });

    mRemoveDialogSize = createButton(buttons, CommonImages.DELETE_ICON, "remove.tooltip", //$NON-NLS-1$
            new Listener() {
                @SuppressWarnings("unchecked")
                public void handleEvent(Event e) {
                    IStructuredSelection selection = (IStructuredSelection) mDialogSizeViewer.getSelection();
                    if (!selection.isEmpty()) {
                        Collection<DialogSize> coll = (Collection<DialogSize>) mDialogSizeViewer.getInput();
                        for (Iterator<?> iter = selection.toList().iterator(); iter.hasNext();) {
                            DialogSize ds = (DialogSize) iter.next();
                            coll.remove(ds);
                            if (mDefaultDialogSize.equals(ds)) {
                                mDefaultDialogSize = null;
                            }
                        }
                        if (mDefaultDialogSize == null && coll.size() > 0) {
                            mDefaultDialogSize = coll.iterator().next();
                            mDefaultDialogSize.setDefault(true);
                        }
                        mDialogSizeViewer.refresh();
                        mDialogSizeViewer.setAllChecked(false);
                        mDialogSizeViewer.setChecked(mDefaultDialogSize, true);
                    }
                }
            });

    mDialogSizeViewer.addCheckStateListener(new ICheckStateListener() {
        @SuppressWarnings("unchecked")
        public void checkStateChanged(CheckStateChangedEvent event) {
            DialogSize dialogSize = (DialogSize) event.getElement();
            boolean checked = event.getChecked();
            Collection<DialogSize> dialogSizes = (Collection<DialogSize>) mDialogSizeViewer.getInput();
            if (dialogSizes.size() == 1) {
                checked = true;
            } else {
                for (Iterator<DialogSize> iter = dialogSizes.iterator(); iter.hasNext();) {
                    DialogSize ds = iter.next();
                    if (!ds.equals(dialogSize) && ds.isDefault() == checked) {
                        ds.setDefault(!checked);
                        mDialogSizeViewer.setChecked(ds, !checked);
                        mDialogSizeViewer.refresh(ds, true);
                        break;
                    }
                }
            }
            dialogSize.setDefault(checked);
            mDialogSizeViewer.setChecked(dialogSize, checked);
            mDialogSizeViewer.refresh(dialogSize, true);
            updateButtons();
        }
    });

    mDialogSizeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent e) {
            updateButtons();
        }
    });

    Label l = new Label(group, SWT.WRAP);
    gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
    gridData.horizontalSpan = 2;
    l.setLayoutData(gridData);
    l.setText(InstallOptionsPlugin.getResourceString("dialog.size.group.footer")); //$NON-NLS-1$

    updateDialogSizeViewerInput();
    table.addControlListener(new TableResizer(new double[] { 2, 1, 1 }));

    return group;
}

From source file:net.sf.eclipsensis.installoptions.properties.dialogs.FileFilterDialog.java

License:Open Source License

@Override
@SuppressWarnings("unchecked")
protected Control createDialogArea(Composite parent) {
    GridLayout layout;//from  w  w w .ja va 2  s  .  com
    Composite composite = (Composite) super.createDialogArea(parent);

    final Group summaryGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
    summaryGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
    summaryGroup.setLayout(new GridLayout(2, false));
    summaryGroup.setText(InstallOptionsPlugin.getResourceString("filter.summary.group.name")); //$NON-NLS-1$
    Table summaryTable = new Table(summaryGroup, 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 = new Composite(summaryGroup, SWT.NONE);
    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 = new Button(summaryButtons, SWT.PUSH);
    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() {
        public void handleEvent(Event e) {
            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);
                summaryViewer.refresh(false);
                summaryViewer.setSelection(new StructuredSelection(f));

            }
        }
    });

    final Button summaryDel = new Button(summaryButtons, SWT.PUSH);
    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() {
        public void handleEvent(Event e) {
            List<FileFilter> list = (List<FileFilter>) summaryViewer.getInput();
            if (list != null) {
                IStructuredSelection selection = (IStructuredSelection) summaryViewer.getSelection();
                if (!selection.isEmpty()) {
                    for (Iterator<?> iter = selection.toList().iterator(); iter.hasNext();) {
                        list.remove(iter.next());
                    }
                    summaryViewer.refresh(false);
                }
            }
        }
    });
    summaryDel.setEnabled(!summaryViewer.getSelection().isEmpty());

    final TableViewerUpDownMover<List<FileFilter>, FileFilter> summaryMover = new TableViewerUpDownMover<List<FileFilter>, FileFilter>() {
        @Override
        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) {
            (input).clear();
            (input).addAll(elements);
        }
    };
    summaryMover.setViewer(summaryViewer);

    final Button summaryUp = new Button(summaryButtons, SWT.PUSH);
    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 = new Button(summaryButtons, SWT.PUSH);
    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 detailsGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
    detailsGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
    detailsGroup.setLayout(new GridLayout(1, false));
    detailsGroup.setText(InstallOptionsPlugin.getResourceString("filter.detail.group.name")); //$NON-NLS-1$

    boolean isNull = (mCurrent == null);
    Composite detailsComposite = new Composite(detailsGroup, SWT.NONE);
    detailsComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    layout = new GridLayout(2, false);
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    detailsComposite.setLayout(layout);

    final Label descriptionLabel = new Label(detailsComposite, SWT.NONE);
    descriptionLabel.setText(InstallOptionsPlugin.getResourceString("filter.description")); //$NON-NLS-1$
    descriptionLabel.setLayoutData(new GridData());
    descriptionLabel.setEnabled(!isNull);

    final Text descriptionText = new Text(detailsComposite, SWT.BORDER);
    descriptionText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    descriptionText.addModifyListener(new ModifyListener() {
        public void modifyText(ModifyEvent e) {
            if (mCurrent != null) {
                mCurrent.setDescription(descriptionText.getText());
                summaryViewer.update(mCurrent, null);
            }
        }
    });
    descriptionText.setEnabled(!isNull);

    final Label patternsLabel = new Label(detailsGroup, SWT.NONE);
    patternsLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    patternsLabel.setText(InstallOptionsPlugin.getResourceString("filter.patterns")); //$NON-NLS-1$
    patternsLabel.setEnabled(!isNull);

    detailsComposite = new Composite(detailsGroup, SWT.NONE);
    detailsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    layout = new GridLayout(2, false);
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    detailsComposite.setLayout(layout);

    final Table patternsTable = new Table(detailsComposite, 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();
        }

        public void modify(Object element, String property, Object value) {
            if (value == null) {
                Common.openError(getShell(), textEditor.getErrorMessage(),
                        InstallOptionsPlugin.getShellImage());
            } else {
                FilePattern pattern = (FilePattern) ((TableItem) element).getData();
                pattern.setPattern((String) value);
                patternsViewer.update(pattern, null);
                summaryViewer.update(mCurrent, null);
            }
        }
    });

    final Composite patternsButtons = new Composite(detailsComposite, SWT.NONE);
    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 = new Button(patternsButtons, SWT.PUSH);
    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() {
        public void handleEvent(Event e) {
            if (mCurrent != null) {
                FilePattern[] patterns = (FilePattern[]) patternsViewer.getInput();
                patterns = (FilePattern[]) Common.resizeArray(patterns, patterns.length + 1);
                String filter = InstallOptionsPlugin.getResourceString("default.filter.pattern"); //$NON-NLS-1$
                patterns[patterns.length - 1] = new FilePattern(filter);
                mCurrent.setPatterns(patterns);
                patternsViewer.setInput(patterns);
                patternsViewer.setSelection(new StructuredSelection(patterns[patterns.length - 1]));
                summaryViewer.update(mCurrent, null);
                patternsViewer.editElement(patterns[patterns.length - 1], 0);
                ((Text) textEditor.getControl()).setSelection(filter.length());
            }
        }
    });
    patternsAdd.setEnabled(!isNull);

    final Button patternsDel = new Button(patternsButtons, SWT.PUSH);
    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() {
        public void handleEvent(Event e) {
            if (mCurrent != null) {
                FilePattern[] patterns = (FilePattern[]) patternsViewer.getInput();
                int[] indices = patternsTable.getSelectionIndices();
                FilePattern[] patterns2 = (FilePattern[]) Common.resizeArray(patterns,
                        patterns.length - indices.length);
                int j = 0;
                int k = 0;
                for (int i = 0; i < patterns.length; i++) {
                    if (j >= indices.length || i != indices[j]) {
                        patterns2[k++] = patterns[i];
                    } else {
                        j++;
                    }
                }
                mCurrent.setPatterns(patterns2);
                patternsViewer.setInput(patterns2);
                summaryViewer.update(mCurrent, null);
            }
        }
    });
    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 (mCurrent != null) {
                return Common.makeList((FilePattern[]) ((TableViewer) getViewer()).getInput());
            }
            return Collections.<FilePattern>emptyList();
        }

        @Override
        protected void updateStructuredViewerInput(FilePattern[] input, List elements, List move,
                boolean isDown) {
            if (mCurrent != null) {
                for (int i = 0; i < input.length; i++) {
                    input[i] = (FilePattern) elements.get(i);
                }
                patternsViewer.refresh();
                summaryViewer.update(mCurrent, null);
            }
        }
    };
    patternsMover.setViewer(patternsViewer);

    final Button patternsUp = new Button(patternsButtons, SWT.PUSH);
    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 = new Button(patternsButtons, SWT.PUSH);
    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());
            mCurrent = null;
            if (!sel.isEmpty()) {
                if (sel.size() == 1) {
                    mCurrent = (FileFilter) sel.getFirstElement();
                }
            }
            boolean isNull = (mCurrent == null);
            descriptionText.setText((isNull ? "" : mCurrent.getDescription())); //$NON-NLS-1$
            descriptionText.setSelection(descriptionText.getText().length());
            patternsViewer.setInput((isNull ? null : mCurrent.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());
        }
    });

    applyDialogFont(composite);
    ((GridData) composite.getLayoutData()).widthHint = convertWidthInCharsToPixels(80);
    summaryViewer.setInput(mFilter);
    return composite;
}

From source file:net.sf.eclipsensis.installoptions.properties.dialogs.ListItemsDialog.java

License:Open Source License

@Override
protected Control createDialogArea(Composite parent) {
    final Composite composite = (Composite) super.createDialogArea(parent);
    GridLayout layout = (GridLayout) composite.getLayout();
    layout.numColumns = 2;//from  w  ww.  ja v  a  2  s.co m
    layout.makeColumnsEqualWidth = false;

    Table table = new Table(composite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION | SWT.V_SCROLL);
    initializeDialogUnits(table);
    GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
    data.widthHint = convertWidthInCharsToPixels(40);
    data.heightHint = convertHeightInCharsToPixels(10);
    table.setLayoutData(data);
    table.setLinesVisible(true);
    new TableColumn(table, SWT.LEFT);

    final TableViewer viewer = new TableViewer(table);
    viewer.setContentProvider(new CollectionContentProvider());
    viewer.setLabelProvider(new LabelProvider());
    final TextCellEditor textEditor = new TextCellEditor(table);
    ((Text) textEditor.getControl()).addVerifyListener(new VerifyListener() {
        public void verifyText(VerifyEvent e) {
            e.doit = e.text.indexOf(IInstallOptionsConstants.LIST_SEPARATOR) < 0;
            if (!e.doit) {
                e.display.beep();
            }
        }
    });
    viewer.setColumnProperties(new String[] { "item" }); //$NON-NLS-1$
    viewer.setCellEditors(new CellEditor[] { textEditor });
    viewer.setCellModifier(new ICellModifier() {
        public boolean canModify(Object element, String property) {
            return true;
        }

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

        @SuppressWarnings("unchecked")
        public void modify(Object element, String property, Object value) {
            if (value == null) {
                Common.openError(getShell(), textEditor.getErrorMessage(),
                        InstallOptionsPlugin.getShellImage());
            } else {
                TableItem ti = (TableItem) element;
                Table t = ti.getParent();
                int n = t.getSelectionIndex();
                List<String> list = (List<String>) viewer.getInput();
                if (n < list.size()) {
                    list.set(n, (String) value);
                } else {
                    list.add((String) value);
                }
                viewer.refresh(true);
                viewer.setSelection(new StructuredSelection(value));
            }
        }
    });

    final Composite buttons = new Composite(composite, SWT.NONE);
    buttons.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
    layout = new GridLayout(1, false);
    layout.marginWidth = 0;
    layout.marginHeight = 0;
    buttons.setLayout(layout);

    final Button add = new Button(buttons, SWT.PUSH);
    add.setImage(CommonImages.ADD_ICON);
    add.setToolTipText(EclipseNSISPlugin.getResourceString("new.tooltip")); //$NON-NLS-1$
    add.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    add.addListener(SWT.Selection, new Listener() {
        @SuppressWarnings("unchecked")
        public void handleEvent(Event e) {
            List<String> list = (List<String>) viewer.getInput();
            if (list != null) {
                int counter = 1;
                String item = InstallOptionsPlugin.getFormattedString("default.listitem.label", //$NON-NLS-1$
                        new Object[] { new Integer(counter++) });
                while (Common.collectionContainsIgnoreCase(list, item)) {
                    item = InstallOptionsPlugin.getFormattedString("default.listitem.label", //$NON-NLS-1$
                            new Object[] { new Integer(counter++) });
                }
                list.add(item);
                viewer.refresh(false);
                viewer.setSelection(new StructuredSelection(item));
                viewer.editElement(item, 0);
                Text t = (Text) textEditor.getControl();
                t.setSelection(item.length());
            }
        }
    });

    final Button del = new Button(buttons, SWT.PUSH);
    del.setImage(CommonImages.DELETE_ICON);
    del.setToolTipText(EclipseNSISPlugin.getResourceString("remove.tooltip")); //$NON-NLS-1$
    del.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    del.addListener(SWT.Selection, new Listener() {
        @SuppressWarnings("unchecked")
        public void handleEvent(Event e) {
            List<String> list = (List<String>) viewer.getInput();
            if (list != null) {
                IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
                if (!selection.isEmpty()) {
                    for (Iterator<?> iter = selection.toList().iterator(); iter.hasNext();) {
                        list.remove(iter.next());
                    }
                    viewer.refresh(false);
                }
            }
        }
    });
    del.setEnabled(!viewer.getSelection().isEmpty());

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

        @Override
        protected void updateStructuredViewerInput(List<String> input, List<String> elements, List<String> move,
                boolean isDown) {
            (input).clear();
            (input).addAll(elements);
        }
    };
    mover.setViewer(viewer);

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

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

    viewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            IStructuredSelection sel = (IStructuredSelection) event.getSelection();
            del.setEnabled(!sel.isEmpty());
            up.setEnabled(mover.canMoveUp());
            down.setEnabled(mover.canMoveDown());
        }
    });

    table.addControlListener(new TableResizer());
    viewer.setInput(mValues);
    return composite;
}

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);/*  w  ww . ja va  2 s.c  o m*/

        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.eclipsensis.installoptions.properties.tabbed.section.ListItemsPropertySectionCreator.java

License:Open Source License

protected void createListAndStateButtons(Composite buttons, final CheckboxTableViewer viewer,
        TabbedPropertySheetWidgetFactory widgetFactory, final InstallOptionsCommandHelper commandHelper) {
    final IPropertyDescriptor listItemsDescriptor = getWidget()
            .getPropertyDescriptor(InstallOptionsModel.PROPERTY_LISTITEMS);
    final ICellEditorValidator listItemsValidator = PropertyDescriptorHelper
            .getCellEditorValidator((PropertyDescriptor) listItemsDescriptor);
    final IPropertyDescriptor stateDescriptor = getWidget()
            .getPropertyDescriptor(InstallOptionsModel.PROPERTY_STATE);
    final ICellEditorValidator stateValidator = PropertyDescriptorHelper
            .getCellEditorValidator((PropertyDescriptor) stateDescriptor);

    final TextCellEditor textEditor = new TextCellEditor(viewer.getTable());
    ((Text) textEditor.getControl()).addVerifyListener(new VerifyListener() {
        public void verifyText(VerifyEvent e) {
            e.doit = e.text.indexOf(IInstallOptionsConstants.LIST_SEPARATOR) < 0;
            if (!e.doit) {
                e.display.beep();// ww w . j a  v a 2  s.c  o  m
            }
        }
    });
    viewer.setColumnProperties(new String[] { "item" }); //$NON-NLS-1$
    viewer.setCellEditors(new CellEditor[] { textEditor });
    viewer.setCellModifier(new ICellModifier() {
        public boolean canModify(Object element, String property) {
            return true;
        }

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

        @SuppressWarnings("unchecked")
        public void modify(Object element, String property, Object value) {
            if (value == null) {
                Common.openError(viewer.getTable().getShell(), textEditor.getErrorMessage(),
                        InstallOptionsPlugin.getShellImage());
            } else {
                TableItem ti = (TableItem) element;
                Table t = ti.getParent();
                int n = t.getSelectionIndex();
                String oldValue = null;
                List<String> list = (List<String>) viewer.getInput();
                if (n < list.size()) {
                    oldValue = list.set(n, String.valueOf(value));
                } else {
                    list.add(String.valueOf(value));
                }
                String error = listItemsValidator.isValid(list);
                if (Common.isEmpty(error)) {
                    CompoundCommand command = commandHelper.createPropertyChangedCommand(
                            InstallOptionsModel.PROPERTY_LISTITEMS, listItemsDescriptor.getDisplayName(),
                            getWidget(), list);
                    List<String> oldState = Common.tokenizeToList(
                            ((InstallOptionsListItems) getWidget()).getState(),
                            IInstallOptionsConstants.LIST_SEPARATOR);
                    if (Common.collectionContainsIgnoreCase(oldState, oldValue)) {
                        if (!Common.collectionContainsIgnoreCase(list, oldValue)) {
                            for (ListIterator<String> iter = oldState.listIterator(); iter.hasNext();) {
                                String str = iter.next();
                                if (Common.stringsAreEqual(str, oldValue, true)) {
                                    iter.set(String.valueOf(value));
                                    String newState = Common.flatten(oldState,
                                            IInstallOptionsConstants.LIST_SEPARATOR);
                                    error = stateValidator.isValid(newState);
                                    if (Common.isEmpty(error)) {
                                        CompoundCommand cmd = new ForwardUndoCompoundCommand(
                                                command.getLabel());
                                        cmd.add(commandHelper.createPropertyChangedCommand(
                                                InstallOptionsModel.PROPERTY_STATE,
                                                stateDescriptor.getDisplayName(), getWidget(), newState));
                                        cmd.add(command);
                                        command = cmd;
                                    } else {
                                        command = null;
                                    }
                                    break;
                                }
                            }

                        }
                    }
                    if (command != null && command.size() > 0) {
                        viewer.refresh(true);
                        commandHelper.execute(command);
                        viewer.refresh(true);
                        viewer.setSelection(new StructuredSelection(value));
                        return;
                    }
                }
                Common.openError(viewer.getTable().getShell(), error, InstallOptionsPlugin.getShellImage());
                if (oldValue != null) {
                    list.set(n, oldValue);
                } else {
                    list.remove(n);
                }
            }
        }
    });
    final Button add = widgetFactory.createButton(buttons, "", SWT.PUSH | SWT.FLAT); //$NON-NLS-1$
    add.setImage(CommonImages.ADD_ICON);
    add.setToolTipText(EclipseNSISPlugin.getResourceString("new.tooltip")); //$NON-NLS-1$
    add.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    add.addListener(SWT.Selection, new Listener() {
        @SuppressWarnings("unchecked")
        public void handleEvent(Event e) {
            List<String> list = (List<String>) viewer.getInput();
            if (list != null) {
                int counter = 1;
                String item = InstallOptionsPlugin.getFormattedString("default.listitem.label", //$NON-NLS-1$
                        new Object[] { new Integer(counter++) });

                while (Common.collectionContainsIgnoreCase(list, item)) {
                    item = InstallOptionsPlugin.getFormattedString("default.listitem.label", //$NON-NLS-1$
                            new Object[] { new Integer(counter++) });
                }
                list.add(item);
                String error = listItemsValidator.isValid(list);
                if (Common.isEmpty(error)) {
                    commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_LISTITEMS,
                            listItemsDescriptor.getDisplayName(), getWidget(), list);
                    viewer.refresh(false);
                    viewer.setSelection(new StructuredSelection(item));
                    viewer.editElement(item, 0);
                    Text t = (Text) textEditor.getControl();
                    t.setSelection(item.length());
                } else {
                    Common.openError(viewer.getTable().getShell(), error, InstallOptionsPlugin.getShellImage());
                    list.remove(item);
                }
            }
        }
    });

    final Button del = widgetFactory.createButton(buttons, "", SWT.PUSH | SWT.FLAT); //$NON-NLS-1$
    del.setImage(CommonImages.DELETE_ICON);
    del.setToolTipText(EclipseNSISPlugin.getResourceString("remove.tooltip")); //$NON-NLS-1$
    del.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    del.addListener(SWT.Selection, new Listener() {
        @SuppressWarnings("unchecked")
        public void handleEvent(Event e) {
            List<String> list = (List<String>) viewer.getInput();
            if (list != null) {
                IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
                if (!selection.isEmpty()) {
                    for (Iterator<?> iter = selection.toList().iterator(); iter.hasNext();) {
                        list.remove(iter.next());
                    }
                    String error = listItemsValidator.isValid(list);
                    if (Common.isEmpty(error)) {
                        commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_LISTITEMS,
                                listItemsDescriptor.getDisplayName(), getWidget(), list);
                        viewer.refresh(false);
                    } else {
                        Common.openError(viewer.getTable().getShell(), error,
                                InstallOptionsPlugin.getShellImage());
                        list.clear();
                        list.addAll(((InstallOptionsListItems) getWidget()).getListItems());
                        viewer.setSelection(selection);
                    }
                }
            }
        }
    });
    del.setEnabled(!viewer.getSelection().isEmpty());

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

        @Override
        protected void updateStructuredViewerInput(List<String> input, List<String> elements, List<String> move,
                boolean isDown) {
            String error = listItemsValidator.isValid(elements);
            if (Common.isEmpty(error)) {
                commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_LISTITEMS,
                        listItemsDescriptor.getDisplayName(), getWidget(), elements);
            } else {
                Common.openError(viewer.getTable().getShell(), error, InstallOptionsPlugin.getShellImage());
            }
        }
    };
    mover.setViewer(viewer);

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

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

    viewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            IStructuredSelection sel = (IStructuredSelection) event.getSelection();
            del.setEnabled(!sel.isEmpty());
            up.setEnabled(mover.canMoveUp());
            down.setEnabled(mover.canMoveDown());
        }
    });
}