1 package org.simantics.views.swt.client.impl;
\r
3 import java.util.HashSet;
\r
4 import java.util.List;
\r
5 import java.util.Set;
\r
7 import org.eclipse.jface.viewers.ISelectionChangedListener;
\r
8 import org.eclipse.jface.viewers.ISelectionProvider;
\r
9 import org.eclipse.jface.viewers.SelectionChangedEvent;
\r
10 import org.eclipse.swt.SWT;
\r
11 import org.eclipse.swt.custom.CTabFolder;
\r
12 import org.eclipse.swt.custom.CTabItem;
\r
13 import org.eclipse.swt.widgets.Composite;
\r
14 import org.eclipse.swt.widgets.Control;
\r
15 import org.simantics.browsing.ui.swt.widgets.GraphExplorerComposite;
\r
16 import org.simantics.utils.ui.jface.BasePostSelectionProvider;
\r
17 import org.simantics.views.ViewUtils.LayoutBean;
\r
18 import org.simantics.views.swt.client.base.ISWTViewNode;
\r
19 import org.simantics.views.swt.client.base.SingleSWTViewNode;
\r
21 public class SWTTabFolder extends SingleSWTViewNode<CTabFolder> {
\r
23 private static final long serialVersionUID = -8003676031533344133L;
\r
25 public List<String> childNames;
\r
27 public LayoutBean layout;
\r
29 final BasePostSelectionProvider selectionProvider = new BasePostSelectionProvider();
\r
31 ISelectionChangedListener selectionListener = new ISelectionChangedListener() {
\r
34 public void selectionChanged(SelectionChangedEvent event) {
\r
35 selectionProvider.firePostSelection(event.getSelection());
\r
40 private CTabItem createItem(int index, CTabFolder folder, Control control) {
\r
42 CTabItem item = new CTabItem(folder, SWT.NONE, index);
\r
43 item.setControl(control);
\r
49 public void createControls(Composite parent) {
\r
50 control = new CTabFolder(parent, SWT.BOTTOM | SWT.FLAT);
\r
52 createChildComposites();
\r
56 protected void childrenChanged() {
\r
57 // FIXME: this is probably not what is intended, just modified it like this to get rid of the NPE it was producing.
\r
58 if (control != null && !control.isDisposed())
\r
62 protected void updateFolder() {
\r
64 assert(childNames != null);
\r
66 HashSet<Control> existing = new HashSet<Control>();
\r
68 for(CTabItem c : control.getItems()) {
\r
69 existing.add(c.getControl());
\r
72 int index = existing.size();
\r
73 boolean hasSomeSelectionProviders = false;
\r
75 for(ISWTViewNode node : getChildComposites()) {
\r
77 Control c = node.getControl();
\r
78 if(c != null && !existing.contains(c)) {
\r
80 CTabItem item = createItem(index, control, c);
\r
81 item.setText(childNames.get(index++));
\r
83 for(Control c2 : getControls(item)) {
\r
84 if(c2 instanceof GraphExplorerComposite) {
\r
85 GraphExplorerComposite gec = (GraphExplorerComposite)c2;
\r
86 ISelectionProvider sp = (ISelectionProvider)gec.getAdapter(ISelectionProvider.class);
\r
87 sp.addSelectionChangedListener(selectionListener);
\r
88 hasSomeSelectionProviders = true;
\r
95 if(hasSomeSelectionProviders) {
\r
96 // We use our combined selection provider
\r
97 getSite().setSelectionProvider(selectionProvider);
\r
100 control.setSelection(0);
\r
104 Set<Control> getControls(CTabItem item) {
\r
105 HashSet<Control> result = new HashSet<Control>();
\r
106 forControl(item.getControl(), result);
\r
110 void forControl(Control control, HashSet<Control> controls) {
\r
111 controls.add(control);
\r
112 if(control instanceof Composite) {
\r
113 Composite composite = (Composite)control;
\r
114 for(Control child : composite.getChildren()) forControl(child, controls);
\r
118 public void synchronizeChildNames(List<String> childNames) {
\r
122 final public void synchronizeLayout(LayoutBean layout) {
\r