]> 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 5a6646edc66521422f6170404960de1dc861a7d3..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;
@@ -52,14 +53,13 @@ import org.simantics.interop.test.GraphChanges;
 import org.simantics.interop.update.Activator;
 import org.simantics.interop.update.model.ModelUpdate;
 import org.simantics.interop.update.model.ModelUpdate.WarningListener;
+import org.simantics.interop.update.model.PropertyChange;
 import org.simantics.interop.update.model.UpdateList;
 import org.simantics.interop.update.model.UpdateNode;
 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.Callback;
 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() {
@@ -216,8 +216,8 @@ public abstract class ModelUpdateEditor extends Composite implements WarningList
                                                if (update.getUpdateList().getSelected().size() > 0) {
                                                        update.getUpdateList().clearSelected();
                                                } else {
-                                                       for (Pair<Statement, Statement> nr : update.getUpdateList().getChanges())
-                                                               update.getUpdateList().addSelected(nr);
+                                                       for (PropertyChange nr : update.getUpdateList().getChanges())
+                                                               nr.select(true);
                                                }
                                                changeViewer.refresh();
                                        }
@@ -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() {
@@ -432,12 +454,9 @@ public abstract class ModelUpdateEditor extends Composite implements WarningList
                        }
                        
                        
-               }, new Callback<DatabaseException>() {
-                       @Override
-                       public void run(DatabaseException parameter) {
-                               if (parameter != null)
-                                       ExceptionUtils.logAndShowError("Cannot update model", parameter);
-                       }
+               }, e -> {
+                       if (e != null)
+                               ExceptionUtils.logAndShowError("Cannot update model", e);
                });
        }
        
@@ -539,13 +558,37 @@ public abstract class ModelUpdateEditor extends Composite implements WarningList
                public Image getImage(Object element) {
                        if (update == null || !update.isInit())
                                return null;
-//                     if (update.getUpdateList() == null)
-//                             return null;
-                       if (update.getUpdateList().isSelected((Pair<Statement, Statement>) element))
+                       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 {
@@ -604,15 +647,21 @@ 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 {
                
                
-               @SuppressWarnings("rawtypes")
                public SelectionEditingSupport(ColumnViewer viewer) {
                        super(viewer);
-                       
                }
 
                @Override
@@ -629,18 +678,19 @@ public abstract class ModelUpdateEditor extends Composite implements WarningList
                protected Object getValue(Object element) {
                        if (update == null || !update.isInit())
                                return false;
-                       return update.getUpdateList().isSelected((Pair<Statement, Statement>) element);
+                       PropertyChange pc = (PropertyChange)element;
+                       return pc.selected();
                }
                
-               @SuppressWarnings("unchecked")
                @Override
                protected void setValue(Object element, Object value) {
                        if (update == null || !update.isInit())
                                return;
+                       PropertyChange pc = (PropertyChange)element;
                        if (Boolean.TRUE.equals(value))
-                               update.getUpdateList().addSelected((Pair<Statement, Statement>) element);
+                               pc.select(true);
                        else
-                               update.getUpdateList().removeSelected((Pair<Statement, Statement>) element);
+                               pc.select(false);
                        
                        getViewer().refresh(element);
                }