-package org.simantics.modeling.ui.diagram.renaming;\r
-\r
-import org.eclipse.jface.dialogs.Dialog;\r
-import org.eclipse.jface.layout.GridDataFactory;\r
-import org.eclipse.jface.layout.GridLayoutFactory;\r
-import org.eclipse.jface.viewers.ArrayContentProvider;\r
-import org.eclipse.jface.viewers.ColumnLabelProvider;\r
-import org.eclipse.jface.viewers.TableViewer;\r
-import org.eclipse.jface.viewers.TableViewerColumn;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.ModifyEvent;\r
-import org.eclipse.swt.events.ModifyListener;\r
-import org.eclipse.swt.events.SelectionAdapter;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.swt.widgets.Text;\r
-\r
-public class ComponentsRenamingDialog extends Dialog {\r
-\r
- ComponentsRenamingModel model;\r
-\r
- // UI\r
- Composite area;\r
- Label oldNamePrefixLabel;\r
- Text oldNamePrefix;\r
- Text newNamePrefix;\r
- Label errorLabel;\r
- Text error;\r
- TableViewer tableViewer;\r
-\r
- public ComponentsRenamingDialog(Shell parentShell, ComponentsRenamingModel model) {\r
- super(parentShell);\r
- this.model = model;\r
- setShellStyle(SWT.RESIZE | SWT.TITLE);\r
- }\r
- \r
- @Override\r
- protected Control createDialogArea(Composite parent) {\r
- getShell().setText("Rename diagram contents");\r
- getShell().setLayout(new GridLayout());\r
- Composite composite = new Composite(parent, SWT.NONE);\r
- composite.setLayoutData(new GridData(GridData.FILL_BOTH));\r
- GridLayoutFactory.fillDefaults().numColumns(1).applyTo(composite);\r
- \r
- // Name prefix\r
- \r
- {\r
- area = new Composite(composite, SWT.BORDER);\r
- GridDataFactory.fillDefaults().grab(true, false).applyTo(area);\r
- GridLayoutFactory.fillDefaults().numColumns(2).margins(5, 5).applyTo(area);\r
- \r
- oldNamePrefixLabel = new Label(area, SWT.NONE);\r
- oldNamePrefixLabel.setText("Old name prefix:");\r
- \r
- oldNamePrefix = new Text(area, SWT.READ_ONLY | SWT.BORDER);\r
- oldNamePrefix.setEditable(false);\r
- oldNamePrefix.setText(model.oldNamePrefix);\r
- GridDataFactory.fillDefaults().grab(true, false).applyTo(oldNamePrefix);\r
- \r
- Label newNamePrefixLabel = new Label(area, SWT.NONE);\r
- newNamePrefixLabel.setText("&New name prefix:");\r
- \r
- newNamePrefix = new Text(area, SWT.BORDER);\r
- newNamePrefix.setText(model.oldNamePrefix);\r
- newNamePrefix.setSelection(model.oldNamePrefix.length());\r
- GridDataFactory.fillDefaults().grab(true, false).applyTo(newNamePrefix);\r
- \r
- newNamePrefix.addModifyListener(new ModifyListener() {\r
-\r
- @Override\r
- public void modifyText(ModifyEvent e) {\r
- String text = newNamePrefix.getText();\r
- if (model.prefixValidator != null) {\r
- String err = model.prefixValidator.apply(text);\r
- if (err != null) {\r
- if (error == null) {\r
- errorLabel = new Label(area, 0);\r
- errorLabel.moveBelow(newNamePrefix);\r
- GridDataFactory.fillDefaults().grab(false, false).applyTo(errorLabel);\r
- error = new Text(area, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY);\r
- error.moveBelow(errorLabel);\r
- GridDataFactory.fillDefaults().grab(true, false).applyTo(error);\r
- error.setForeground(error.getDisplay().getSystemColor(SWT.COLOR_RED));\r
- }\r
- error.setText(err);\r
- area.getParent().layout();\r
- getButton(OK).setEnabled(false);\r
- return;\r
- }\r
- if (error != null) {\r
- errorLabel.dispose();\r
- errorLabel = null;\r
- error.dispose();\r
- error = null;\r
- area.getParent().layout();\r
- getButton(OK).setEnabled(true);\r
- }\r
- }\r
-\r
- model.newNamePrefix = text;\r
- model.computeNewNames();\r
- refresh();\r
- }\r
- });\r
- }\r
- \r
- // Reset\r
- \r
- final Button resetNames = new Button(composite, SWT.CHECK);\r
- resetNames.setText("&Reset names");\r
- resetNames.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- model.reset = resetNames.getSelection();\r
- model.computeNewNames();\r
- refresh();\r
- }\r
- });\r
- \r
- // Name table\r
- \r
- tableViewer = new TableViewer(composite);\r
- tableViewer.getTable().setHeaderVisible(true);\r
- GridDataFactory.fillDefaults().grab(true, true).applyTo(tableViewer.getTable());\r
- \r
- tableViewer.setContentProvider(ArrayContentProvider.getInstance());\r
- \r
- TableViewerColumn oldNameColumn = new TableViewerColumn(tableViewer, SWT.NONE);\r
- oldNameColumn.getColumn().setText("Old name");\r
- oldNameColumn.getColumn().setWidth(250);\r
- oldNameColumn.setLabelProvider(new ColumnLabelProvider() {\r
- @Override\r
- public String getText(Object element) {\r
- NameEntry entry = (NameEntry)element;\r
- return entry.oldName;\r
- }\r
- });\r
- \r
- TableViewerColumn newNameColumn = new TableViewerColumn(tableViewer, SWT.NONE);\r
- newNameColumn.getColumn().setText("New name");\r
- newNameColumn.getColumn().setWidth(250);\r
- newNameColumn.setLabelProvider(new ColumnLabelProvider() {\r
- @Override\r
- public String getText(Object element) {\r
- NameEntry entry = (NameEntry)element;\r
- return entry.newName;\r
- }\r
- });\r
- tableViewer.setInput(model.entries.toArray());\r
- newNamePrefix.setFocus();\r
- \r
- return composite;\r
- }\r
- \r
- public void refresh() {\r
- tableViewer.refresh();\r
- }\r
- \r
- public static void main(String[] args) {\r
- final Display display = new Display();\r
- Shell shell = new Shell(display);\r
- shell.open();\r
- \r
- ComponentsRenamingModel model = new ComponentsRenamingModel();\r
- model.oldNamePrefix = "FOO";\r
- model.newNamePrefix = "FOO";\r
- for(int i=0;i<100;++i)\r
- model.entries.add(new NameEntry(null, "FOO"+(i*5), "FOO"+(i*5), "PREFIX"));\r
- \r
- ComponentsRenamingDialog dialog = new ComponentsRenamingDialog(shell, model);\r
- dialog.open();\r
- \r
- while (!shell.isDisposed()) {\r
- if (!display.readAndDispatch())\r
- display.sleep();\r
- }\r
- display.dispose();\r
- }\r
-\r
-}\r
+package org.simantics.modeling.ui.diagram.renaming;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ICheckStateProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.simantics.utils.ui.ISelectionUtils;
+
+public class ComponentsRenamingDialog extends Dialog {
+
+ ComponentsRenamingModel model;
+
+ // UI
+ Composite area;
+ Label oldNamePrefixLabel;
+ Text oldNamePrefix;
+ Text newNamePrefix;
+ Label errorLabel;
+ Text error;
+ CheckboxTableViewer tableViewer;
+
+ public ComponentsRenamingDialog(Shell parentShell, ComponentsRenamingModel model) {
+ super(parentShell);
+ this.model = model;
+ setShellStyle(SWT.RESIZE | SWT.TITLE);
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ getShell().setText("Rename diagram contents");
+ getShell().setLayout(new GridLayout());
+ Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+ GridLayoutFactory.fillDefaults().numColumns(1).applyTo(composite);
+
+ // Name prefix
+
+ {
+ area = new Composite(composite, SWT.BORDER);
+ GridDataFactory.fillDefaults().grab(true, false).applyTo(area);
+ GridLayoutFactory.fillDefaults().numColumns(2).margins(5, 5).applyTo(area);
+
+ oldNamePrefixLabel = new Label(area, SWT.NONE);
+ oldNamePrefixLabel.setText("Old name prefix:");
+
+ oldNamePrefix = new Text(area, SWT.READ_ONLY | SWT.BORDER);
+ oldNamePrefix.setEditable(false);
+ oldNamePrefix.setText(model.oldNamePrefix);
+ GridDataFactory.fillDefaults().grab(true, false).applyTo(oldNamePrefix);
+
+ Label newNamePrefixLabel = new Label(area, SWT.NONE);
+ newNamePrefixLabel.setText("&New name prefix:");
+
+ newNamePrefix = new Text(area, SWT.BORDER);
+ newNamePrefix.setText(model.oldNamePrefix);
+ newNamePrefix.setSelection(model.oldNamePrefix.length());
+ GridDataFactory.fillDefaults().grab(true, false).applyTo(newNamePrefix);
+
+ newNamePrefix.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(ModifyEvent e) {
+ String text = newNamePrefix.getText();
+ if (model.prefixValidator != null) {
+ String err = model.prefixValidator.apply(text);
+ if (err != null) {
+ if (error == null) {
+ errorLabel = new Label(area, 0);
+ errorLabel.moveBelow(newNamePrefix);
+ GridDataFactory.fillDefaults().grab(false, false).applyTo(errorLabel);
+ error = new Text(area, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY);
+ error.moveBelow(errorLabel);
+ GridDataFactory.fillDefaults().grab(true, false).applyTo(error);
+ error.setForeground(error.getDisplay().getSystemColor(SWT.COLOR_RED));
+ }
+ error.setText(err);
+ area.getParent().layout();
+ getButton(OK).setEnabled(false);
+ return;
+ }
+ if (error != null) {
+ errorLabel.dispose();
+ errorLabel = null;
+ error.dispose();
+ error = null;
+ area.getParent().layout();
+ getButton(OK).setEnabled(true);
+ }
+ }
+
+ model.newNamePrefix = text;
+ model.computeNewNames();
+ refresh();
+ }
+ });
+ }
+
+ // Reset
+
+ final Button resetNames = new Button(composite, SWT.CHECK);
+ resetNames.setText("&Reset names");
+ resetNames.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ model.reset = resetNames.getSelection();
+ model.computeNewNames();
+ refresh();
+ }
+ });
+
+ // Name table
+
+ tableViewer = CheckboxTableViewer.newCheckList(composite,
+ SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+
+ tableViewer.getTable().setHeaderVisible(true);
+ GridDataFactory.fillDefaults().grab(true, true).applyTo(tableViewer.getTable());
+
+ tableViewer.setContentProvider(ArrayContentProvider.getInstance());
+ tableViewer.setCheckStateProvider(new ICheckStateProvider() {
+ @Override
+ public boolean isGrayed(Object element) {
+ return false;
+ }
+ @Override
+ public boolean isChecked(Object element) {
+ return model.selectedEntries.contains(element);
+ }
+ });
+
+ TableViewerColumn oldNameColumn = new TableViewerColumn(tableViewer, SWT.NONE);
+ oldNameColumn.getColumn().setText("Old name");
+ oldNameColumn.getColumn().setWidth(250);
+ oldNameColumn.setLabelProvider(new ColumnLabelProvider() {
+ @Override
+ public String getText(Object element) {
+ NameEntry entry = (NameEntry)element;
+ return entry.oldName;
+ }
+ });
+
+ TableViewerColumn newNameColumn = new TableViewerColumn(tableViewer, SWT.NONE);
+ newNameColumn.getColumn().setText("New name");
+ newNameColumn.getColumn().setWidth(250);
+ newNameColumn.setLabelProvider(new ColumnLabelProvider() {
+ @Override
+ public String getText(Object element) {
+ NameEntry entry = (NameEntry)element;
+ return entry.newName;
+ }
+ });
+ tableViewer.addCheckStateListener(new ICheckStateListener() {
+ void addOrRemoveSelection(NameEntry entry, boolean add) {
+ if (add)
+ model.selectedEntries.add(entry);
+ else
+ model.selectedEntries.remove(entry);
+ }
+ @Override
+ public void checkStateChanged(CheckStateChangedEvent event) {
+ final boolean checked = event.getChecked();
+ NameEntry checkedNode = (NameEntry) event.getElement();
+
+ Set<NameEntry> entries = new HashSet<NameEntry>();
+ Set<NameEntry> selection = ISelectionUtils.filterSetSelection(tableViewer.getSelection(), NameEntry.class);
+ if (selection.contains(checkedNode))
+ entries.addAll(selection);
+ else
+ tableViewer.setSelection(StructuredSelection.EMPTY);
+ entries.add(checkedNode);
+
+ for (NameEntry entry : entries) {
+ addOrRemoveSelection(entry, checked);
+ }
+
+ tableViewer.refresh();
+ }
+ });
+ tableViewer.setInput(model.entries.toArray());
+ newNamePrefix.setFocus();
+
+ // Select All/None button bar
+ Composite bar = new Composite(composite, SWT.NONE);
+ GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(bar);
+ bar.setLayout(new RowLayout());
+ Button selectAll = new Button(bar, SWT.PUSH);
+ selectAll.setText("Select &All");
+ selectAll.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ model.selectedEntries.addAll(model.entries);
+ tableViewer.setAllChecked(true);
+ }
+ });
+ Button clearSelection = new Button(bar, SWT.PUSH);
+ clearSelection.setText("&Clear Selection");
+ clearSelection.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ model.selectedEntries.clear();
+ tableViewer.setAllChecked(false);
+ }
+ });
+
+ return composite;
+ }
+
+ public void refresh() {
+ tableViewer.refresh();
+ }
+
+ public static void main(String[] args) {
+ final Display display = new Display();
+ Shell shell = new Shell(display);
+ shell.open();
+
+ ComponentsRenamingModel model = new ComponentsRenamingModel();
+ model.oldNamePrefix = "FOO";
+ model.newNamePrefix = "FOO";
+ for(int i=0;i<100;++i)
+ model.entries.add(new NameEntry(null, "FOO"+(i*5), "FOO"+(i*5), "PREFIX"));
+
+ ComponentsRenamingDialog dialog = new ComponentsRenamingDialog(shell, model);
+ dialog.open();
+
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ display.dispose();
+ }
+
+}