--- /dev/null
+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