Example usage for org.eclipse.jface.viewers TextCellEditor getErrorMessage

List of usage examples for org.eclipse.jface.viewers TextCellEditor getErrorMessage

Introduction

In this page you can find the example usage for org.eclipse.jface.viewers TextCellEditor getErrorMessage.

Prototype

public String getErrorMessage() 

Source Link

Document

Returns the current error message for this cell editor.

Usage

From source file:com.nextep.designer.sqlclient.ui.connectors.SQLResultConnector.java

License:Open Source License

private void registerCellEditors() {
    List<CellEditor> editors = new ArrayList<CellEditor>();
    List<String> colProperties = new ArrayList<String>();
    int i = 0;//from w w  w .  ja va 2  s  .  c  o  m
    for (TableColumn c : sqlView.getColumns()) {
        final TextCellEditor editor = new TextCellEditor(sqlView);
        final ICellEditorValidator validator = (ICellEditorValidator) c.getData(KEY_CELL_VALIDATOR);
        if (validator != null) {
            editor.setValidator(validator);
            // This editor listener handles the refresh of the status bar on validation of the
            // user edition
            editor.addListener(new ICellEditorListener() {

                @Override
                public void editorValueChanged(boolean oldValidState, boolean newValidState) {
                    if (!newValidState) {
                        setStatusLabel(editor.getErrorMessage(), true);
                    } else {
                        setStatusLabel(null, false);
                    }
                }

                @Override
                public void cancelEditor() {
                }

                @Override
                public void applyEditorValue() {

                }
            });
        }
        editors.add(editor);
        colProperties.add(String.valueOf(i++));
    }
    sqlViewer.setCellEditors(editors.toArray(new CellEditor[editors.size()]));
    sqlViewer.setCellModifier(modifier);
    sqlViewer.setColumnProperties(colProperties.toArray(new String[colProperties.size()]));
}

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;/* w  w  w  .  j ava2s  . 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;// ww  w  .j  a  va2s .c om
    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);/*from  w  w  w.j  a  va 2  s .  c om*/

        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();//from   w ww .j av  a2s  .co 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());
        }
    });
}