]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/widget/Explorer.java b/bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/widget/Explorer.java
new file mode 100644 (file)
index 0000000..c3d629c
--- /dev/null
@@ -0,0 +1,186 @@
+package org.simantics.document.swt.core.widget;\r
+\r
+import java.util.Collections;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.ISelectionProvider;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Event;\r
+import org.eclipse.swt.widgets.Listener;\r
+import org.eclipse.swt.widgets.Tree;\r
+import org.eclipse.ui.IWorkbenchSite;\r
+import org.simantics.Simantics;\r
+import org.simantics.browsing.ui.Column;\r
+import org.simantics.browsing.ui.Column.Align;\r
+import org.simantics.browsing.ui.StatePersistor;\r
+import org.simantics.browsing.ui.swt.InputSourceImpl;\r
+import org.simantics.browsing.ui.swt.widgets.DragSourceListenerFactory;\r
+import org.simantics.browsing.ui.swt.widgets.ModelBrowser;\r
+import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupportImpl;\r
+import org.simantics.db.layer0.variable.VariableBean;\r
+import org.simantics.db.management.ISessionContext;\r
+import org.simantics.document.server.JSONObject;\r
+import org.simantics.document.swt.core.SWTDocument;\r
+import org.simantics.document.swt.core.SWTViews;\r
+import org.simantics.document.swt.core.base.LeafWidgetManager;\r
+import org.simantics.document.swt.core.base.WidgetContainer;\r
+import org.simantics.document.swt.core.bean.ColumnBean;\r
+import org.simantics.document.swt.core.bean.ColumnsBean;\r
+import org.simantics.scl.runtime.function.Function1;\r
+import org.simantics.ui.selection.WorkbenchSelectionUtils;\r
+\r
+public class Explorer extends LeafWidgetManager<ModelBrowser> {\r
+\r
+       @Override\r
+       protected void doUpdateProperties(SWTDocument document, ModelBrowser control, JSONObject object) {\r
+               //                      String text = object.getField("text");\r
+               //                      control.setText(text);\r
+       }\r
+\r
+       protected Column[] getColumns(ColumnsBean bean) {\r
+               Column[] result = new Column[bean.columns.length];\r
+               for(int i=0;i<bean.columns.length;i++) {\r
+                       ColumnBean cb = bean.columns[i];\r
+                       result[i] = new Column(cb.key, cb.label, Align.valueOf(cb.alignment), cb.width, cb.tooltip, cb.grab, cb.weight);\r
+               }\r
+               return result;\r
+       }\r
+       \r
+       @Override\r
+       protected ModelBrowser doCreateControl(SWTDocument document, Composite parent, JSONObject object) {\r
+               \r
+               String browseContext = object.getJSONField("browseContext");\r
+               if(browseContext == null) return null;\r
+\r
+               String contextMenuId = object.getJSONField("contextMenuId");\r
+               \r
+               Boolean displayFilter = object.getJSONField("displayFilter");\r
+               Boolean displayHeader = object.getJSONField("displayHeader");\r
+               Integer style = object.getJSONField("style");\r
+               if(style == null) style = SWT.FULL_SELECTION;\r
+               \r
+        Boolean vscroll = object.getJSONFieldDefault("VScroll", false);\r
+        if(Boolean.TRUE.equals(vscroll))\r
+            style |= SWT.V_SCROLL;\r
+        \r
+        Boolean hscroll = object.getJSONFieldDefault("HScroll", false);\r
+        if(Boolean.TRUE.equals(hscroll))\r
+            style |= SWT.H_SCROLL;\r
+\r
+        Boolean noscroll = object.getJSONFieldDefault("NoScroll", false);\r
+        if(Boolean.TRUE.equals(noscroll))\r
+            style |= SWT.NO_SCROLL;\r
+               \r
+               StatePersistor persistor = object.getJSONField("persistor");\r
+               final Function1<Object, Boolean> selectionListener = object.getJSONField("selectionListener");\r
+\r
+               DragSourceListenerFactory dragSourceListenerFactory = object.getJSONField("dragSourceListenerFactory");\r
+               \r
+               final IWorkbenchSite site = document.getSite();\r
+               final ISelectionProvider selectionProvider = document.getSelectionProvider();\r
+\r
+               Map<String, Object> args = new HashMap<String, Object>();\r
+               args.put("displaySelectors", Boolean.FALSE);\r
+               args.put("displayFilter", displayFilter != null ? displayFilter : Boolean.FALSE);\r
+\r
+//             GridLayoutFactory.fillDefaults().applyTo(parent);\r
+\r
+               ColumnsBean columns = object.getBeanJSONFieldDefault("columns", ColumnsBean.BINDING, null);\r
+               String editingColumn = object.getJSONFieldDefault("editingColumn", null);\r
+               \r
+//             Column[] COLUMNS = new Column[] {\r
+//                             new Column("HasDisplayProperty", "Parameter description", Align.LEFT, 80, "Input parameter name", true),\r
+//                             new Column("HasDisplayValue", "Value", Align.RIGHT, 65, "Value"),\r
+//                             new Column("HasDisplayUnit", "Unit", Align.RIGHT, 100, "Unit") \r
+//             };\r
+               \r
+//             parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_RED));\r
+               \r
+               final ModelBrowser control = new ModelBrowser(Collections.singleton(browseContext), args, site, parent, new WidgetSupportImpl(), style);\r
+\r
+               Tree tree = control.getExplorerControl();\r
+               tree.addListener(SWT.SetData, new Listener() {\r
+                       \r
+                       @Override\r
+                       public void handleEvent(Event event) {\r
+                               SWTViews.notifyScrolledComposite(control);\r
+                       }\r
+                       \r
+               });\r
+               \r
+               if(columns != null)\r
+                       control.setColumns(getColumns(columns));\r
+               if(editingColumn != null)\r
+                       control.setEditingColumn(editingColumn);\r
+               if(contextMenuId != null)\r
+                       control.setContextMenuId(contextMenuId);\r
+               if(dragSourceListenerFactory != null)\r
+                       control.setDragSourceListenerFactory(dragSourceListenerFactory);\r
+               if(displayHeader != null)\r
+                       tree.setHeaderVisible(displayHeader);\r
+               \r
+               control.setStatePersistor(persistor);\r
+\r
+               control.finish();\r
+               \r
+               control.setInputSource(new InputSourceImpl<Object>() {\r
+\r
+                       @Override\r
+                       public Object get(ISessionContext ctx, Object selection) {\r
+                               return selection;\r
+                       }\r
+\r
+               });\r
+               \r
+               // TODO: fixme!\r
+               Object i = object.getJSONField("explorerInput");\r
+               if(i instanceof VariableBean) {\r
+                       control.setInput(Simantics.getSessionContext(), ((VariableBean)i).getVariable());\r
+               } else {\r
+                       control.setInput(Simantics.getSessionContext(), i);\r
+               }\r
+               \r
+               control.addListenerToControl(SWT.Selection, new Listener() {\r
+\r
+                       @Override\r
+                       public void handleEvent(Event event) {\r
+\r
+                               if(selectionListener != null)\r
+                                       selectionListener.apply(event);\r
+                               \r
+                               ISelection selection = (ISelection)control.getExplorer().getWidgetSelection();\r
+                               \r
+                               // TODO: refactor this!\r
+\r
+                               if(selectionProvider != null) {\r
+                                       selectionProvider.setSelection(selection);\r
+                               }\r
+                               \r
+//                             if (site != null) {\r
+//                                     ISelectionProvider sp = site.getSelectionProvider();\r
+//                                     if (sp != null) {\r
+//                                             sp.setSelection(selection);\r
+//                                     }\r
+//                             }\r
+\r
+                       }\r
+\r
+               });     \r
+\r
+               return control;\r
+\r
+       }\r
+       \r
+       @Override\r
+       public String getProperty(SWTDocument document, JSONObject object, WidgetContainer<ModelBrowser> widget, String property) {\r
+           if("selection".equals(property)) {\r
+            ISelection selection = (ISelection)widget.getControl().getExplorer().getWidgetSelection();\r
+            return SWTViews.encode(object, property, WorkbenchSelectionUtils.getWorkbenchSelectionElements(selection));\r
+           }\r
+           return null;\r
+       }\r
+\r
+}\r