List of usage examples for org.eclipse.jface.viewers TextCellEditor getErrorMessage
public String getErrorMessage()
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()); } }); }