]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.views.swt.client/src/org/simantics/views/swt/client/impl/SWTExplorer.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.views.swt.client / src / org / simantics / views / swt / client / impl / SWTExplorer.java
diff --git a/bundles/org.simantics.views.swt.client/src/org/simantics/views/swt/client/impl/SWTExplorer.java b/bundles/org.simantics.views.swt.client/src/org/simantics/views/swt/client/impl/SWTExplorer.java
new file mode 100644 (file)
index 0000000..f448ebd
--- /dev/null
@@ -0,0 +1,195 @@
+package org.simantics.views.swt.client.impl;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.eclipse.jface.viewers.IPostSelectionProvider;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.ISelectionChangedListener;\r
+import org.eclipse.jface.viewers.ISelectionProvider;\r
+import org.eclipse.jface.viewers.SelectionChangedEvent;\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.ui.IWorkbenchSite;\r
+import org.simantics.browsing.ui.Column;\r
+import org.simantics.browsing.ui.StatePersistor;\r
+import org.simantics.browsing.ui.swt.PassThruInputSource;\r
+import org.simantics.browsing.ui.swt.widgets.ModelBrowser;\r
+import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupportImpl;\r
+import org.simantics.scl.runtime.function.Function1;\r
+import org.simantics.views.ViewUtils.ColumnBean;\r
+import org.simantics.views.ViewUtils.GridLayoutBean;\r
+import org.simantics.views.swt.client.base.SWTViewUtils;\r
+import org.simantics.views.swt.client.base.SingleSWTViewNode;\r
+\r
+public class SWTExplorer extends SingleSWTViewNode<ModelBrowser> {\r
+       \r
+       private static final long serialVersionUID = 7932335224632082902L;\r
+       \r
+       public GridLayoutBean layout;\r
+       public String browseContext;\r
+       public String contextMenuId;\r
+       public String uiContext;\r
+       public Function1<Object, Boolean> selectionListener;\r
+       public Object input;\r
+       public List<ColumnBean> columns;\r
+       public List<ColumnBean> editingColumns;\r
+       public Boolean columnsVisible;\r
+       public Boolean displayFilter;\r
+       public Boolean publishSelection;\r
+       public Boolean useNodeBrowseContexts;\r
+       public Boolean useNodeActionContexts;\r
+       public StatePersistor persistor;\r
+       \r
+       public ISelection lastSelection;\r
+       \r
+       @Override\r
+       public void createControls(Composite parent) {\r
+\r
+               if(browseContext == null) return;\r
+               \r
+               final IWorkbenchSite site = getSite();\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
+               if(useNodeBrowseContexts != null && useNodeBrowseContexts) {\r
+                       args.put("useNodeBrowseContexts", true);\r
+               }\r
+               if(useNodeActionContexts != null && useNodeActionContexts) {\r
+                       args.put("useNodeActionContexts", true);\r
+               }\r
+\r
+               control = new ModelBrowser(Collections.singleton(browseContext), args, site, parent, new WidgetSupportImpl(), style);\r
+               control.setContextMenuId(contextMenuId);\r
+               if (uiContext != null) {\r
+                       control.setUiContexts(Collections.singleton(uiContext));\r
+               }\r
+               \r
+               control.setStatePersistor(persistor);\r
+               \r
+               control.finish();\r
+\r
+               setProperties();\r
+               \r
+               control.setInputSource(PassThruInputSource.INSTANCE);\r
+\r
+               ISelectionProvider sp = (ISelectionProvider)control.getExplorer().getAdapter(ISelectionProvider.class);\r
+               sp.addSelectionChangedListener(new ISelectionChangedListener() {\r
+                       \r
+                       @Override\r
+                       public void selectionChanged(SelectionChangedEvent event) {\r
+                               if (site != null) {\r
+                                       ISelectionProvider sp = site.getSelectionProvider();\r
+                                       if (sp != null) {\r
+                                               sp.setSelection(event.getSelection());\r
+                                       }\r
+                               }\r
+                       }\r
+                       \r
+               });\r
+               \r
+               IPostSelectionProvider psp = (IPostSelectionProvider)control.getExplorer().getAdapter(IPostSelectionProvider.class);\r
+               psp.addPostSelectionChangedListener(new ISelectionChangedListener() {\r
+                       \r
+                       @Override\r
+                       public void selectionChanged(SelectionChangedEvent event) {\r
+                               \r
+//                             ISelection selection = (ISelection)control.getExplorer().getWidgetSelection();\r
+                               if (site != null) {\r
+                                       ISelectionProvider sp = site.getSelectionProvider();\r
+                                       if (sp != null) {\r
+                                               sp.setSelection(event.getSelection());\r
+                                       }\r
+                               }\r
+                               \r
+                       }\r
+                       \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
+                               // [Tuukka@2012-04-08] Disabled this because it was causing\r
+                               // horrible selection feedback effects in the Model Browser\r
+                               // view that is using it. It causes the browser to react to\r
+                               // external selections which were initially published as its own\r
+                               // with a delay.\r
+                               //System.out.println("selection: " + selection);\r
+//                             if(publishSelection != null && publishSelection) {\r
+//                                     if (site != null) {\r
+//                                             ISelectionProvider sp = site.getSelectionProvider();\r
+//                                             if (sp != null) {\r
+//                                                     sp.setSelection(selection);\r
+//                                             }\r
+//                                     }\r
+//                             }\r
+                               \r
+                               propertyCallback.apply("selection", selection);\r
+                               \r
+                               lastSelection = selection;\r
+                               \r
+                       }\r
+                       \r
+               });\r
+                       \r
+       }\r
+\r
+       public void synchronizeColumnsVisible(Boolean columnsVisible) {\r
+               if(columnsVisible != null) control.setColumnsVisible(columnsVisible);\r
+       }\r
+       \r
+       public void synchronizeDisplayFilter(Boolean displayFilter) {\r
+//             if(displayFilter != null) control.setColumnsVisible(displayFilter);\r
+       }\r
+\r
+       public void synchronizePublishSelection(Boolean publishSelection) {\r
+       }\r
+\r
+       public void synchronizeInput(Object input) {\r
+               if(input != null) control.setInput(input, false);\r
+       }\r
+       \r
+       public void synchronizeBrowseContext(String browseContext) {\r
+       }\r
+       \r
+       public void synchronizeContextMenuId(String contextMenuId) {\r
+       }\r
+\r
+       public void synchronizeSelectionListener(Function1<Object, Boolean> selectionListener) {\r
+       }\r
+\r
+       public void synchronizePersistor(StatePersistor persistor) {\r
+       }\r
+\r
+       public void synchronizeColumns(ArrayList<ColumnBean> columns) {\r
+               if(columns != null) {\r
+                       Column[] cols = new Column[columns.size()];\r
+                       for(int i=0;i<columns.size();i++) cols[i] = SWTViewUtils.toColumn(columns.get(i));\r
+                       control.setColumns(cols);\r
+               }\r
+       }\r
+\r
+       public void synchronizeEditingColumns(ArrayList<ColumnBean> columns) {\r
+               if(columns != null) {\r
+                       String[] ecs = new String[columns.size()];\r
+                       for(int i=0;i<columns.size();i++) ecs[i] = columns.get(i).key;\r
+                       control.setEditingColumn(ecs);\r
+               }\r
+       }\r
+\r
+       final public void synchronizeLayout(GridLayoutBean layout) {\r
+       }\r
+       \r
+}\r