Example usage for org.eclipse.jface.viewers ICellEditorValidator isValid

List of usage examples for org.eclipse.jface.viewers ICellEditorValidator isValid

Introduction

In this page you can find the example usage for org.eclipse.jface.viewers ICellEditorValidator isValid.

Prototype

public String isValid(Object value);

Source Link

Document

Returns a string indicating whether the given value is valid; null means valid, and non-null means invalid, with the result being the error message to display to the end user.

Usage

From source file:com.mentor.nucleus.bp.ui.properties.test.PropertiesRenameTests.java

License:Open Source License

private void doRenameTestInvalidChar(NonRootModelElement uut, ICellEditorValidator validator, String expected) {
    Selection.getInstance().clear();/*from   ww  w . jav a2 s . c om*/
    Selection.getInstance().addToSelection(uut);
    assertEquals(expected, validator.isValid("*"));
}

From source file:com.mentor.nucleus.bp.ui.properties.test.PropertiesRenameTests.java

License:Open Source License

private void doRenameTestSpaces(NonRootModelElement uut, ICellEditorValidator validator, String expected) {
    Selection.getInstance().clear();/*from   www  .j a  v  a2 s . c om*/
    Selection.getInstance().addToSelection(uut);
    assertEquals(expected, validator.isValid("name with spaces"));
}

From source file:com.mentor.nucleus.bp.ui.properties.test.PropertiesViewTest2.java

License:Open Source License

/**
 * Checks that after adding a space to the given model-element name,
 * the modified name is considered invalid/valid (according to the 
 * spaceAllowed parameter) by the cell editor for the model-element's 
 * name property.  The editor is created by the property-descriptor 
 * returned by the given property-source for the given property-id.
 *//*from   w w  w .ja  v a2s  .c  o  m*/
private void checkSpaceInModelElementNameProperty(IPropertySource propertySource, String propertyId,
        String name, boolean spaceAllowed, boolean duplicateName, boolean component) {
    // create a cell-editor for the name property's value
    IPropertyDescriptor descriptor = PropertiesUtil.getDescriptor(propertySource, propertyId);
    CellEditor editor = descriptor.createPropertyEditor(new Shell());

    // validate this test by checking that the editor says that the
    // given name is invalid since it is a duplicate
    ICellEditorValidator validator = editor.getValidator();
    String result = validator.isValid(name);
    // must use different message when working against a PMC root
    String message = CorePlugin.DUPLICATE_NAME_ERROR;
    if (component) {
        message = "A model element with the same name already exists.\n\n"
                + "This is most likely due to uncommitted renames or deletions."
                + "  If this is the case, please commit any outstanding changes before proceeding.\n\n"
                + "If the project is not connected to a configuration management system"
                + ", you will need to remove the target manually.";
    }
    assertTrue("Property cell editor says original name is invalid",
            duplicateName ? result.equals(message) : result == null);

    // check that the editor says that a name containing a space is
    // invalid/valid
    result = validator.isValid(name + " ");
    assertTrue("Property cell editor says name with spaces is valid",
            spaceAllowed ? result == null : result != null);
}

From source file:com.nokia.sdt.component.symbian.properties.AbstractPropertySource.java

License:Open Source License

void setPropertyValue(Object id, Object value, boolean overrideLocalizedState) {
    ITypeDescriptor td = getPropertyTypeDescriptor(id);
    if (td == null) {
        String fmt = Messages.getString("AbstractPropertySource.3"); //$NON-NLS-1$
        Object params[] = { getPropertyIdentifier(id) };
        String msg = MessageFormat.format(fmt, params);
        ComponentSystemPlugin.log(null, msg);
        return;/*w  w w  . j a v a  2  s.co m*/
    }

    IPropertyValueSource propertyValueSource = getPropertyValueSourceFor(id);
    Check.checkState(propertyValueSource != null);

    if (td instanceof CompoundPropertyTypeDescriptor
            && (value != null && !(value instanceof IPropertySource))) {

        setCompoundPropertyFromEditableValue(id, value);

    } else if (value instanceof ArrayPropertySource) {

        ArrayPropertySource aps = (ArrayPropertySource) value;
        ISequencePropertyValue spv = aps.getSequencePropertyValue();
        propertyValueSource.setPropertyValue(id, spv);
    } else if (value instanceof IPropertySource) {
        setPropertyFromPropertySource(id, (IPropertySource) value);
    } else if (value instanceof ArrayEditableValue) {
        setPropertyFromArrayEditableValue(id, (ArrayEditableValue) value);
    } else if (value instanceof Collection) {
        setPropertyFromCollection(id, (Collection) value);
    } else if (value != null) {
        // we'll check if the new value is the default
        // value both before and after conversion to text
        Object defaultValue = getDefaultValue(id);
        boolean inhibitDefaultValue = getInhibitDefaultValue(id);

        // Values coming in might be from the data model and not already internalized,
        // but then again, they might be enums, which use strings for both formats.
        // Don't balk if the conversion fails.
        if (value instanceof String) {
            Object valueObj = td.valueOf((String) value);
            if (valueObj != null) {
                value = valueObj;
            }

            ICellEditorValidator validator = getCellEditorValidator(id);
            if (validator != null) {
                String msg = validator.isValid(value);
                if (msg != null) {
                    throw new IllegalArgumentException(msg);
                }
            }
        }

        if (inhibitDefaultValue && value.equals(defaultValue))
            resetPropertyValue(id);
        else {
            String strValue = td.toStorageString(value);
            Check.checkState(strValue != null);
            if (inhibitDefaultValue && strValue.equals(defaultValue))
                resetPropertyValue(id);
            else {
                if (td.isLocalizable()) {
                    propertyValueSource.setLocalizableStringPropertyValue(id, strValue, overrideLocalizedState);
                } else if (td.isReference()) {
                    propertyValueSource.setReferencePropertyValue(id, strValue);

                } else {
                    propertyValueSource.setPropertyValue(id, strValue);
                }
            }
        }

        if (promotingReferencePropertyDescriptors.contains(id)) {
            // promoting reference property changed, so reset property descriptors
            propertyDescriptors = null;
        }

    } else
        resetPropertyValue(id);
}

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

License:Open Source License

@Override
protected void okPressed() {
    ICellEditorValidator validator = getValidator();
    if (validator != null) {
        String error = validator.isValid(getFilter());
        if (!Common.isEmpty(error)) {
            Common.openError(getShell(), EclipseNSISPlugin.getResourceString("error.title"), error, //$NON-NLS-1$
                    InstallOptionsPlugin.getShellImage());
            return;
        }/*from  www  .  j  a  va2s.  c o  m*/
    }
    super.okPressed();
}

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

License:Open Source License

@Override
protected void okPressed() {
    ICellEditorValidator validator = getValidator();
    if (validator != null) {
        String error = validator.isValid(getValues());
        if (!Common.isEmpty(error)) {
            Common.openError(getShell(), EclipseNSISPlugin.getResourceString("error.title"), error, //$NON-NLS-1$
                    InstallOptionsPlugin.getShellImage());
            return;
        }/*from ww w. j a  v  a  2s.co  m*/
    }
    super.okPressed();
}

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  ww. j a va  2s.  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.GeneralPropertySection.java

License:Open Source License

private Control createFlagsSection(final InstallOptionsWidget widget, Composite parent,
        final InstallOptionsCommandHelper commandHelper) {
    final String displayName = widget.getPropertyDescriptor(InstallOptionsModel.PROPERTY_FLAGS)
            .getDisplayName();/*from   w  w  w.  j  av a2s.c o  m*/

    TabbedPropertySheetWidgetFactory factory = getWidgetFactory();
    Composite group = factory.createGroup(parent, displayName);
    GridLayout layout = new GridLayout(2, true);
    group.setLayout(layout);

    final boolean[] nonUserChange = { false };

    final Table table = factory.createTable(group, SWT.FLAT | SWT.CHECK | SWT.SINGLE | SWT.HIDE_SELECTION);
    GC gc = new GC(table);
    gc.setFont(JFaceResources.getDialogFont());
    FontMetrics fontMetrics = gc.getFontMetrics();
    gc.dispose();
    GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
    data.horizontalSpan = 2;
    data.widthHint = fontMetrics.getAverageCharWidth() * 30;
    data.heightHint = fontMetrics.getHeight() * 10;
    table.setLayoutData(data);

    final CheckboxTableViewer viewer = new CheckboxTableViewer(table);
    viewer.setContentProvider(new CollectionContentProvider());
    viewer.setLabelProvider(new LabelProvider());
    viewer.setComparer(new IElementComparer() {
        public boolean equals(Object a, Object b) {
            return Common.objectsAreEqual(a, b);
        }

        public int hashCode(Object element) {
            if (element != null) {
                return element.hashCode();
            }
            return 0;
        }
    });
    table.addListener(SWT.EraseItem, new Listener() {
        public void handleEvent(Event event) {
            event.detail &= ~(SWT.SELECTED | SWT.FOCUSED);
        }
    });
    final List<String> flags = new ArrayList<String>(widget.getFlags());
    final Collection<String> availableFlags = widget.getTypeDef().getFlags();
    final IPropertyDescriptor descriptor = widget.getPropertyDescriptor(InstallOptionsModel.PROPERTY_FLAGS);
    final ICellEditorValidator validator = PropertyDescriptorHelper
            .getCellEditorValidator((PropertyDescriptor) descriptor);
    final Runnable runnable = new Runnable() {
        public void run() {
            nonUserChange[0] = true;
            try {
                if (validator != null) {
                    String error = validator.isValid(flags);
                    if (error != null) {
                        Common.openError(table.getShell(), error, InstallOptionsPlugin.getShellImage());
                        viewer.setCheckedElements(widget.getFlags().toArray());
                        return;
                    }
                }
                commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_FLAGS, descriptor.getDisplayName(),
                        widget, flags);
            } finally {
                nonUserChange[0] = false;
            }
        }
    };
    viewer.addCheckStateListener(new ICheckStateListener() {
        public void checkStateChanged(CheckStateChangedEvent event) {
            String flag = (String) event.getElement();
            boolean checked = event.getChecked();
            if (checked) {
                flags.add(flag);
            } else {
                flags.remove(flag);
            }
            runnable.run();
        }
    });
    viewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            if (!event.getSelection().isEmpty()) {
                String flag = (String) ((IStructuredSelection) event.getSelection()).getFirstElement();
                viewer.setSelection(StructuredSelection.EMPTY);
                boolean checked = viewer.getChecked(flag);
                viewer.setChecked(flag, !checked);
                if (!checked) {
                    flags.add(flag);
                } else {
                    flags.remove(flag);
                }
                runnable.run();
            }
        }
    });

    Button b = factory.createButton(group, InstallOptionsPlugin.getResourceString("select.all.label"), //$NON-NLS-1$
            SWT.PUSH | SWT.FLAT);
    b.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            flags.clear();
            flags.addAll(availableFlags);
            viewer.setCheckedElements(availableFlags.toArray());
            runnable.run();
        }
    });
    b.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    b = factory.createButton(group, InstallOptionsPlugin.getResourceString("deselect.all.label"), //$NON-NLS-1$
            SWT.PUSH | SWT.FLAT);
    b.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            flags.clear();
            viewer.setCheckedElements(Common.EMPTY_STRING_ARRAY);
            runnable.run();
        }
    });
    b.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    viewer.setInput(availableFlags == null ? Collections.EMPTY_LIST : availableFlags);
    viewer.setCheckedElements(flags.toArray());
    final PropertyChangeListener listener = new PropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent evt) {
            if (evt.getPropertyName().equals(InstallOptionsModel.PROPERTY_FLAGS)) {
                if (!nonUserChange[0]) {
                    List<String> newFlags = widget.getFlags();
                    if (Common.isValid(viewer.getControl())) {
                        viewer.setCheckedElements(
                                newFlags == null ? Common.EMPTY_STRING_ARRAY : newFlags.toArray());
                        flags.clear();
                        flags.addAll(newFlags);
                    }
                }
            }
        }
    };
    widget.addPropertyChangeListener(listener);
    group.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            widget.removePropertyChangeListener(listener);
        }
    });
    return group;
}

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

License:Open Source License

@Override
protected Control createAppearancePropertySection(final Composite parent,
        final TabbedPropertySheetWidgetFactory widgetFactory, final InstallOptionsCommandHelper commandHelper) {
    final Composite composite = widgetFactory.createComposite(parent);
    GridLayout layout = new GridLayout(2, false);
    layout.marginWidth = layout.marginHeight = 0;
    composite.setLayout(layout);/*from  ww  w. j a va  2  s .co  m*/
    GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
    data.horizontalSpan = ((GridLayout) parent.getLayout()).numColumns;
    composite.setLayoutData(data);
    Control c = super.createAppearancePropertySection(composite, widgetFactory, commandHelper);
    data = (GridData) c.getLayoutData();
    if (data == null) {
        data = new GridData();
        c.setLayoutData(data);
    }
    data.horizontalSpan = 2;
    data.grabExcessHorizontalSpace = true;
    data.grabExcessVerticalSpace = true;
    data.horizontalAlignment = data.verticalAlignment = SWT.FILL;

    Composite composite2 = parent;
    layout = (GridLayout) parent.getLayout();
    if (layout.numColumns != 2) {
        composite2 = widgetFactory.createComposite(composite2);
        data = new GridData(SWT.FILL, SWT.FILL, true, false);
        data.horizontalSpan = layout.numColumns;
        composite2.setLayoutData(data);

        layout = new GridLayout(2, false);
        layout.marginHeight = layout.marginWidth = 0;
        composite2.setLayout(layout);
    }
    final IPropertyDescriptor descriptor = getWidget()
            .getPropertyDescriptor(InstallOptionsModel.PROPERTY_TXTCOLOR);
    final ICellEditorValidator validator = PropertyDescriptorHelper
            .getCellEditorValidator((PropertyDescriptor) descriptor);

    CLabel label = widgetFactory.createCLabel(composite2, descriptor.getDisplayName());
    label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));

    composite2 = widgetFactory.createComposite(composite2);
    composite2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    layout = new GridLayout(3, false);
    layout.marginHeight = layout.marginWidth = 0;
    composite2.setLayout(layout);

    final ILabelProvider labelProvider = descriptor.getLabelProvider();
    RGB rgb = (RGB) getWidget().getPropertyValue(InstallOptionsModel.PROPERTY_TXTCOLOR);
    final Text colorText = widgetFactory.createText(composite2, labelProvider.getText(rgb),
            SWT.FLAT | SWT.BORDER);
    colorText.setEditable(false);
    colorText.setBackground(colorText.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
    colorText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    final ColorEditor colorEditor = new ColorEditor(composite2, SWT.FLAT | widgetFactory.getOrientation());
    colorEditor.setRGB(rgb == null ? InstallOptionsLink.DEFAULT_TXTCOLOR : rgb);
    colorEditor.getButton().setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
    colorEditor.getButton().addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            RGB newRGB = colorEditor.getRGB();
            if (validator != null) {
                String error = validator.isValid(newRGB);
                if (!Common.isEmpty(error)) {
                    Common.openError(((Control) e.widget).getShell(), error,
                            InstallOptionsPlugin.getShellImage());
                    newRGB = InstallOptionsLink.DEFAULT_TXTCOLOR; //Default
                }
            }
            updateRGB(commandHelper, descriptor, labelProvider, colorText, newRGB);
        }
    });

    //Reject focus
    colorText.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            colorEditor.getButton().setFocus();
        }
    });

    Button resetButton = widgetFactory.createButton(composite2,
            InstallOptionsPlugin.getResourceString("restore.default.label"), SWT.PUSH); //$NON-NLS-1$
    resetButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
    resetButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            updateRGB(commandHelper, descriptor, labelProvider, colorText, null);
        }
    });

    final PropertyChangeListener propertyListener = new PropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent evt) {
            if (evt.getPropertyName().equals(InstallOptionsModel.PROPERTY_TXTCOLOR)) {
                RGB newRGB = checkDefault((RGB) evt.getNewValue());
                RGB oldRGB = checkDefault(colorEditor.getRGB());
                if (!Common.objectsAreEqual(oldRGB, newRGB)) {
                    colorEditor.setRGB(newRGB == null ? InstallOptionsLink.DEFAULT_TXTCOLOR : newRGB);
                    colorText.setText(labelProvider.getText(newRGB));
                }
            } else if (evt.getPropertyName().equals(InstallOptionsModel.PROPERTY_MULTILINE)) {
                Control[] controls = composite.getChildren();
                for (int i = 0; i < controls.length; i++) {
                    controls[i].dispose();
                }
                Control c = LinkPropertySectionCreator.super.createAppearancePropertySection(composite,
                        widgetFactory, commandHelper);
                GridData data = (GridData) c.getLayoutData();
                if (data == null) {
                    data = new GridData();
                    c.setLayoutData(data);
                }
                data.horizontalSpan = 2;
                data.grabExcessHorizontalSpace = true;
                data.grabExcessVerticalSpace = true;
                data.horizontalAlignment = data.verticalAlignment = SWT.FILL;
                forceLayout(composite);
            }
        }
    };
    getWidget().addPropertyChangeListener(propertyListener);
    parent.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            getWidget().removePropertyChangeListener(propertyListener);
        }
    });

    return parent;
}

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

License:Open Source License

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

    final Button selectAll = widgetFactory.createButton(buttons, "", SWT.PUSH | SWT.FLAT); //$NON-NLS-1$
    selectAll.setEnabled(((InstallOptionsListItems) getWidget()).isMultiSelect());
    selectAll.setImage(InstallOptionsPlugin.getImageManager()
            .getImage(InstallOptionsPlugin.getResourceString("select.all.icon"))); //$NON-NLS-1$
    selectAll.setToolTipText(InstallOptionsPlugin.getResourceString("select.all.tooltip")); //$NON-NLS-1$
    selectAll.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    selectAll.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event e) {
            List<?> list = (List<?>) viewer.getInput();
            if (list != null) {
                Object[] checkedItems = viewer.getCheckedElements();
                if (checkedItems != null && checkedItems.length == list.size()) {
                    return;
                }/*from   w w  w.  j  av  a 2 s .c  om*/
                String state = Common.flatten(list, IInstallOptionsConstants.LIST_SEPARATOR);
                String error = stateValidator.isValid(state);
                if (Common.isEmpty(error)) {
                    commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_STATE,
                            stateDescriptor.getDisplayName(), getWidget(), state);
                } else {
                    Common.openError(viewer.getTable().getShell(), error, InstallOptionsPlugin.getShellImage());
                }
            }
        }
    });

    final Button deselectAll = widgetFactory.createButton(buttons, "", SWT.PUSH | SWT.FLAT); //$NON-NLS-1$
    deselectAll.setImage(InstallOptionsPlugin.getImageManager()
            .getImage(InstallOptionsPlugin.getResourceString("deselect.all.icon"))); //$NON-NLS-1$
    deselectAll.setToolTipText(InstallOptionsPlugin.getResourceString("deselect.all.tooltip")); //$NON-NLS-1$
    deselectAll.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    deselectAll.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event e) {
            String state = ""; //$NON-NLS-1$
            String error = stateValidator.isValid(state);
            if (Common.isEmpty(error)) {
                commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_STATE,
                        stateDescriptor.getDisplayName(), getWidget(), state);
            } else {
                Common.openError(viewer.getTable().getShell(), error, InstallOptionsPlugin.getShellImage());
            }
        }
    });

    final PropertyChangeListener listener = new PropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent evt) {
            if (evt.getPropertyName().equals(InstallOptionsModel.PROPERTY_FLAGS)) {
                selectAll.setEnabled(((InstallOptionsListItems) getWidget()).isMultiSelect());
            }
        }
    };
    getWidget().addPropertyChangeListener(listener);
    buttons.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            getWidget().removePropertyChangeListener(listener);
        }
    });
}