]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.views.swt/src/org/simantics/views/swt/loader/ExplorerLoader.java.keep
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.views.swt / src / org / simantics / views / swt / loader / ExplorerLoader.java.keep
diff --git a/bundles/org.simantics.views.swt/src/org/simantics/views/swt/loader/ExplorerLoader.java.keep b/bundles/org.simantics.views.swt/src/org/simantics/views/swt/loader/ExplorerLoader.java.keep
new file mode 100644 (file)
index 0000000..4116086
--- /dev/null
@@ -0,0 +1,109 @@
+package org.simantics.views.swt.loader;\r
+\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Event;\r
+import org.eclipse.swt.widgets.Listener;\r
+import org.eclipse.swt.widgets.TreeItem;\r
+import org.simantics.browsing.ui.BuiltinKeys;\r
+import org.simantics.browsing.ui.NodeContext;\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.VirtualGraph;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.request.ResourceRead;\r
+import org.simantics.db.common.request.WriteRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.util.Simantics;\r
+import org.simantics.db.layer0.variable.Variable;\r
+import org.simantics.scenegraph.ParentNode;\r
+import org.simantics.scenegraph.loader.ScenegraphLoader;\r
+import org.simantics.views.ViewUtils;\r
+import org.simantics.views.ontology.ViewsResources;\r
+import org.simantics.views.swt.client.base.ISWTViewNode;\r
+import org.simantics.views.swt.client.impl.SWTExplorer;\r
+\r
+public class ExplorerLoader implements ScenegraphLoader {\r
+\r
+       final private Resource configuration;\r
+       \r
+       public ExplorerLoader(Resource configuration) {\r
+               this.configuration = configuration;\r
+       }\r
+       \r
+       @Override\r
+       public ISWTViewNode create(ParentNode<ISWTViewNode> parent, final Variable context) throws DatabaseException {\r
+               \r
+               SWTExplorer node = parent.addNode(SWTExplorer.class);\r
+               \r
+               node.setStyle(LoaderUtils.getStyle(configuration));\r
+\r
+               String browseContextURI = Simantics.getSession().sync(new ResourceRead<String>(configuration) {\r
+\r
+                       @Override\r
+                       public String perform(ReadGraph graph) throws DatabaseException {\r
+                               ViewsResources VIEW = ViewsResources.getInstance(graph);\r
+                               Resource browseContext = graph.getSingleObject(resource, VIEW.Explorer_BrowseContext);\r
+                               return graph.getURI(browseContext);\r
+                       }\r
+                       \r
+               });\r
+               \r
+               node.setBrowseContextURI(browseContextURI);\r
+               \r
+        node.setLayoutData(LoaderUtils.getGridData(configuration));\r
+        \r
+        node.setColumns(LoaderUtils.getColumns(configuration));\r
+        \r
+        LoaderUtils.listen(configuration, context, ViewsResources.URIs.Explorer_InputTransformation, node.getInputFunction());\r
+\r
+        LoaderUtils.listen(configuration, context, ViewsResources.URIs.Explorer_HasColumnsVisible, node.getColumnsVisibleFunction());\r
+        \r
+               Listener selectionListener = Simantics.getSession().sync(new ResourceRead<Listener>(configuration) {\r
+\r
+                       @Override\r
+                       public Listener perform(ReadGraph graph) throws DatabaseException {\r
+                               ViewsResources VIEW = ViewsResources.getInstance(graph);\r
+                               Resource listener = graph.getPossibleObject(resource, VIEW.Explorer_SelectionListener);\r
+                               if(listener == null) return null;\r
+                               return graph.adapt(listener, Listener.class);\r
+                       }\r
+                       \r
+               });\r
+               \r
+               if(selectionListener != null) node.addListenerToControl(SWT.Selection, selectionListener);\r
+               \r
+               node.addListenerToControl(SWT.Selection, new Listener() {\r
+                       \r
+                       @Override\r
+                       public void handleEvent(Event event) {\r
+                               \r
+                   TreeItem item = (TreeItem)event.item;\r
+//                 Tree tree = item.getParent();\r
+//                 GraphExplorer explorer = (GraphExplorer)tree.getData("GraphExplorer");\r
+//                 final Resource runtimeDiagram = (Resource)explorer.getRoot().getConstant(BuiltinKeys.INPUT);\r
+//                 final boolean checked = item.getChecked();\r
+                   NodeContext nc = (NodeContext)item.getData();\r
+                   Object obj = nc.getConstant(BuiltinKeys.INPUT);\r
+\r
+                   if (obj instanceof Variable) {\r
+                       final Variable var = (Variable) obj;\r
+                       Simantics.getSession().async(new WriteRequest(Simantics.getSession().getService(VirtualGraph.class)) {\r
+                           @Override\r
+                           public void perform(WriteGraph graph) throws DatabaseException {\r
+                               ViewsResources VIEW = ViewsResources.getInstance(graph);\r
+                               System.err.println("setParameter " + context.getURI(graph) + " -> " + var.getURI(graph));\r
+                               ViewUtils.setParameter(graph, context, VIEW.Explorer_Selection, var.getURI(graph), Bindings.STRING);\r
+                           }\r
+                       });\r
+                   }\r
+                       }\r
+                       \r
+               });\r
+               \r
+               return node;\r
+               \r
+       }\r
+       \r
+}\r
+\r