]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/AbstractVTKNodeMap.java
Mark undo pints when committing changes to the graph
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / common / AbstractVTKNodeMap.java
index 35d3105fb451f1debc7afca7476e5d1449099007..dab2040edde8be9947723d35a3c7528fd6825254 100644 (file)
@@ -21,15 +21,13 @@ import java.util.Set;
 import java.util.Stack;
 
 import org.simantics.db.ReadGraph;
-import org.simantics.db.Resource;
 import org.simantics.db.Session;
 import org.simantics.db.WriteGraph;
 import org.simantics.db.common.request.ReadRequest;
 import org.simantics.db.common.request.WriteRequest;
 import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.util.Layer0Utils;
 import org.simantics.g3d.ontology.G3D;
-import org.simantics.g3d.scenegraph.G3DNode;
-import org.simantics.g3d.scenegraph.IG3DNode;
 import org.simantics.g3d.scenegraph.RenderListener;
 import org.simantics.g3d.scenegraph.base.INode;
 import org.simantics.g3d.scenegraph.base.NodeListener;
@@ -50,19 +48,19 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
        
        protected Session session;
        protected IMapping<Object,E> mapping;
-       protected InteractiveVtkPanel panel;
+       protected VtkView view;
        
        protected MapList<E, vtkProp> nodeToActor = new MapList<E, vtkProp>();
        protected Map<vtkProp,E> actorToNode = new HashMap<vtkProp, E>();
 
        protected ParentNode<E> rootNode;
        
-       public AbstractVTKNodeMap(Session session, IMapping<Object,E> mapping, InteractiveVtkPanel panel, ParentNode<E> rootNode) {
+       public AbstractVTKNodeMap(Session session, IMapping<Object,E> mapping, VtkView view, ParentNode<E> rootNode) {
                this.session = session;
                this.mapping = mapping;
-               this.panel = panel;
+               this.view = view;
                this.rootNode = rootNode;
-               panel.addListener(this);
+               view.addListener(this);
                mapping.addMappingListener(this);
                rootNode.addListener(this);
        }
@@ -73,7 +71,7 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
        protected abstract void updateActor(E node,Set<String> ids);
        
        public void repaint() {
-               panel.repaint();
+               view.refresh();
        }
        
        public void populate() {
@@ -128,14 +126,16 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
        @Override
        public void updateRenderObjectsFor(INode node) {
                List<vtkProp> toDelete = new ArrayList<vtkProp>();
+               view.lock();
                for (vtkProp prop : nodeToActor.getValues((E)node)) {
                        if (prop.GetVTKId() != 0) {
-                               panel.GetRenderer().RemoveActor(prop);
+                               view.getRenderer().RemoveActor(prop);
                                //prop.Delete();
                                toDelete.add(prop);
                        }
                        actorToNode.remove(prop);
                }
+               view.unlock();
                nodeToActor.remove((E)node);
                Collection<vtkProp> coll = getActors((E)node);
                if (coll == null)
@@ -165,7 +165,7 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
                        added.add(new Pair<E, String>(node, id));
                        rangeModified = true;
                }
-               panel.repaint();
+               view.refresh();
        }
        
        @SuppressWarnings("unchecked")
@@ -181,7 +181,7 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
                        removed.add(new Pair<E, String>(node, id));
                        rangeModified = true;
                }
-               panel.repaint();
+               view.refresh();
        }
        
        @SuppressWarnings("unchecked")
@@ -198,17 +198,19 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
                        updated.add(node, id);
                        rangeModified = true;
                }
-               panel.repaint();
+               view.refresh();
        }
        
        private boolean graphUpdates = false;
        private Set<E> graphModified = new HashSet<E>();
        
        private boolean requestCommit = false;
+       private String commitMessage = null;
        
        @Override
-       public void commit() {
+       public void commit(String message) {
                requestCommit = true;
+               commitMessage = message;
        }
        
        protected void doCommit() {
@@ -217,6 +219,11 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
                        @Override
                        public void perform(WriteGraph graph) throws DatabaseException {
                                commit(graph);
+                               if (commitMessage != null) {
+                                   Layer0Utils.addCommentMetadata(graph, commitMessage);
+                                   commitMessage = null;
+                               }
+                       graph.markUndoPoint();
                        }
                        
                }, new Callback<DatabaseException>() {
@@ -268,7 +275,7 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
                }
                
                if (mapping.isRangeModified())
-                       commit();
+                       commit("Graph sync");
        }
        
        @Override
@@ -461,7 +468,7 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
        @Override
        public void delete() {
                changeTracking = false;
-               panel.removeListener(this);
+               view.removeListener(this);
                mapping.removeMappingListener(this);
 
                List<E> nodes = new ArrayList<E>(nodeToActor.getKeySize());