]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/widget/Explorer.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.swt.core / src / org / simantics / document / swt / core / widget / Explorer.java
1 package org.simantics.document.swt.core.widget;\r
2 \r
3 import java.util.Collections;\r
4 import java.util.HashMap;\r
5 import java.util.Map;\r
6 \r
7 import org.eclipse.jface.viewers.ISelection;\r
8 import org.eclipse.jface.viewers.ISelectionProvider;\r
9 import org.eclipse.swt.SWT;\r
10 import org.eclipse.swt.widgets.Composite;\r
11 import org.eclipse.swt.widgets.Event;\r
12 import org.eclipse.swt.widgets.Listener;\r
13 import org.eclipse.swt.widgets.Tree;\r
14 import org.eclipse.ui.IWorkbenchSite;\r
15 import org.simantics.Simantics;\r
16 import org.simantics.browsing.ui.Column;\r
17 import org.simantics.browsing.ui.Column.Align;\r
18 import org.simantics.browsing.ui.StatePersistor;\r
19 import org.simantics.browsing.ui.swt.InputSourceImpl;\r
20 import org.simantics.browsing.ui.swt.widgets.DragSourceListenerFactory;\r
21 import org.simantics.browsing.ui.swt.widgets.ModelBrowser;\r
22 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupportImpl;\r
23 import org.simantics.db.layer0.variable.VariableBean;\r
24 import org.simantics.db.management.ISessionContext;\r
25 import org.simantics.document.server.JSONObject;\r
26 import org.simantics.document.swt.core.SWTDocument;\r
27 import org.simantics.document.swt.core.SWTViews;\r
28 import org.simantics.document.swt.core.base.LeafWidgetManager;\r
29 import org.simantics.document.swt.core.base.WidgetContainer;\r
30 import org.simantics.document.swt.core.bean.ColumnBean;\r
31 import org.simantics.document.swt.core.bean.ColumnsBean;\r
32 import org.simantics.scl.runtime.function.Function1;\r
33 import org.simantics.ui.selection.WorkbenchSelectionUtils;\r
34 \r
35 public class Explorer extends LeafWidgetManager<ModelBrowser> {\r
36 \r
37         @Override\r
38         protected void doUpdateProperties(SWTDocument document, ModelBrowser control, JSONObject object) {\r
39                 //                      String text = object.getField("text");\r
40                 //                      control.setText(text);\r
41         }\r
42 \r
43         protected Column[] getColumns(ColumnsBean bean) {\r
44                 Column[] result = new Column[bean.columns.length];\r
45                 for(int i=0;i<bean.columns.length;i++) {\r
46                         ColumnBean cb = bean.columns[i];\r
47                         result[i] = new Column(cb.key, cb.label, Align.valueOf(cb.alignment), cb.width, cb.tooltip, cb.grab, cb.weight);\r
48                 }\r
49                 return result;\r
50         }\r
51         \r
52         @Override\r
53         protected ModelBrowser doCreateControl(SWTDocument document, Composite parent, JSONObject object) {\r
54                 \r
55                 String browseContext = object.getJSONField("browseContext");\r
56                 if(browseContext == null) return null;\r
57 \r
58                 String contextMenuId = object.getJSONField("contextMenuId");\r
59                 \r
60                 Boolean displayFilter = object.getJSONField("displayFilter");\r
61                 Boolean displayHeader = object.getJSONField("displayHeader");\r
62                 Integer style = object.getJSONField("style");\r
63                 if(style == null) style = SWT.FULL_SELECTION;\r
64                 \r
65         Boolean vscroll = object.getJSONFieldDefault("VScroll", false);\r
66         if(Boolean.TRUE.equals(vscroll))\r
67             style |= SWT.V_SCROLL;\r
68         \r
69         Boolean hscroll = object.getJSONFieldDefault("HScroll", false);\r
70         if(Boolean.TRUE.equals(hscroll))\r
71             style |= SWT.H_SCROLL;\r
72 \r
73         Boolean noscroll = object.getJSONFieldDefault("NoScroll", false);\r
74         if(Boolean.TRUE.equals(noscroll))\r
75             style |= SWT.NO_SCROLL;\r
76                 \r
77                 StatePersistor persistor = object.getJSONField("persistor");\r
78                 final Function1<Object, Boolean> selectionListener = object.getJSONField("selectionListener");\r
79 \r
80                 DragSourceListenerFactory dragSourceListenerFactory = object.getJSONField("dragSourceListenerFactory");\r
81                 \r
82                 final IWorkbenchSite site = document.getSite();\r
83                 final ISelectionProvider selectionProvider = document.getSelectionProvider();\r
84 \r
85                 Map<String, Object> args = new HashMap<String, Object>();\r
86                 args.put("displaySelectors", Boolean.FALSE);\r
87                 args.put("displayFilter", displayFilter != null ? displayFilter : Boolean.FALSE);\r
88 \r
89 //              GridLayoutFactory.fillDefaults().applyTo(parent);\r
90 \r
91                 ColumnsBean columns = object.getBeanJSONFieldDefault("columns", ColumnsBean.BINDING, null);\r
92                 String editingColumn = object.getJSONFieldDefault("editingColumn", null);\r
93                 \r
94 //              Column[] COLUMNS = new Column[] {\r
95 //                              new Column("HasDisplayProperty", "Parameter description", Align.LEFT, 80, "Input parameter name", true),\r
96 //                              new Column("HasDisplayValue", "Value", Align.RIGHT, 65, "Value"),\r
97 //                              new Column("HasDisplayUnit", "Unit", Align.RIGHT, 100, "Unit") \r
98 //              };\r
99                 \r
100 //              parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_RED));\r
101                 \r
102                 final ModelBrowser control = new ModelBrowser(Collections.singleton(browseContext), args, site, parent, new WidgetSupportImpl(), style);\r
103 \r
104                 Tree tree = control.getExplorerControl();\r
105                 tree.addListener(SWT.SetData, new Listener() {\r
106                         \r
107                         @Override\r
108                         public void handleEvent(Event event) {\r
109                                 SWTViews.notifyScrolledComposite(control);\r
110                         }\r
111                         \r
112                 });\r
113                 \r
114                 if(columns != null)\r
115                         control.setColumns(getColumns(columns));\r
116                 if(editingColumn != null)\r
117                         control.setEditingColumn(editingColumn);\r
118                 if(contextMenuId != null)\r
119                         control.setContextMenuId(contextMenuId);\r
120                 if(dragSourceListenerFactory != null)\r
121                         control.setDragSourceListenerFactory(dragSourceListenerFactory);\r
122                 if(displayHeader != null)\r
123                         tree.setHeaderVisible(displayHeader);\r
124                 \r
125                 control.setStatePersistor(persistor);\r
126 \r
127                 control.finish();\r
128                 \r
129                 control.setInputSource(new InputSourceImpl<Object>() {\r
130 \r
131                         @Override\r
132                         public Object get(ISessionContext ctx, Object selection) {\r
133                                 return selection;\r
134                         }\r
135 \r
136                 });\r
137                 \r
138                 // TODO: fixme!\r
139                 Object i = object.getJSONField("explorerInput");\r
140                 if(i instanceof VariableBean) {\r
141                         control.setInput(Simantics.getSessionContext(), ((VariableBean)i).getVariable());\r
142                 } else {\r
143                         control.setInput(Simantics.getSessionContext(), i);\r
144                 }\r
145                 \r
146                 control.addListenerToControl(SWT.Selection, new Listener() {\r
147 \r
148                         @Override\r
149                         public void handleEvent(Event event) {\r
150 \r
151                                 if(selectionListener != null)\r
152                                         selectionListener.apply(event);\r
153                                 \r
154                                 ISelection selection = (ISelection)control.getExplorer().getWidgetSelection();\r
155                                 \r
156                                 // TODO: refactor this!\r
157 \r
158                                 if(selectionProvider != null) {\r
159                                         selectionProvider.setSelection(selection);\r
160                                 }\r
161                                 \r
162 //                              if (site != null) {\r
163 //                                      ISelectionProvider sp = site.getSelectionProvider();\r
164 //                                      if (sp != null) {\r
165 //                                              sp.setSelection(selection);\r
166 //                                      }\r
167 //                              }\r
168 \r
169                         }\r
170 \r
171                 });     \r
172 \r
173                 return control;\r
174 \r
175         }\r
176         \r
177         @Override\r
178         public String getProperty(SWTDocument document, JSONObject object, WidgetContainer<ModelBrowser> widget, String property) {\r
179             if("selection".equals(property)) {\r
180             ISelection selection = (ISelection)widget.getControl().getExplorer().getWidgetSelection();\r
181             return SWTViews.encode(object, property, WorkbenchSelectionUtils.getWorkbenchSelectionElements(selection));\r
182             }\r
183             return null;\r
184         }\r
185 \r
186 }\r