1 package org.simantics.modeling.ui.diagram.renaming;
\r
3 import java.util.HashSet;
\r
4 import java.util.Set;
\r
6 import org.eclipse.jface.dialogs.Dialog;
\r
7 import org.eclipse.jface.layout.GridDataFactory;
\r
8 import org.eclipse.jface.layout.GridLayoutFactory;
\r
9 import org.eclipse.jface.viewers.ArrayContentProvider;
\r
10 import org.eclipse.jface.viewers.CheckStateChangedEvent;
\r
11 import org.eclipse.jface.viewers.CheckboxTableViewer;
\r
12 import org.eclipse.jface.viewers.ColumnLabelProvider;
\r
13 import org.eclipse.jface.viewers.ICheckStateListener;
\r
14 import org.eclipse.jface.viewers.ICheckStateProvider;
\r
15 import org.eclipse.jface.viewers.StructuredSelection;
\r
16 import org.eclipse.jface.viewers.TableViewerColumn;
\r
17 import org.eclipse.swt.SWT;
\r
18 import org.eclipse.swt.events.ModifyEvent;
\r
19 import org.eclipse.swt.events.ModifyListener;
\r
20 import org.eclipse.swt.events.SelectionAdapter;
\r
21 import org.eclipse.swt.events.SelectionEvent;
\r
22 import org.eclipse.swt.layout.GridData;
\r
23 import org.eclipse.swt.layout.GridLayout;
\r
24 import org.eclipse.swt.layout.RowLayout;
\r
25 import org.eclipse.swt.widgets.Button;
\r
26 import org.eclipse.swt.widgets.Composite;
\r
27 import org.eclipse.swt.widgets.Control;
\r
28 import org.eclipse.swt.widgets.Display;
\r
29 import org.eclipse.swt.widgets.Label;
\r
30 import org.eclipse.swt.widgets.Shell;
\r
31 import org.eclipse.swt.widgets.Text;
\r
32 import org.simantics.utils.ui.ISelectionUtils;
\r
34 public class ComponentsRenamingDialog extends Dialog {
\r
36 ComponentsRenamingModel model;
\r
40 Label oldNamePrefixLabel;
\r
45 CheckboxTableViewer tableViewer;
\r
47 public ComponentsRenamingDialog(Shell parentShell, ComponentsRenamingModel model) {
\r
50 setShellStyle(SWT.RESIZE | SWT.TITLE);
\r
54 protected Control createDialogArea(Composite parent) {
\r
55 getShell().setText("Rename diagram contents");
\r
56 getShell().setLayout(new GridLayout());
\r
57 Composite composite = new Composite(parent, SWT.NONE);
\r
58 composite.setLayoutData(new GridData(GridData.FILL_BOTH));
\r
59 GridLayoutFactory.fillDefaults().numColumns(1).applyTo(composite);
\r
64 area = new Composite(composite, SWT.BORDER);
\r
65 GridDataFactory.fillDefaults().grab(true, false).applyTo(area);
\r
66 GridLayoutFactory.fillDefaults().numColumns(2).margins(5, 5).applyTo(area);
\r
68 oldNamePrefixLabel = new Label(area, SWT.NONE);
\r
69 oldNamePrefixLabel.setText("Old name prefix:");
\r
71 oldNamePrefix = new Text(area, SWT.READ_ONLY | SWT.BORDER);
\r
72 oldNamePrefix.setEditable(false);
\r
73 oldNamePrefix.setText(model.oldNamePrefix);
\r
74 GridDataFactory.fillDefaults().grab(true, false).applyTo(oldNamePrefix);
\r
76 Label newNamePrefixLabel = new Label(area, SWT.NONE);
\r
77 newNamePrefixLabel.setText("&New name prefix:");
\r
79 newNamePrefix = new Text(area, SWT.BORDER);
\r
80 newNamePrefix.setText(model.oldNamePrefix);
\r
81 newNamePrefix.setSelection(model.oldNamePrefix.length());
\r
82 GridDataFactory.fillDefaults().grab(true, false).applyTo(newNamePrefix);
\r
84 newNamePrefix.addModifyListener(new ModifyListener() {
\r
87 public void modifyText(ModifyEvent e) {
\r
88 String text = newNamePrefix.getText();
\r
89 if (model.prefixValidator != null) {
\r
90 String err = model.prefixValidator.apply(text);
\r
92 if (error == null) {
\r
93 errorLabel = new Label(area, 0);
\r
94 errorLabel.moveBelow(newNamePrefix);
\r
95 GridDataFactory.fillDefaults().grab(false, false).applyTo(errorLabel);
\r
96 error = new Text(area, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY);
\r
97 error.moveBelow(errorLabel);
\r
98 GridDataFactory.fillDefaults().grab(true, false).applyTo(error);
\r
99 error.setForeground(error.getDisplay().getSystemColor(SWT.COLOR_RED));
\r
101 error.setText(err);
\r
102 area.getParent().layout();
\r
103 getButton(OK).setEnabled(false);
\r
106 if (error != null) {
\r
107 errorLabel.dispose();
\r
111 area.getParent().layout();
\r
112 getButton(OK).setEnabled(true);
\r
116 model.newNamePrefix = text;
\r
117 model.computeNewNames();
\r
125 final Button resetNames = new Button(composite, SWT.CHECK);
\r
126 resetNames.setText("&Reset names");
\r
127 resetNames.addSelectionListener(new SelectionAdapter() {
\r
129 public void widgetSelected(SelectionEvent e) {
\r
130 model.reset = resetNames.getSelection();
\r
131 model.computeNewNames();
\r
138 tableViewer = CheckboxTableViewer.newCheckList(composite,
\r
139 SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
\r
141 tableViewer.getTable().setHeaderVisible(true);
\r
142 GridDataFactory.fillDefaults().grab(true, true).applyTo(tableViewer.getTable());
\r
144 tableViewer.setContentProvider(ArrayContentProvider.getInstance());
\r
145 tableViewer.setCheckStateProvider(new ICheckStateProvider() {
\r
147 public boolean isGrayed(Object element) {
\r
151 public boolean isChecked(Object element) {
\r
152 return model.selectedEntries.contains(element);
\r
156 TableViewerColumn oldNameColumn = new TableViewerColumn(tableViewer, SWT.NONE);
\r
157 oldNameColumn.getColumn().setText("Old name");
\r
158 oldNameColumn.getColumn().setWidth(250);
\r
159 oldNameColumn.setLabelProvider(new ColumnLabelProvider() {
\r
161 public String getText(Object element) {
\r
162 NameEntry entry = (NameEntry)element;
\r
163 return entry.oldName;
\r
167 TableViewerColumn newNameColumn = new TableViewerColumn(tableViewer, SWT.NONE);
\r
168 newNameColumn.getColumn().setText("New name");
\r
169 newNameColumn.getColumn().setWidth(250);
\r
170 newNameColumn.setLabelProvider(new ColumnLabelProvider() {
\r
172 public String getText(Object element) {
\r
173 NameEntry entry = (NameEntry)element;
\r
174 return entry.newName;
\r
177 tableViewer.addCheckStateListener(new ICheckStateListener() {
\r
178 void addOrRemoveSelection(NameEntry entry, boolean add) {
\r
180 model.selectedEntries.add(entry);
\r
182 model.selectedEntries.remove(entry);
\r
185 public void checkStateChanged(CheckStateChangedEvent event) {
\r
186 final boolean checked = event.getChecked();
\r
187 NameEntry checkedNode = (NameEntry) event.getElement();
\r
189 Set<NameEntry> entries = new HashSet<NameEntry>();
\r
190 Set<NameEntry> selection = ISelectionUtils.filterSetSelection(tableViewer.getSelection(), NameEntry.class);
\r
191 if (selection.contains(checkedNode))
\r
192 entries.addAll(selection);
\r
194 tableViewer.setSelection(StructuredSelection.EMPTY);
\r
195 entries.add(checkedNode);
\r
197 for (NameEntry entry : entries) {
\r
198 addOrRemoveSelection(entry, checked);
\r
201 tableViewer.refresh();
\r
204 tableViewer.setInput(model.entries.toArray());
\r
205 newNamePrefix.setFocus();
\r
207 // Select All/None button bar
\r
208 Composite bar = new Composite(composite, SWT.NONE);
\r
209 GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(bar);
\r
210 bar.setLayout(new RowLayout());
\r
211 Button selectAll = new Button(bar, SWT.PUSH);
\r
212 selectAll.setText("Select &All");
\r
213 selectAll.addSelectionListener(new SelectionAdapter() {
\r
215 public void widgetSelected(SelectionEvent e) {
\r
216 model.selectedEntries.addAll(model.entries);
\r
217 tableViewer.setAllChecked(true);
\r
220 Button clearSelection = new Button(bar, SWT.PUSH);
\r
221 clearSelection.setText("&Clear Selection");
\r
222 clearSelection.addSelectionListener(new SelectionAdapter() {
\r
224 public void widgetSelected(SelectionEvent e) {
\r
225 model.selectedEntries.clear();
\r
226 tableViewer.setAllChecked(false);
\r
233 public void refresh() {
\r
234 tableViewer.refresh();
\r
237 public static void main(String[] args) {
\r
238 final Display display = new Display();
\r
239 Shell shell = new Shell(display);
\r
242 ComponentsRenamingModel model = new ComponentsRenamingModel();
\r
243 model.oldNamePrefix = "FOO";
\r
244 model.newNamePrefix = "FOO";
\r
245 for(int i=0;i<100;++i)
\r
246 model.entries.add(new NameEntry(null, "FOO"+(i*5), "FOO"+(i*5), "PREFIX"));
\r
248 ComponentsRenamingDialog dialog = new ComponentsRenamingDialog(shell, model);
\r
251 while (!shell.isDisposed()) {
\r
252 if (!display.readAndDispatch())
\r