1 package org.simantics.document.swt.core.widget;
\r
3 import java.util.Collections;
\r
4 import java.util.HashMap;
\r
5 import java.util.Map;
\r
7 import org.eclipse.jface.viewers.ISelection;
\r
8 import org.eclipse.jface.viewers.ISelectionProvider;
\r
9 import org.eclipse.swt.SWT;
\r
10 import org.eclipse.swt.widgets.Composite;
\r
11 import org.eclipse.swt.widgets.Event;
\r
12 import org.eclipse.swt.widgets.Listener;
\r
13 import org.eclipse.swt.widgets.Tree;
\r
14 import org.eclipse.ui.IWorkbenchSite;
\r
15 import org.simantics.Simantics;
\r
16 import org.simantics.browsing.ui.Column;
\r
17 import org.simantics.browsing.ui.Column.Align;
\r
18 import org.simantics.browsing.ui.StatePersistor;
\r
19 import org.simantics.browsing.ui.swt.InputSourceImpl;
\r
20 import org.simantics.browsing.ui.swt.widgets.DragSourceListenerFactory;
\r
21 import org.simantics.browsing.ui.swt.widgets.ModelBrowser;
\r
22 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupportImpl;
\r
23 import org.simantics.db.layer0.variable.VariableBean;
\r
24 import org.simantics.db.management.ISessionContext;
\r
25 import org.simantics.document.server.JSONObject;
\r
26 import org.simantics.document.swt.core.SWTDocument;
\r
27 import org.simantics.document.swt.core.SWTViews;
\r
28 import org.simantics.document.swt.core.base.LeafWidgetManager;
\r
29 import org.simantics.document.swt.core.base.WidgetContainer;
\r
30 import org.simantics.document.swt.core.bean.ColumnBean;
\r
31 import org.simantics.document.swt.core.bean.ColumnsBean;
\r
32 import org.simantics.scl.runtime.function.Function1;
\r
33 import org.simantics.ui.selection.WorkbenchSelectionUtils;
\r
35 public class Explorer extends LeafWidgetManager<ModelBrowser> {
\r
38 protected void doUpdateProperties(SWTDocument document, ModelBrowser control, JSONObject object) {
\r
39 // String text = object.getField("text");
\r
40 // control.setText(text);
\r
43 protected Column[] getColumns(ColumnsBean bean) {
\r
44 Column[] result = new Column[bean.columns.length];
\r
45 for(int i=0;i<bean.columns.length;i++) {
\r
46 ColumnBean cb = bean.columns[i];
\r
47 result[i] = new Column(cb.key, cb.label, Align.valueOf(cb.alignment), cb.width, cb.tooltip, cb.grab, cb.weight);
\r
53 protected ModelBrowser doCreateControl(SWTDocument document, Composite parent, JSONObject object) {
\r
55 String browseContext = object.getJSONField("browseContext");
\r
56 if(browseContext == null) return null;
\r
58 String contextMenuId = object.getJSONField("contextMenuId");
\r
60 Boolean displayFilter = object.getJSONField("displayFilter");
\r
61 Boolean displayHeader = object.getJSONField("displayHeader");
\r
62 Integer style = object.getJSONField("style");
\r
63 if(style == null) style = SWT.FULL_SELECTION;
\r
65 Boolean vscroll = object.getJSONFieldDefault("VScroll", false);
\r
66 if(Boolean.TRUE.equals(vscroll))
\r
67 style |= SWT.V_SCROLL;
\r
69 Boolean hscroll = object.getJSONFieldDefault("HScroll", false);
\r
70 if(Boolean.TRUE.equals(hscroll))
\r
71 style |= SWT.H_SCROLL;
\r
73 Boolean noscroll = object.getJSONFieldDefault("NoScroll", false);
\r
74 if(Boolean.TRUE.equals(noscroll))
\r
75 style |= SWT.NO_SCROLL;
\r
77 StatePersistor persistor = object.getJSONField("persistor");
\r
78 final Function1<Object, Boolean> selectionListener = object.getJSONField("selectionListener");
\r
80 DragSourceListenerFactory dragSourceListenerFactory = object.getJSONField("dragSourceListenerFactory");
\r
82 final IWorkbenchSite site = document.getSite();
\r
83 final ISelectionProvider selectionProvider = document.getSelectionProvider();
\r
85 Map<String, Object> args = new HashMap<String, Object>();
\r
86 args.put("displaySelectors", Boolean.FALSE);
\r
87 args.put("displayFilter", displayFilter != null ? displayFilter : Boolean.FALSE);
\r
89 // GridLayoutFactory.fillDefaults().applyTo(parent);
\r
91 ColumnsBean columns = object.getBeanJSONFieldDefault("columns", ColumnsBean.BINDING, null);
\r
92 String editingColumn = object.getJSONFieldDefault("editingColumn", null);
\r
94 // Column[] COLUMNS = new Column[] {
\r
95 // new Column("HasDisplayProperty", "Parameter description", Align.LEFT, 80, "Input parameter name", true),
\r
96 // new Column("HasDisplayValue", "Value", Align.RIGHT, 65, "Value"),
\r
97 // new Column("HasDisplayUnit", "Unit", Align.RIGHT, 100, "Unit")
\r
100 // parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_RED));
\r
102 final ModelBrowser control = new ModelBrowser(Collections.singleton(browseContext), args, site, parent, new WidgetSupportImpl(), style);
\r
104 Tree tree = control.getExplorerControl();
\r
105 tree.addListener(SWT.SetData, new Listener() {
\r
108 public void handleEvent(Event event) {
\r
109 SWTViews.notifyScrolledComposite(control);
\r
114 if(columns != null)
\r
115 control.setColumns(getColumns(columns));
\r
116 if(editingColumn != null)
\r
117 control.setEditingColumn(editingColumn);
\r
118 if(contextMenuId != null)
\r
119 control.setContextMenuId(contextMenuId);
\r
120 if(dragSourceListenerFactory != null)
\r
121 control.setDragSourceListenerFactory(dragSourceListenerFactory);
\r
122 if(displayHeader != null)
\r
123 tree.setHeaderVisible(displayHeader);
\r
125 control.setStatePersistor(persistor);
\r
129 control.setInputSource(new InputSourceImpl<Object>() {
\r
132 public Object get(ISessionContext ctx, Object selection) {
\r
139 Object i = object.getJSONField("explorerInput");
\r
140 if(i instanceof VariableBean) {
\r
141 control.setInput(Simantics.getSessionContext(), ((VariableBean)i).getVariable());
\r
143 control.setInput(Simantics.getSessionContext(), i);
\r
146 control.addListenerToControl(SWT.Selection, new Listener() {
\r
149 public void handleEvent(Event event) {
\r
151 if(selectionListener != null)
\r
152 selectionListener.apply(event);
\r
154 ISelection selection = (ISelection)control.getExplorer().getWidgetSelection();
\r
156 // TODO: refactor this!
\r
158 if(selectionProvider != null) {
\r
159 selectionProvider.setSelection(selection);
\r
162 // if (site != null) {
\r
163 // ISelectionProvider sp = site.getSelectionProvider();
\r
164 // if (sp != null) {
\r
165 // sp.setSelection(selection);
\r
178 public String getProperty(SWTDocument document, JSONObject object, WidgetContainer<ModelBrowser> widget, String property) {
\r
179 if("selection".equals(property)) {
\r
180 ISelection selection = (ISelection)widget.getControl().getExplorer().getWidgetSelection();
\r
181 return SWTViews.encode(object, property, WorkbenchSelectionUtils.getWorkbenchSelectionElements(selection));
\r