1 package org.simantics.views.swt.client.impl;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collections;
\r
5 import java.util.HashMap;
\r
6 import java.util.List;
\r
7 import java.util.Map;
\r
9 import org.eclipse.jface.viewers.IPostSelectionProvider;
\r
10 import org.eclipse.jface.viewers.ISelection;
\r
11 import org.eclipse.jface.viewers.ISelectionChangedListener;
\r
12 import org.eclipse.jface.viewers.ISelectionProvider;
\r
13 import org.eclipse.jface.viewers.SelectionChangedEvent;
\r
14 import org.eclipse.swt.SWT;
\r
15 import org.eclipse.swt.widgets.Composite;
\r
16 import org.eclipse.swt.widgets.Event;
\r
17 import org.eclipse.swt.widgets.Listener;
\r
18 import org.eclipse.ui.IWorkbenchSite;
\r
19 import org.simantics.browsing.ui.Column;
\r
20 import org.simantics.browsing.ui.StatePersistor;
\r
21 import org.simantics.browsing.ui.swt.PassThruInputSource;
\r
22 import org.simantics.browsing.ui.swt.widgets.ModelBrowser;
\r
23 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupportImpl;
\r
24 import org.simantics.scl.runtime.function.Function1;
\r
25 import org.simantics.views.ViewUtils.ColumnBean;
\r
26 import org.simantics.views.ViewUtils.GridLayoutBean;
\r
27 import org.simantics.views.swt.client.base.SWTViewUtils;
\r
28 import org.simantics.views.swt.client.base.SingleSWTViewNode;
\r
30 public class SWTExplorer extends SingleSWTViewNode<ModelBrowser> {
\r
32 private static final long serialVersionUID = 7932335224632082902L;
\r
34 public GridLayoutBean layout;
\r
35 public String browseContext;
\r
36 public String contextMenuId;
\r
37 public String uiContext;
\r
38 public Function1<Object, Boolean> selectionListener;
\r
39 public Object input;
\r
40 public List<ColumnBean> columns;
\r
41 public List<ColumnBean> editingColumns;
\r
42 public Boolean columnsVisible;
\r
43 public Boolean displayFilter;
\r
44 public Boolean publishSelection;
\r
45 public Boolean useNodeBrowseContexts;
\r
46 public Boolean useNodeActionContexts;
\r
47 public StatePersistor persistor;
\r
49 public ISelection lastSelection;
\r
52 public void createControls(Composite parent) {
\r
54 if(browseContext == null) return;
\r
56 final IWorkbenchSite site = getSite();
\r
58 Map<String, Object> args = new HashMap<String, Object>();
\r
59 args.put("displaySelectors", Boolean.FALSE);
\r
60 args.put("displayFilter", displayFilter != null ? displayFilter : Boolean.FALSE);
\r
61 if(useNodeBrowseContexts != null && useNodeBrowseContexts) {
\r
62 args.put("useNodeBrowseContexts", true);
\r
64 if(useNodeActionContexts != null && useNodeActionContexts) {
\r
65 args.put("useNodeActionContexts", true);
\r
68 control = new ModelBrowser(Collections.singleton(browseContext), args, site, parent, new WidgetSupportImpl(), style);
\r
69 control.setContextMenuId(contextMenuId);
\r
70 if (uiContext != null) {
\r
71 control.setUiContexts(Collections.singleton(uiContext));
\r
74 control.setStatePersistor(persistor);
\r
80 control.setInputSource(PassThruInputSource.INSTANCE);
\r
82 ISelectionProvider sp = (ISelectionProvider)control.getExplorer().getAdapter(ISelectionProvider.class);
\r
83 sp.addSelectionChangedListener(new ISelectionChangedListener() {
\r
86 public void selectionChanged(SelectionChangedEvent event) {
\r
88 ISelectionProvider sp = site.getSelectionProvider();
\r
90 sp.setSelection(event.getSelection());
\r
97 IPostSelectionProvider psp = (IPostSelectionProvider)control.getExplorer().getAdapter(IPostSelectionProvider.class);
\r
98 psp.addPostSelectionChangedListener(new ISelectionChangedListener() {
\r
101 public void selectionChanged(SelectionChangedEvent event) {
\r
103 // ISelection selection = (ISelection)control.getExplorer().getWidgetSelection();
\r
104 if (site != null) {
\r
105 ISelectionProvider sp = site.getSelectionProvider();
\r
107 sp.setSelection(event.getSelection());
\r
115 control.addListenerToControl(SWT.Selection, new Listener() {
\r
118 public void handleEvent(Event event) {
\r
120 if(selectionListener != null)
\r
121 selectionListener.apply(event);
\r
123 ISelection selection = (ISelection)control.getExplorer().getWidgetSelection();
\r
124 // [Tuukka@2012-04-08] Disabled this because it was causing
\r
125 // horrible selection feedback effects in the Model Browser
\r
126 // view that is using it. It causes the browser to react to
\r
127 // external selections which were initially published as its own
\r
129 //System.out.println("selection: " + selection);
\r
130 // if(publishSelection != null && publishSelection) {
\r
131 // if (site != null) {
\r
132 // ISelectionProvider sp = site.getSelectionProvider();
\r
133 // if (sp != null) {
\r
134 // sp.setSelection(selection);
\r
139 propertyCallback.apply("selection", selection);
\r
141 lastSelection = selection;
\r
149 public void synchronizeColumnsVisible(Boolean columnsVisible) {
\r
150 if(columnsVisible != null) control.setColumnsVisible(columnsVisible);
\r
153 public void synchronizeDisplayFilter(Boolean displayFilter) {
\r
154 // if(displayFilter != null) control.setColumnsVisible(displayFilter);
\r
157 public void synchronizePublishSelection(Boolean publishSelection) {
\r
160 public void synchronizeInput(Object input) {
\r
161 if(input != null) control.setInput(input, false);
\r
164 public void synchronizeBrowseContext(String browseContext) {
\r
167 public void synchronizeContextMenuId(String contextMenuId) {
\r
170 public void synchronizeSelectionListener(Function1<Object, Boolean> selectionListener) {
\r
173 public void synchronizePersistor(StatePersistor persistor) {
\r
176 public void synchronizeColumns(ArrayList<ColumnBean> columns) {
\r
177 if(columns != null) {
\r
178 Column[] cols = new Column[columns.size()];
\r
179 for(int i=0;i<columns.size();i++) cols[i] = SWTViewUtils.toColumn(columns.get(i));
\r
180 control.setColumns(cols);
\r
184 public void synchronizeEditingColumns(ArrayList<ColumnBean> columns) {
\r
185 if(columns != null) {
\r
186 String[] ecs = new String[columns.size()];
\r
187 for(int i=0;i<columns.size();i++) ecs[i] = columns.get(i).key;
\r
188 control.setEditingColumn(ecs);
\r
192 final public void synchronizeLayout(GridLayoutBean layout) {
\r