]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/renaming/ComponentsRenamingDialog.java
Allow selection of modules to rename through checkboxes and Select All/Clear Selectio...
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagram / renaming / ComponentsRenamingDialog.java
index 8a73bed10bec36ea7acadaa0e1340cb71624cfba..2af483185079ad8be63143c1a39aab49b5f0abf1 100644 (file)
@@ -1,11 +1,18 @@
 package org.simantics.modeling.ui.diagram.renaming;\r
 \r
+import java.util.HashSet;\r
+import java.util.Set;\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.CheckStateChangedEvent;\r
+import org.eclipse.jface.viewers.CheckboxTableViewer;\r
 import org.eclipse.jface.viewers.ColumnLabelProvider;\r
-import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.jface.viewers.ICheckStateListener;\r
+import org.eclipse.jface.viewers.ICheckStateProvider;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
 import org.eclipse.jface.viewers.TableViewerColumn;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.events.ModifyEvent;\r
@@ -14,6 +21,7 @@ import org.eclipse.swt.events.SelectionAdapter;
 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.layout.RowLayout;\r
 import org.eclipse.swt.widgets.Button;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Control;\r
@@ -21,6 +29,7 @@ import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;\r
 import org.eclipse.swt.widgets.Shell;\r
 import org.eclipse.swt.widgets.Text;\r
+import org.simantics.utils.ui.ISelectionUtils;\r
 \r
 public class ComponentsRenamingDialog extends Dialog {\r
 \r
@@ -33,7 +42,7 @@ public class ComponentsRenamingDialog extends Dialog {
     Text newNamePrefix;\r
     Label errorLabel;\r
     Text error;\r
-    TableViewer tableViewer;\r
+    CheckboxTableViewer tableViewer;\r
 \r
     public ComponentsRenamingDialog(Shell parentShell, ComponentsRenamingModel model) {\r
         super(parentShell);\r
@@ -126,11 +135,23 @@ public class ComponentsRenamingDialog extends Dialog {
         \r
         // Name table\r
         \r
-        tableViewer = new TableViewer(composite);\r
+        tableViewer = CheckboxTableViewer.newCheckList(composite,\r
+                SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);\r
+\r
         tableViewer.getTable().setHeaderVisible(true);\r
         GridDataFactory.fillDefaults().grab(true, true).applyTo(tableViewer.getTable());\r
         \r
         tableViewer.setContentProvider(ArrayContentProvider.getInstance());\r
+        tableViewer.setCheckStateProvider(new ICheckStateProvider() {\r
+            @Override\r
+            public boolean isGrayed(Object element) {\r
+                return false;\r
+            }\r
+            @Override\r
+            public boolean isChecked(Object element) {\r
+                return model.selectedEntries.contains(element);\r
+            }\r
+        });\r
         \r
         TableViewerColumn oldNameColumn = new TableViewerColumn(tableViewer, SWT.NONE);\r
         oldNameColumn.getColumn().setText("Old name");\r
@@ -153,9 +174,59 @@ public class ComponentsRenamingDialog extends Dialog {
                 return entry.newName;\r
             }\r
         });\r
+        tableViewer.addCheckStateListener(new ICheckStateListener() {\r
+            void addOrRemoveSelection(NameEntry entry, boolean add) {\r
+                if (add)\r
+                    model.selectedEntries.add(entry);\r
+                else\r
+                    model.selectedEntries.remove(entry);\r
+            }\r
+            @Override\r
+            public void checkStateChanged(CheckStateChangedEvent event) {\r
+                final boolean checked = event.getChecked();\r
+                NameEntry checkedNode = (NameEntry) event.getElement();\r
+\r
+                Set<NameEntry> entries = new HashSet<NameEntry>();\r
+                Set<NameEntry> selection = ISelectionUtils.filterSetSelection(tableViewer.getSelection(), NameEntry.class);\r
+                if (selection.contains(checkedNode))\r
+                    entries.addAll(selection);\r
+                else\r
+                    tableViewer.setSelection(StructuredSelection.EMPTY);\r
+                entries.add(checkedNode);\r
+\r
+                for (NameEntry entry : entries) {\r
+                    addOrRemoveSelection(entry, checked);\r
+                }\r
+\r
+                tableViewer.refresh();\r
+            }\r
+        });\r
         tableViewer.setInput(model.entries.toArray());\r
         newNamePrefix.setFocus();\r
-        \r
+\r
+        // Select All/None button bar\r
+        Composite bar = new Composite(composite, SWT.NONE);\r
+        GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(bar);\r
+        bar.setLayout(new RowLayout());\r
+        Button selectAll = new Button(bar, SWT.PUSH);\r
+        selectAll.setText("Select &All");\r
+        selectAll.addSelectionListener(new SelectionAdapter() {\r
+            @Override\r
+            public void widgetSelected(SelectionEvent e) {\r
+                model.selectedEntries.addAll(model.entries);\r
+                tableViewer.setAllChecked(true);\r
+            }\r
+        });\r
+        Button clearSelection = new Button(bar, SWT.PUSH);\r
+        clearSelection.setText("&Clear Selection");\r
+        clearSelection.addSelectionListener(new SelectionAdapter() {\r
+            @Override\r
+            public void widgetSelected(SelectionEvent e) {\r
+                model.selectedEntries.clear();\r
+                tableViewer.setAllChecked(false);\r
+            }\r
+        });\r
+\r
         return composite;\r
     }\r
     \r