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