]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.views.swt.client/src/org/simantics/views/swt/client/impl/SWTTabFolder.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.views.swt.client / src / org / simantics / views / swt / client / impl / SWTTabFolder.java
diff --git a/bundles/org.simantics.views.swt.client/src/org/simantics/views/swt/client/impl/SWTTabFolder.java b/bundles/org.simantics.views.swt.client/src/org/simantics/views/swt/client/impl/SWTTabFolder.java
new file mode 100644 (file)
index 0000000..b8aebe5
--- /dev/null
@@ -0,0 +1,125 @@
+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.GridLayoutBean;\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 GridLayoutBean 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(GridLayoutBean layout) {\r
+       }\r
+       \r
+}\r