]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop.update/src/org/simantics/interop/update/editor/ModelUpdateEditor.java
Prevent changing custom value after the change has been applied
[simantics/interop.git] / org.simantics.interop.update / src / org / simantics / interop / update / editor / ModelUpdateEditor.java
index 919fe4b68238d05311533d363553bdad6de0bc17..ea14039eecb0bbe3fc1c65f5c45cdf8a6c225d60 100644 (file)
@@ -40,6 +40,7 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
+import org.simantics.Simantics;
 import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
 import org.simantics.db.Session;
@@ -59,7 +60,6 @@ import org.simantics.interop.update.model.UpdateOp;
 import org.simantics.interop.update.model.UpdateStatus;
 import org.simantics.interop.update.model.UpdateTree;
 import org.simantics.interop.utils.TableUtils;
-import org.simantics.ui.SimanticsUI;
 import org.simantics.utils.datastructures.Pair;
 import org.simantics.utils.ui.ExceptionUtils;
 
@@ -89,6 +89,7 @@ public abstract class ModelUpdateEditor extends Composite implements WarningList
        private Color containsColor;
        private Color deletedColor;
        private Color addedColor;
+       private Color disabledColor;
 
        private ModelUpdate update;
        
@@ -99,12 +100,14 @@ public abstract class ModelUpdateEditor extends Composite implements WarningList
                super(parent,SWT.NONE);
                checked = manager.createImage(Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/tick.png"));
                unchecked = manager.createImage(Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/cross.png"));
+               unchecked = manager.createImage(Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/cross.png"));
                warning = manager.createImage(Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/error.png"));
 
                
                containsColor = new Color(parent.getDisplay(), new RGB(255,255,220));
                deletedColor = new Color(parent.getDisplay(), new RGB(255,220,220));
                addedColor = new Color(parent.getDisplay(), new RGB(220,255,220));
+               disabledColor = new Color(parent.getDisplay(), new RGB(128,128,128));
                
                this.setLayout(new GridLayout(1,false));
                
@@ -195,18 +198,15 @@ public abstract class ModelUpdateEditor extends Composite implements WarningList
                        
                        changeViewer.setUseHashlookup(true);
                        
-                       TableViewerColumn selection = TableUtils.addColumn(changeViewer, getColumntTitle(0), false, false, 20);
-                       TableViewerColumn diagram = TableUtils.addColumn(changeViewer, getColumntTitle(1), true, true, 100);
-                       TableViewerColumn symbol = TableUtils.addColumn(changeViewer, getColumntTitle(2), true, true, 100);
-                       TableViewerColumn property = TableUtils.addColumn(changeViewer, getColumntTitle(3), true, true, 100);
-                       TableViewerColumn oldValue = TableUtils.addColumn(changeViewer, getColumntTitle(4), true, true, 100);
-                       TableViewerColumn newValue = TableUtils.addColumn(changeViewer, getColumntTitle(5), true, true, 100);
-                       
-                       diagram.setLabelProvider(getLabelProvider(1));
-                       symbol.setLabelProvider(getLabelProvider(2));
-                       property.setLabelProvider(getLabelProvider(3));
-                       oldValue.setLabelProvider(getLabelProvider(4));
-                       newValue.setLabelProvider(getLabelProvider(5));
+                       TableViewerColumn cols[] = new TableViewerColumn[getChangeListColumnCount()];
+                       TableViewerColumn selection = TableUtils.addColumn(changeViewer, getColumntTitle(0), false, false, getChangeListColumnWidth(0));
+                       cols[0] = selection;
+                       for (int i = 1 ; i < getChangeListColumnCount(); i++) {
+                               TableViewerColumn column = TableUtils.addColumn(changeViewer, getColumntTitle(i), true, getChangeListColumnSortable(i), getChangeListColumnWidth(i));
+                               cols[i] = column;
+                               column.setLabelProvider(getLabelProvider(i));
+                               configureChangeListColumn(i, column);
+                       }
                        
                        selection.setLabelProvider(new SelectionLabelProvider());
                        selection.getColumn().addSelectionListener(new SelectionAdapter() {
@@ -264,8 +264,28 @@ public abstract class ModelUpdateEditor extends Composite implements WarningList
                });
        }
        
+       protected int getChangeListColumnCount() {
+               return 6;
+       }
+       
+       protected int getChangeListColumnWidth(int col) {
+               if (col == 0)
+                       return 20;
+               return 100;
+       }
+       
+       protected boolean getChangeListColumnSortable(int col) {
+               if (col == 0)
+                       return false;
+               return true;
+       }
+       
+       protected void configureChangeListColumn(int col, TableViewerColumn column) {
+               
+       }
+       
        protected Session getSession() {
-               return SimanticsUI.getSession();
+               return Simantics.getSession();
        }
        
        protected String getColumntTitle(int i) {
@@ -358,7 +378,7 @@ public abstract class ModelUpdateEditor extends Composite implements WarningList
                                                        selectedStructure.remove(n);
                                                }
                                                changeBrowser.setChecked(n, sel);
-                                               changeBrowser.setGrayed(n, false);
+                                               changeBrowser.setGrayed(n, !op.enabled());
                                        }
                                }
                        } else {
@@ -408,6 +428,8 @@ public abstract class ModelUpdateEditor extends Composite implements WarningList
        protected void setInputs() {
                changeViewer.setInput(update.getUpdateList().getChanges());
                changeBrowser.setInput(update.getUpdateTree());
+               updateAllButton.setEnabled(true);
+               updateSelectedButton.setEnabled(true);
        }
        
        private void applyAll() {
@@ -537,11 +559,36 @@ public abstract class ModelUpdateEditor extends Composite implements WarningList
                        if (update == null || !update.isInit())
                                return null;
                        PropertyChange pc = (PropertyChange)element;
+                       if (pc.applied())
+                               return null;
                        if (pc.selected())
                                return checked;
                        else
                                return unchecked;
                }
+               
+               @Override
+               public Color getForeground(Object element) {
+                       PropertyChange pc = (PropertyChange)element;
+                       if (!pc.enabled())
+                               return disabledColor;
+                       return null;
+               }
+       }
+       
+       protected abstract class PropertyChangeLabelProvider extends ColumnLabelProvider {
+               
+               public PropertyChangeLabelProvider() {
+                       
+               }
+               
+               @Override
+               public Color getForeground(Object element) {
+                       PropertyChange pc = (PropertyChange)element;
+                       if (!pc.enabled())
+                               return disabledColor;
+                       return null;
+               }
        }
        
        private class UpdateNodeLabelProvider extends ColumnLabelProvider {
@@ -600,6 +647,14 @@ public abstract class ModelUpdateEditor extends Composite implements WarningList
                                return addedColor;
                        return null;            
                }
+               
+               @Override
+               public Color getForeground(Object element) {
+                       final UpdateNode node = (UpdateNode)element;
+                       if (node.getOp() != null && !node.getOp().enabled())
+                               return disabledColor;
+                       return null;
+               }
        }
        
        private class SelectionEditingSupport extends EditingSupport {