]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.views.swt/src/org/simantics/views/swt/loader/ExplorerLoader.java.keep
Support also Resource inputs in standardIssueContexts property function
[simantics/platform.git] / bundles / org.simantics.views.swt / src / org / simantics / views / swt / loader / ExplorerLoader.java.keep
1 package org.simantics.views.swt.loader;
2
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.widgets.Event;
5 import org.eclipse.swt.widgets.Listener;
6 import org.eclipse.swt.widgets.TreeItem;
7 import org.simantics.browsing.ui.BuiltinKeys;
8 import org.simantics.browsing.ui.NodeContext;
9 import org.simantics.databoard.Bindings;
10 import org.simantics.db.ReadGraph;
11 import org.simantics.db.Resource;
12 import org.simantics.db.VirtualGraph;
13 import org.simantics.db.WriteGraph;
14 import org.simantics.db.common.request.ResourceRead;
15 import org.simantics.db.common.request.WriteRequest;
16 import org.simantics.db.exception.DatabaseException;
17 import org.simantics.db.layer0.util.Simantics;
18 import org.simantics.db.layer0.variable.Variable;
19 import org.simantics.scenegraph.ParentNode;
20 import org.simantics.scenegraph.loader.ScenegraphLoader;
21 import org.simantics.views.ViewUtils;
22 import org.simantics.views.ontology.ViewsResources;
23 import org.simantics.views.swt.client.base.ISWTViewNode;
24 import org.simantics.views.swt.client.impl.SWTExplorer;
25
26 public class ExplorerLoader implements ScenegraphLoader {
27
28         final private Resource configuration;
29         
30         public ExplorerLoader(Resource configuration) {
31                 this.configuration = configuration;
32         }
33         
34         @Override
35         public ISWTViewNode create(ParentNode<ISWTViewNode> parent, final Variable context) throws DatabaseException {
36                 
37                 SWTExplorer node = parent.addNode(SWTExplorer.class);
38                 
39                 node.setStyle(LoaderUtils.getStyle(configuration));
40
41                 String browseContextURI = Simantics.getSession().sync(new ResourceRead<String>(configuration) {
42
43                         @Override
44                         public String perform(ReadGraph graph) throws DatabaseException {
45                                 ViewsResources VIEW = ViewsResources.getInstance(graph);
46                                 Resource browseContext = graph.getSingleObject(resource, VIEW.Explorer_BrowseContext);
47                                 return graph.getURI(browseContext);
48                         }
49                         
50                 });
51                 
52                 node.setBrowseContextURI(browseContextURI);
53                 
54         node.setLayoutData(LoaderUtils.getGridData(configuration));
55         
56         node.setColumns(LoaderUtils.getColumns(configuration));
57         
58         LoaderUtils.listen(configuration, context, ViewsResources.URIs.Explorer_InputTransformation, node.getInputFunction());
59
60         LoaderUtils.listen(configuration, context, ViewsResources.URIs.Explorer_HasColumnsVisible, node.getColumnsVisibleFunction());
61         
62                 Listener selectionListener = Simantics.getSession().sync(new ResourceRead<Listener>(configuration) {
63
64                         @Override
65                         public Listener perform(ReadGraph graph) throws DatabaseException {
66                                 ViewsResources VIEW = ViewsResources.getInstance(graph);
67                                 Resource listener = graph.getPossibleObject(resource, VIEW.Explorer_SelectionListener);
68                                 if(listener == null) return null;
69                                 return graph.adapt(listener, Listener.class);
70                         }
71                         
72                 });
73                 
74                 if(selectionListener != null) node.addListenerToControl(SWT.Selection, selectionListener);
75                 
76                 node.addListenerToControl(SWT.Selection, new Listener() {
77                         
78                         @Override
79                         public void handleEvent(Event event) {
80                                 
81                     TreeItem item = (TreeItem)event.item;
82 //                  Tree tree = item.getParent();
83 //                  GraphExplorer explorer = (GraphExplorer)tree.getData("GraphExplorer");
84 //                  final Resource runtimeDiagram = (Resource)explorer.getRoot().getConstant(BuiltinKeys.INPUT);
85 //                  final boolean checked = item.getChecked();
86                     NodeContext nc = (NodeContext)item.getData();
87                     Object obj = nc.getConstant(BuiltinKeys.INPUT);
88
89                     if (obj instanceof Variable) {
90                         final Variable var = (Variable) obj;
91                         Simantics.getSession().async(new WriteRequest(Simantics.getSession().getService(VirtualGraph.class)) {
92                             @Override
93                             public void perform(WriteGraph graph) throws DatabaseException {
94                                 ViewsResources VIEW = ViewsResources.getInstance(graph);
95                                 System.err.println("setParameter " + context.getURI(graph) + " -> " + var.getURI(graph));
96                                 ViewUtils.setParameter(graph, context, VIEW.Explorer_Selection, var.getURI(graph), Bindings.STRING);
97                             }
98                         });
99                     }
100                         }
101                         
102                 });
103                 
104                 return node;
105                 
106         }
107         
108 }
109