-package org.simantics.views.swt.client.impl;\r
-\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Set;\r
-\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.custom.CTabFolder;\r
-import org.eclipse.swt.custom.CTabItem;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.simantics.browsing.ui.swt.widgets.GraphExplorerComposite;\r
-import org.simantics.utils.ui.jface.BasePostSelectionProvider;\r
-import org.simantics.views.ViewUtils.LayoutBean;\r
-import org.simantics.views.swt.client.base.ISWTViewNode;\r
-import org.simantics.views.swt.client.base.SingleSWTViewNode;\r
-\r
-public class SWTTabFolder extends SingleSWTViewNode<CTabFolder> {\r
- \r
- private static final long serialVersionUID = -8003676031533344133L;\r
-\r
- public List<String> childNames;\r
-\r
- public LayoutBean layout;\r
- \r
- final BasePostSelectionProvider selectionProvider = new BasePostSelectionProvider();\r
-\r
- ISelectionChangedListener selectionListener = new ISelectionChangedListener() {\r
- \r
- @Override\r
- public void selectionChanged(SelectionChangedEvent event) {\r
- selectionProvider.firePostSelection(event.getSelection());\r
- }\r
- \r
- };\r
- \r
- private CTabItem createItem(int index, CTabFolder folder, Control control) {\r
- \r
- CTabItem item = new CTabItem(folder, SWT.NONE, index);\r
- item.setControl(control);\r
- return item;\r
- \r
- }\r
- \r
- @Override\r
- public void createControls(Composite parent) {\r
- control = new CTabFolder(parent, SWT.BOTTOM | SWT.FLAT);\r
- setProperties();\r
- createChildComposites();\r
- updateFolder();\r
- }\r
- \r
- protected void childrenChanged() {\r
- // FIXME: this is probably not what is intended, just modified it like this to get rid of the NPE it was producing.\r
- if (control != null && !control.isDisposed())\r
- updateFolder();\r
- }\r
-\r
- protected void updateFolder() {\r
- \r
- assert(childNames != null);\r
- \r
- HashSet<Control> existing = new HashSet<Control>();\r
-\r
- for(CTabItem c : control.getItems()) {\r
- existing.add(c.getControl());\r
- }\r
-\r
- int index = existing.size();\r
- boolean hasSomeSelectionProviders = false;\r
-\r
- for(ISWTViewNode node : getChildComposites()) {\r
-\r
- Control c = node.getControl();\r
- if(c != null && !existing.contains(c)) {\r
-\r
- CTabItem item = createItem(index, control, c);\r
- item.setText(childNames.get(index++));\r
-\r
- for(Control c2 : getControls(item)) {\r
- if(c2 instanceof GraphExplorerComposite) {\r
- GraphExplorerComposite gec = (GraphExplorerComposite)c2;\r
- ISelectionProvider sp = (ISelectionProvider)gec.getAdapter(ISelectionProvider.class);\r
- sp.addSelectionChangedListener(selectionListener);\r
- hasSomeSelectionProviders = true;\r
- }\r
- }\r
-\r
- }\r
- }\r
-\r
- if(hasSomeSelectionProviders) {\r
- // We use our combined selection provider\r
- getSite().setSelectionProvider(selectionProvider);\r
- }\r
-\r
- control.setSelection(0);\r
- control.update();\r
- }\r
-\r
- Set<Control> getControls(CTabItem item) {\r
- HashSet<Control> result = new HashSet<Control>();\r
- forControl(item.getControl(), result);\r
- return result;\r
- }\r
- \r
- void forControl(Control control, HashSet<Control> controls) {\r
- controls.add(control);\r
- if(control instanceof Composite) {\r
- Composite composite = (Composite)control;\r
- for(Control child : composite.getChildren()) forControl(child, controls);\r
- }\r
- }\r
- \r
- public void synchronizeChildNames(List<String> childNames) {\r
- \r
- }\r
- \r
- final public void synchronizeLayout(LayoutBean layout) {\r
- }\r
- \r
-}\r
+package org.simantics.views.swt.client.impl;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+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.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.simantics.browsing.ui.swt.widgets.GraphExplorerComposite;
+import org.simantics.utils.ui.jface.BasePostSelectionProvider;
+import org.simantics.views.ViewUtils.LayoutBean;
+import org.simantics.views.swt.client.base.ISWTViewNode;
+import org.simantics.views.swt.client.base.SingleSWTViewNode;
+
+public class SWTTabFolder extends SingleSWTViewNode<CTabFolder> {
+
+ private static final long serialVersionUID = -8003676031533344133L;
+
+ public List<String> childNames;
+
+ public LayoutBean layout;
+
+ final BasePostSelectionProvider selectionProvider = new BasePostSelectionProvider();
+
+ ISelectionChangedListener selectionListener = new ISelectionChangedListener() {
+
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ selectionProvider.firePostSelection(event.getSelection());
+ }
+
+ };
+
+ private CTabItem createItem(int index, CTabFolder folder, Control control) {
+
+ CTabItem item = new CTabItem(folder, SWT.NONE, index);
+ item.setControl(control);
+ return item;
+
+ }
+
+ @Override
+ public void createControls(Composite parent) {
+ control = new CTabFolder(parent, SWT.BOTTOM | SWT.FLAT);
+ setProperties();
+ createChildComposites();
+ updateFolder();
+ }
+
+ protected void childrenChanged() {
+ // FIXME: this is probably not what is intended, just modified it like this to get rid of the NPE it was producing.
+ if (control != null && !control.isDisposed())
+ updateFolder();
+ }
+
+ protected void updateFolder() {
+
+ assert(childNames != null);
+
+ HashSet<Control> existing = new HashSet<Control>();
+
+ for(CTabItem c : control.getItems()) {
+ existing.add(c.getControl());
+ }
+
+ int index = existing.size();
+ boolean hasSomeSelectionProviders = false;
+
+ for(ISWTViewNode node : getChildComposites()) {
+
+ Control c = node.getControl();
+ if(c != null && !existing.contains(c)) {
+
+ CTabItem item = createItem(index, control, c);
+ item.setText(childNames.get(index++));
+
+ for(Control c2 : getControls(item)) {
+ if(c2 instanceof GraphExplorerComposite) {
+ GraphExplorerComposite gec = (GraphExplorerComposite)c2;
+ ISelectionProvider sp = (ISelectionProvider)gec.getAdapter(ISelectionProvider.class);
+ sp.addSelectionChangedListener(selectionListener);
+ hasSomeSelectionProviders = true;
+ }
+ }
+
+ }
+ }
+
+ if(hasSomeSelectionProviders) {
+ // We use our combined selection provider
+ getSite().setSelectionProvider(selectionProvider);
+ }
+
+ control.setSelection(0);
+ control.update();
+ }
+
+ Set<Control> getControls(CTabItem item) {
+ HashSet<Control> result = new HashSet<Control>();
+ forControl(item.getControl(), result);
+ return result;
+ }
+
+ void forControl(Control control, HashSet<Control> controls) {
+ controls.add(control);
+ if(control instanceof Composite) {
+ Composite composite = (Composite)control;
+ for(Control child : composite.getChildren()) forControl(child, controls);
+ }
+ }
+
+ public void synchronizeChildNames(List<String> childNames) {
+
+ }
+
+ final public void synchronizeLayout(LayoutBean layout) {
+ }
+
+}