1 package org.simantics.views.swt.loader;
\r
3 import org.eclipse.swt.SWT;
\r
4 import org.eclipse.swt.widgets.Event;
\r
5 import org.eclipse.swt.widgets.Listener;
\r
6 import org.eclipse.swt.widgets.TreeItem;
\r
7 import org.simantics.browsing.ui.BuiltinKeys;
\r
8 import org.simantics.browsing.ui.NodeContext;
\r
9 import org.simantics.databoard.Bindings;
\r
10 import org.simantics.db.ReadGraph;
\r
11 import org.simantics.db.Resource;
\r
12 import org.simantics.db.VirtualGraph;
\r
13 import org.simantics.db.WriteGraph;
\r
14 import org.simantics.db.common.request.ResourceRead;
\r
15 import org.simantics.db.common.request.WriteRequest;
\r
16 import org.simantics.db.exception.DatabaseException;
\r
17 import org.simantics.db.layer0.util.Simantics;
\r
18 import org.simantics.db.layer0.variable.Variable;
\r
19 import org.simantics.scenegraph.ParentNode;
\r
20 import org.simantics.scenegraph.loader.ScenegraphLoader;
\r
21 import org.simantics.views.ViewUtils;
\r
22 import org.simantics.views.ontology.ViewsResources;
\r
23 import org.simantics.views.swt.client.base.ISWTViewNode;
\r
24 import org.simantics.views.swt.client.impl.SWTExplorer;
\r
26 public class ExplorerLoader implements ScenegraphLoader {
\r
28 final private Resource configuration;
\r
30 public ExplorerLoader(Resource configuration) {
\r
31 this.configuration = configuration;
\r
35 public ISWTViewNode create(ParentNode<ISWTViewNode> parent, final Variable context) throws DatabaseException {
\r
37 SWTExplorer node = parent.addNode(SWTExplorer.class);
\r
39 node.setStyle(LoaderUtils.getStyle(configuration));
\r
41 String browseContextURI = Simantics.getSession().sync(new ResourceRead<String>(configuration) {
\r
44 public String perform(ReadGraph graph) throws DatabaseException {
\r
45 ViewsResources VIEW = ViewsResources.getInstance(graph);
\r
46 Resource browseContext = graph.getSingleObject(resource, VIEW.Explorer_BrowseContext);
\r
47 return graph.getURI(browseContext);
\r
52 node.setBrowseContextURI(browseContextURI);
\r
54 node.setLayoutData(LoaderUtils.getGridData(configuration));
\r
56 node.setColumns(LoaderUtils.getColumns(configuration));
\r
58 LoaderUtils.listen(configuration, context, ViewsResources.URIs.Explorer_InputTransformation, node.getInputFunction());
\r
60 LoaderUtils.listen(configuration, context, ViewsResources.URIs.Explorer_HasColumnsVisible, node.getColumnsVisibleFunction());
\r
62 Listener selectionListener = Simantics.getSession().sync(new ResourceRead<Listener>(configuration) {
\r
65 public Listener perform(ReadGraph graph) throws DatabaseException {
\r
66 ViewsResources VIEW = ViewsResources.getInstance(graph);
\r
67 Resource listener = graph.getPossibleObject(resource, VIEW.Explorer_SelectionListener);
\r
68 if(listener == null) return null;
\r
69 return graph.adapt(listener, Listener.class);
\r
74 if(selectionListener != null) node.addListenerToControl(SWT.Selection, selectionListener);
\r
76 node.addListenerToControl(SWT.Selection, new Listener() {
\r
79 public void handleEvent(Event event) {
\r
81 TreeItem item = (TreeItem)event.item;
\r
82 // Tree tree = item.getParent();
\r
83 // GraphExplorer explorer = (GraphExplorer)tree.getData("GraphExplorer");
\r
84 // final Resource runtimeDiagram = (Resource)explorer.getRoot().getConstant(BuiltinKeys.INPUT);
\r
85 // final boolean checked = item.getChecked();
\r
86 NodeContext nc = (NodeContext)item.getData();
\r
87 Object obj = nc.getConstant(BuiltinKeys.INPUT);
\r
89 if (obj instanceof Variable) {
\r
90 final Variable var = (Variable) obj;
\r
91 Simantics.getSession().async(new WriteRequest(Simantics.getSession().getService(VirtualGraph.class)) {
\r
93 public void perform(WriteGraph graph) throws DatabaseException {
\r
94 ViewsResources VIEW = ViewsResources.getInstance(graph);
\r
95 System.err.println("setParameter " + context.getURI(graph) + " -> " + var.getURI(graph));
\r
96 ViewUtils.setParameter(graph, context, VIEW.Explorer_Selection, var.getURI(graph), Bindings.STRING);
\r