--- /dev/null
+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