1 package org.simantics.views.swt.client.impl;
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.HashMap;
9 import org.eclipse.jface.viewers.IPostSelectionProvider;
10 import org.eclipse.jface.viewers.ISelection;
11 import org.eclipse.jface.viewers.ISelectionChangedListener;
12 import org.eclipse.jface.viewers.ISelectionProvider;
13 import org.eclipse.swt.SWT;
14 import org.eclipse.swt.widgets.Composite;
15 import org.eclipse.ui.IWorkbenchSite;
16 import org.simantics.browsing.ui.Column;
17 import org.simantics.browsing.ui.StatePersistor;
18 import org.simantics.browsing.ui.swt.PassThruInputSource;
19 import org.simantics.browsing.ui.swt.widgets.ModelBrowser;
20 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupportImpl;
21 import org.simantics.scl.runtime.function.Function1;
22 import org.simantics.views.ViewUtils.ColumnBean;
23 import org.simantics.views.ViewUtils.LayoutBean;
24 import org.simantics.views.swt.client.base.SWTViewUtils;
25 import org.simantics.views.swt.client.base.SingleSWTViewNode;
27 public class SWTExplorer extends SingleSWTViewNode<ModelBrowser> {
29 private static final long serialVersionUID = 7932335224632082902L;
31 public LayoutBean layout;
32 public String browseContext;
33 public String contextMenuId;
34 public String uiContext;
35 public Function1<Object, Boolean> selectionListener;
37 public List<ColumnBean> columns;
38 public List<ColumnBean> editingColumns;
39 public Boolean columnsVisible;
40 public Boolean displayFilter;
41 public Boolean publishSelection;
42 public Boolean useNodeBrowseContexts;
43 public Boolean useNodeActionContexts;
44 public StatePersistor persistor;
46 public ISelection lastSelection;
48 private ISelectionChangedListener internalToExternalSelectionPropagator = event -> {
49 IWorkbenchSite site = getSite();
51 ISelectionProvider sp = site.getSelectionProvider();
53 sp.setSelection(event.getSelection());
59 public void createControls(Composite parent) {
61 if(browseContext == null) return;
63 final IWorkbenchSite site = getSite();
65 Map<String, Object> args = new HashMap<String, Object>();
66 args.put("displaySelectors", Boolean.FALSE);
67 args.put("displayFilter", displayFilter != null ? displayFilter : Boolean.FALSE);
68 if(useNodeBrowseContexts != null && useNodeBrowseContexts) {
69 args.put("useNodeBrowseContexts", true);
71 if(useNodeActionContexts != null && useNodeActionContexts) {
72 args.put("useNodeActionContexts", true);
75 control = new ModelBrowser(Collections.singleton(browseContext), args, site, parent, new WidgetSupportImpl(), style);
76 control.setContextMenuId(contextMenuId);
77 if (uiContext != null) {
78 control.setUiContexts(Collections.singleton(uiContext));
81 control.setStatePersistor(persistor);
87 control.setInputSource(PassThruInputSource.INSTANCE);
89 ISelectionProvider isp = (ISelectionProvider)control.getExplorer().getAdapter(ISelectionProvider.class);
90 if (isp instanceof IPostSelectionProvider) {
91 ((IPostSelectionProvider) isp).addPostSelectionChangedListener(internalToExternalSelectionPropagator);
93 isp.addSelectionChangedListener(internalToExternalSelectionPropagator);
96 control.addListenerToControl(SWT.Selection, event -> {
97 if(selectionListener != null)
98 selectionListener.apply(event);
99 ISelection selection = (ISelection)control.getExplorer().getWidgetSelection();
100 propertyCallback.apply("selection", selection);
101 lastSelection = selection;
106 public void synchronizeColumnsVisible(Boolean columnsVisible) {
107 if(columnsVisible != null) control.setColumnsVisible(columnsVisible);
110 public void synchronizeDisplayFilter(Boolean displayFilter) {
111 // if(displayFilter != null) control.setColumnsVisible(displayFilter);
114 public void synchronizePublishSelection(Boolean publishSelection) {
117 public void synchronizeInput(Object input) {
118 if(input != null) control.setInput(input, false);
121 public void synchronizeBrowseContext(String browseContext) {
124 public void synchronizeContextMenuId(String contextMenuId) {
127 public void synchronizeSelectionListener(Function1<Object, Boolean> selectionListener) {
130 public void synchronizePersistor(StatePersistor persistor) {
133 public void synchronizeColumns(ArrayList<ColumnBean> columns) {
134 if(columns != null) {
135 Column[] cols = new Column[columns.size()];
136 for(int i=0;i<columns.size();i++) cols[i] = SWTViewUtils.toColumn(columns.get(i));
137 control.setColumns(cols);
141 public void synchronizeEditingColumns(ArrayList<ColumnBean> columns) {
142 if(columns != null) {
143 String[] ecs = new String[columns.size()];
144 for(int i=0;i<columns.size();i++) ecs[i] = columns.get(i).key;
145 control.setEditingColumn(ecs);
149 final public void synchronizeLayout(LayoutBean layout) {
153 public void dispose() {
154 ISelectionProvider isp = (ISelectionProvider)control.getExplorer().getAdapter(ISelectionProvider.class);
155 if (isp instanceof IPostSelectionProvider) {
156 ((IPostSelectionProvider) isp).removePostSelectionChangedListener(internalToExternalSelectionPropagator);
158 isp.removeSelectionChangedListener(internalToExternalSelectionPropagator);