]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.views.swt.client/src/org/simantics/views/swt/client/impl/SWTExplorer.java
Several Wiki documentation view improvements.
[simantics/platform.git] / bundles / org.simantics.views.swt.client / src / org / simantics / views / swt / client / impl / SWTExplorer.java
1 package org.simantics.views.swt.client.impl;\r
2 \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
8 \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.LayoutBean;\r
27 import org.simantics.views.swt.client.base.SWTViewUtils;\r
28 import org.simantics.views.swt.client.base.SingleSWTViewNode;\r
29 \r
30 public class SWTExplorer extends SingleSWTViewNode<ModelBrowser> {\r
31         \r
32         private static final long serialVersionUID = 7932335224632082902L;\r
33         \r
34         public LayoutBean 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
48         \r
49         public ISelection lastSelection;\r
50         \r
51         @Override\r
52         public void createControls(Composite parent) {\r
53 \r
54                 if(browseContext == null) return;\r
55                 \r
56                 final IWorkbenchSite site = getSite();\r
57 \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
63                 }\r
64                 if(useNodeActionContexts != null && useNodeActionContexts) {\r
65                         args.put("useNodeActionContexts", true);\r
66                 }\r
67 \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
72                 }\r
73                 \r
74                 control.setStatePersistor(persistor);\r
75                 \r
76                 control.finish();\r
77 \r
78                 setProperties();\r
79                 \r
80                 control.setInputSource(PassThruInputSource.INSTANCE);\r
81 \r
82                 ISelectionProvider sp = (ISelectionProvider)control.getExplorer().getAdapter(ISelectionProvider.class);\r
83                 sp.addSelectionChangedListener(new ISelectionChangedListener() {\r
84                         \r
85                         @Override\r
86                         public void selectionChanged(SelectionChangedEvent event) {\r
87                                 if (site != null) {\r
88                                         ISelectionProvider sp = site.getSelectionProvider();\r
89                                         if (sp != null) {\r
90                                                 sp.setSelection(event.getSelection());\r
91                                         }\r
92                                 }\r
93                         }\r
94                         \r
95                 });\r
96                 \r
97                 IPostSelectionProvider psp = (IPostSelectionProvider)control.getExplorer().getAdapter(IPostSelectionProvider.class);\r
98                 psp.addPostSelectionChangedListener(new ISelectionChangedListener() {\r
99                         \r
100                         @Override\r
101                         public void selectionChanged(SelectionChangedEvent event) {\r
102                                 \r
103 //                              ISelection selection = (ISelection)control.getExplorer().getWidgetSelection();\r
104                                 if (site != null) {\r
105                                         ISelectionProvider sp = site.getSelectionProvider();\r
106                                         if (sp != null) {\r
107                                                 sp.setSelection(event.getSelection());\r
108                                         }\r
109                                 }\r
110                                 \r
111                         }\r
112                         \r
113                 });\r
114                 \r
115                 control.addListenerToControl(SWT.Selection, new Listener() {\r
116 \r
117                         @Override\r
118                         public void handleEvent(Event event) {\r
119                                 \r
120                                 if(selectionListener != null)\r
121                                         selectionListener.apply(event);\r
122                                 \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
128                                 // with a delay.\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
135 //                                              }\r
136 //                                      }\r
137 //                              }\r
138                                 \r
139                                 propertyCallback.apply("selection", selection);\r
140                                 \r
141                                 lastSelection = selection;\r
142                                 \r
143                         }\r
144                         \r
145                 });\r
146                         \r
147         }\r
148 \r
149         public void synchronizeColumnsVisible(Boolean columnsVisible) {\r
150                 if(columnsVisible != null) control.setColumnsVisible(columnsVisible);\r
151         }\r
152         \r
153         public void synchronizeDisplayFilter(Boolean displayFilter) {\r
154 //              if(displayFilter != null) control.setColumnsVisible(displayFilter);\r
155         }\r
156 \r
157         public void synchronizePublishSelection(Boolean publishSelection) {\r
158         }\r
159 \r
160         public void synchronizeInput(Object input) {\r
161                 if(input != null) control.setInput(input, false);\r
162         }\r
163         \r
164         public void synchronizeBrowseContext(String browseContext) {\r
165         }\r
166         \r
167         public void synchronizeContextMenuId(String contextMenuId) {\r
168         }\r
169 \r
170         public void synchronizeSelectionListener(Function1<Object, Boolean> selectionListener) {\r
171         }\r
172 \r
173         public void synchronizePersistor(StatePersistor persistor) {\r
174         }\r
175 \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
181                 }\r
182         }\r
183 \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
189                 }\r
190         }\r
191 \r
192         final public void synchronizeLayout(LayoutBean layout) {\r
193         }\r
194         \r
195 }\r