]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/renaming/ComponentsRenamingDialog.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagram / renaming / ComponentsRenamingDialog.java
diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/renaming/ComponentsRenamingDialog.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/renaming/ComponentsRenamingDialog.java
new file mode 100644 (file)
index 0000000..8a73bed
--- /dev/null
@@ -0,0 +1,187 @@
+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