--- /dev/null
+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