]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.utils.ui.workbench/src/org/simantics/utils/ui/workbench/dialogs/PropertyEditorDialog.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.utils.ui.workbench / src / org / simantics / utils / ui / workbench / dialogs / PropertyEditorDialog.java
index 4b5e2c9d53f631ef8dbedc6a1db1ec98e87b5486..1654df483705fd2a00ac40d14097b1fff0362ad0 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.utils.ui.workbench.dialogs;\r
-\r
-import java.util.ArrayList;\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
-import org.eclipse.jface.viewers.CellEditor;\r
-import org.eclipse.jface.viewers.ICellModifier;\r
-import org.eclipse.jface.viewers.IStructuredSelection;\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
-import org.eclipse.jface.viewers.TableViewer;\r
-import org.eclipse.jface.viewers.TextCellEditor;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.VerifyEvent;\r
-import org.eclipse.swt.events.VerifyListener;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.swt.widgets.Table;\r
-import org.eclipse.swt.widgets.TableItem;\r
-import org.eclipse.swt.widgets.Text;\r
-\r
-\r
-/**\r
- * EditablePropertyDialog is a property dialog where dialog cells can be\r
- * modified\r
- * \r
- */\r
-public class PropertyEditorDialog extends PropertyDialog {\r
-\r
-    public static final int ADD_PROPERTY_ID = -5000;\r
-\r
-    public static final int REMOVE_PROPERTY_ID = -5000 + 1;\r
-\r
-    /** Fields that are read-only */\r
-    protected Set<String> readOnlyKeys = new HashSet<String>();\r
-    \r
-    protected List<PropertyLineVerifyListener> verifyListeners = new ArrayList<PropertyLineVerifyListener>();\r
-\r
-    public PropertyEditorDialog(Shell parent) {\r
-        super(parent);\r
-    }\r
-\r
-    @Override\r
-    protected Control createDialogArea(Composite container) {\r
-        Control composite = super.createDialogArea(container);\r
-        TableViewer viewer = getTableViewer();\r
-        Table table = viewer.getTable();\r
-\r
-        viewer.setInput(getTableViewer().getInput());\r
-\r
-        CellEditor keyEditor = new TextCellEditor(table, SWT.NORMAL);\r
-        TextCellEditor valueEditor = new TextCellEditor(table, SWT.NORMAL);\r
-        ((Text)valueEditor.getControl()).addVerifyListener(new VerifyListener() {\r
-            public void verifyText(VerifyEvent e) {\r
-                String sel[] = getSelection();\r
-                if (sel==null) return;\r
-                Text w = (Text)e.widget;\r
-                String newText = w.getText();\r
-                // deleting text\r
-                if (e.text.length()==0)\r
-                    newText = newText.substring(0,e.start) + newText.substring(e.end, newText.length());\r
-                else \r
-                    // inserting text\r
-                    newText = newText.substring(0,e.start) + e.text + newText.substring(e.end );\r
-                \r
-                e.doit = verifyValueModification(sel[0], newText    );\r
-            }});\r
-        viewer.setCellEditors(new CellEditor[] { keyEditor, valueEditor });\r
-\r
-        viewer.setCellModifier(new ICellModifier() {\r
-            public boolean canModify(Object element, String property) {\r
-                int column = columnNameToColumn(property);\r
-                if (column < 0)\r
-                    return false;\r
-                String line[] = (String[]) element;\r
-                String key = line[0];\r
-                boolean keyReadOnly = isKeyReadonly(key);\r
-                \r
-                return !keyReadOnly;\r
-            }\r
-\r
-            public Object getValue(Object element, String property) {\r
-                int column = columnNameToColumn(property);\r
-                String line[] = (String[]) element;\r
-                return line[column];\r
-            }\r
-\r
-            public void modify(Object element, String property, Object value) {\r
-                // Some kind of bug? This returns TableItem object sometimes\r
-                if (element instanceof TableItem)\r
-                    element = ((TableItem) element).getData();\r
-                int column = columnNameToColumn(property);\r
-                String line[] = (String[]) element;\r
-                String key = line[0];\r
-                \r
-                // Cannot have two values with same key\r
-                if (column==0 && containsKey(value.toString()))\r
-                    return;\r
-                if (column==0 && isKeyReadonly(key))\r
-                    return;\r
-                if (column==0 && !verifyValueModification(value.toString(), line[1]))\r
-                    return;\r
-                \r
-                line[column] = value.toString();\r
-                labelProvider.elementChanged(element);\r
-            }\r
-        });\r
-\r
-        return composite;\r
-    }\r
-\r
-    protected boolean containsKey(String key) {\r
-        for (String[] line : data)\r
-            if (line[0].equals(key))\r
-                return true;\r
-        return false;                \r
-    }\r
-    \r
-    @Override\r
-    protected void createButtonsForButtonBar(Composite parent) {\r
-        // Add property button\r
-        createButton(parent, ADD_PROPERTY_ID, "Add property", false);\r
-        // Remove property button\r
-        createButton(parent, REMOVE_PROPERTY_ID, "Remove property", false);\r
-\r
-        setAddCancelButton(true);\r
-        super.createButtonsForButtonBar(parent);\r
-        // Having this true enables double-click listener later\r
-        // Which is annoying\r
-        setAddCancelButton(false);\r
-    }\r
-\r
-    @Override\r
-    protected void buttonPressed(int buttonId) {\r
-        if (buttonId == ADD_PROPERTY_ID)\r
-            addPropertyPressed();\r
-        else if (buttonId == REMOVE_PROPERTY_ID)\r
-            removePropertyPressed();\r
-        else\r
-            super.buttonPressed(buttonId);\r
-    }\r
-\r
-    protected String[] getSelection() {\r
-        IStructuredSelection sel = (IStructuredSelection) this.getTableViewer().getSelection();\r
-        if (sel==null) return null;\r
-        Object o = sel.getFirstElement();\r
-        if (o==null) return null;\r
-        return (String[]) o;\r
-    }\r
-    \r
-    private void removePropertyPressed() {\r
-        String o[] = getSelection();\r
-        if (o==null) return;\r
-        if (readOnlyKeys.contains(o[0]))\r
-            return;\r
-        if (!data.remove(o)) return;\r
-        labelProvider.refreshAll();\r
-    }\r
-\r
-    private void addPropertyPressed() {\r
-        String newElement[] = new String[] {"<new property>", "<value>"}; \r
-        data.add(newElement);        \r
-        labelProvider.refreshAll();\r
-        getTableViewer().setSelection(new StructuredSelection(newElement));\r
-    }\r
-\r
-    /**\r
-     * Set fields that are read-only (These are 1st column key names)\r
-     * \r
-     * @param readOnlyFields fields that are read only\r
-     */\r
-    public void setReadOnlyFields(String[] readOnlyFields) {\r
-        for (String key : readOnlyFields)\r
-            readOnlyKeys.add(key);        \r
-    }\r
-    \r
-    /**\r
-     * Set a key read-only / writable\r
-     * @param key key name\r
-     * @param readOnly true = readonly, false = writable\r
-     */\r
-    public void setFieldReadOnlyStatus(String key, boolean readOnly) {\r
-        if (readOnly)\r
-            readOnlyKeys.add(key);\r
-        else \r
-            readOnlyKeys.remove(key);\r
-    }\r
-    \r
-    protected boolean isKeyReadonly(String key) {\r
-        return readOnlyKeys.contains(key);\r
-    }\r
-\r
-    /**\r
-     * Get result data\r
-     * @return result data\r
-     */\r
-    public List<String[]> getData() {\r
-        return data;\r
-    }\r
-    \r
-    public void addVerifyListener(PropertyLineVerifyListener listener) {\r
-        verifyListeners.add(listener);\r
-    }\r
-    \r
-    public void removeVerifyListener(PropertyLineVerifyListener listener) {\r
-        verifyListeners.remove(listener);\r
-    }\r
-    \r
-    protected boolean verifyValueModification(String key, String value) {\r
-        boolean result = true;\r
-        for (PropertyLineVerifyListener l : verifyListeners)\r
-            result = result & l.verifyValue(key, value);\r
-        return result;\r
-    }\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.utils.ui.workbench.dialogs;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+
+
+/**
+ * EditablePropertyDialog is a property dialog where dialog cells can be
+ * modified
+ * 
+ */
+public class PropertyEditorDialog extends PropertyDialog {
+
+    public static final int ADD_PROPERTY_ID = -5000;
+
+    public static final int REMOVE_PROPERTY_ID = -5000 + 1;
+
+    /** Fields that are read-only */
+    protected Set<String> readOnlyKeys = new HashSet<String>();
+    
+    protected List<PropertyLineVerifyListener> verifyListeners = new ArrayList<PropertyLineVerifyListener>();
+
+    public PropertyEditorDialog(Shell parent) {
+        super(parent);
+    }
+
+    @Override
+    protected Control createDialogArea(Composite container) {
+        Control composite = super.createDialogArea(container);
+        TableViewer viewer = getTableViewer();
+        Table table = viewer.getTable();
+
+        viewer.setInput(getTableViewer().getInput());
+
+        CellEditor keyEditor = new TextCellEditor(table, SWT.NORMAL);
+        TextCellEditor valueEditor = new TextCellEditor(table, SWT.NORMAL);
+        ((Text)valueEditor.getControl()).addVerifyListener(new VerifyListener() {
+            public void verifyText(VerifyEvent e) {
+                String sel[] = getSelection();
+                if (sel==null) return;
+                Text w = (Text)e.widget;
+                String newText = w.getText();
+                // deleting text
+                if (e.text.length()==0)
+                    newText = newText.substring(0,e.start) + newText.substring(e.end, newText.length());
+                else 
+                    // inserting text
+                    newText = newText.substring(0,e.start) + e.text + newText.substring(e.end );
+                
+                e.doit = verifyValueModification(sel[0], newText    );
+            }});
+        viewer.setCellEditors(new CellEditor[] { keyEditor, valueEditor });
+
+        viewer.setCellModifier(new ICellModifier() {
+            public boolean canModify(Object element, String property) {
+                int column = columnNameToColumn(property);
+                if (column < 0)
+                    return false;
+                String line[] = (String[]) element;
+                String key = line[0];
+                boolean keyReadOnly = isKeyReadonly(key);
+                
+                return !keyReadOnly;
+            }
+
+            public Object getValue(Object element, String property) {
+                int column = columnNameToColumn(property);
+                String line[] = (String[]) element;
+                return line[column];
+            }
+
+            public void modify(Object element, String property, Object value) {
+                // Some kind of bug? This returns TableItem object sometimes
+                if (element instanceof TableItem)
+                    element = ((TableItem) element).getData();
+                int column = columnNameToColumn(property);
+                String line[] = (String[]) element;
+                String key = line[0];
+                
+                // Cannot have two values with same key
+                if (column==0 && containsKey(value.toString()))
+                    return;
+                if (column==0 && isKeyReadonly(key))
+                    return;
+                if (column==0 && !verifyValueModification(value.toString(), line[1]))
+                    return;
+                
+                line[column] = value.toString();
+                labelProvider.elementChanged(element);
+            }
+        });
+
+        return composite;
+    }
+
+    protected boolean containsKey(String key) {
+        for (String[] line : data)
+            if (line[0].equals(key))
+                return true;
+        return false;                
+    }
+    
+    @Override
+    protected void createButtonsForButtonBar(Composite parent) {
+        // Add property button
+        createButton(parent, ADD_PROPERTY_ID, "Add property", false);
+        // Remove property button
+        createButton(parent, REMOVE_PROPERTY_ID, "Remove property", false);
+
+        setAddCancelButton(true);
+        super.createButtonsForButtonBar(parent);
+        // Having this true enables double-click listener later
+        // Which is annoying
+        setAddCancelButton(false);
+    }
+
+    @Override
+    protected void buttonPressed(int buttonId) {
+        if (buttonId == ADD_PROPERTY_ID)
+            addPropertyPressed();
+        else if (buttonId == REMOVE_PROPERTY_ID)
+            removePropertyPressed();
+        else
+            super.buttonPressed(buttonId);
+    }
+
+    protected String[] getSelection() {
+        IStructuredSelection sel = (IStructuredSelection) this.getTableViewer().getSelection();
+        if (sel==null) return null;
+        Object o = sel.getFirstElement();
+        if (o==null) return null;
+        return (String[]) o;
+    }
+    
+    private void removePropertyPressed() {
+        String o[] = getSelection();
+        if (o==null) return;
+        if (readOnlyKeys.contains(o[0]))
+            return;
+        if (!data.remove(o)) return;
+        labelProvider.refreshAll();
+    }
+
+    private void addPropertyPressed() {
+        String newElement[] = new String[] {"<new property>", "<value>"}; 
+        data.add(newElement);        
+        labelProvider.refreshAll();
+        getTableViewer().setSelection(new StructuredSelection(newElement));
+    }
+
+    /**
+     * Set fields that are read-only (These are 1st column key names)
+     * 
+     * @param readOnlyFields fields that are read only
+     */
+    public void setReadOnlyFields(String[] readOnlyFields) {
+        for (String key : readOnlyFields)
+            readOnlyKeys.add(key);        
+    }
+    
+    /**
+     * Set a key read-only / writable
+     * @param key key name
+     * @param readOnly true = readonly, false = writable
+     */
+    public void setFieldReadOnlyStatus(String key, boolean readOnly) {
+        if (readOnly)
+            readOnlyKeys.add(key);
+        else 
+            readOnlyKeys.remove(key);
+    }
+    
+    protected boolean isKeyReadonly(String key) {
+        return readOnlyKeys.contains(key);
+    }
+
+    /**
+     * Get result data
+     * @return result data
+     */
+    public List<String[]> getData() {
+        return data;
+    }
+    
+    public void addVerifyListener(PropertyLineVerifyListener listener) {
+        verifyListeners.add(listener);
+    }
+    
+    public void removeVerifyListener(PropertyLineVerifyListener listener) {
+        verifyListeners.remove(listener);
+    }
+    
+    protected boolean verifyValueModification(String key, String value) {
+        boolean result = true;
+        for (PropertyLineVerifyListener l : verifyListeners)
+            result = result & l.verifyValue(key, value);
+        return result;
+    }
+}