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;
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);
}
protected abstract void updateActor(E node,Set<String> ids);
public void repaint() {
- panel.repaint();
+ view.refresh();
}
public void populate() {
@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)
added.add(new Pair<E, String>(node, id));
rangeModified = true;
}
- panel.repaint();
+ view.refresh();
}
@SuppressWarnings("unchecked")
removed.add(new Pair<E, String>(node, id));
rangeModified = true;
}
- panel.repaint();
+ view.refresh();
}
@SuppressWarnings("unchecked")
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() {
@Override
public void perform(WriteGraph graph) throws DatabaseException {
commit(graph);
+ if (commitMessage != null) {
+ Layer0Utils.addCommentMetadata(graph, commitMessage);
+ commitMessage = null;
+ }
+ graph.markUndoPoint();
}
}, new Callback<DatabaseException>() {
}
if (mapping.isRangeModified())
- commit();
+ commit("Graph sync");
}
@Override
@Override
public void delete() {
changeTracking = false;
- panel.removeListener(this);
+ view.removeListener(this);
mapping.removeMappingListener(this);
List<E> nodes = new ArrayList<E>(nodeToActor.getKeySize());