]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.views.swt.loader;\r
2 \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
25 \r
26 public class ExplorerLoader implements ScenegraphLoader {\r
27 \r
28         final private Resource configuration;\r
29         \r
30         public ExplorerLoader(Resource configuration) {\r
31                 this.configuration = configuration;\r
32         }\r
33         \r
34         @Override\r
35         public ISWTViewNode create(ParentNode<ISWTViewNode> parent, final Variable context) throws DatabaseException {\r
36                 \r
37                 SWTExplorer node = parent.addNode(SWTExplorer.class);\r
38                 \r
39                 node.setStyle(LoaderUtils.getStyle(configuration));\r
40 \r
41                 String browseContextURI = Simantics.getSession().sync(new ResourceRead<String>(configuration) {\r
42 \r
43                         @Override\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
48                         }\r
49                         \r
50                 });\r
51                 \r
52                 node.setBrowseContextURI(browseContextURI);\r
53                 \r
54         node.setLayoutData(LoaderUtils.getGridData(configuration));\r
55         \r
56         node.setColumns(LoaderUtils.getColumns(configuration));\r
57         \r
58         LoaderUtils.listen(configuration, context, ViewsResources.URIs.Explorer_InputTransformation, node.getInputFunction());\r
59 \r
60         LoaderUtils.listen(configuration, context, ViewsResources.URIs.Explorer_HasColumnsVisible, node.getColumnsVisibleFunction());\r
61         \r
62                 Listener selectionListener = Simantics.getSession().sync(new ResourceRead<Listener>(configuration) {\r
63 \r
64                         @Override\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
70                         }\r
71                         \r
72                 });\r
73                 \r
74                 if(selectionListener != null) node.addListenerToControl(SWT.Selection, selectionListener);\r
75                 \r
76                 node.addListenerToControl(SWT.Selection, new Listener() {\r
77                         \r
78                         @Override\r
79                         public void handleEvent(Event event) {\r
80                                 \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
88 \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
92                             @Override\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
97                             }\r
98                         });\r
99                     }\r
100                         }\r
101                         \r
102                 });\r
103                 \r
104                 return node;\r
105                 \r
106         }\r
107         \r
108 }\r
109 \r