1 package org.simantics.views.swt.client.base;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collection;
\r
5 import java.util.Hashtable;
\r
6 import java.util.Map;
\r
7 import java.util.Set;
\r
9 import org.eclipse.jface.resource.ResourceManager;
\r
10 import org.eclipse.swt.widgets.Composite;
\r
11 import org.eclipse.swt.widgets.Control;
\r
12 import org.eclipse.ui.IWorkbenchSite;
\r
13 import org.simantics.scenegraph.INode;
\r
14 import org.simantics.scenegraph.ParentNode;
\r
16 abstract public class SWTParentNode extends ParentNode<ISWTViewNode> implements ISWTViewNode {
\r
18 private boolean disposed = false;
\r
20 private static final long serialVersionUID = -3548136282051185971L;
\r
22 class M implements Map<String, ISWTViewNode> {
\r
24 ArrayList<ISWTViewNode> list = new ArrayList<ISWTViewNode>();
\r
25 Hashtable<String, ISWTViewNode> table = new Hashtable<String, ISWTViewNode>();
\r
28 public void clear() {
\r
33 public boolean containsKey(Object arg0) {
\r
34 return table.containsKey(arg0);
\r
37 public boolean containsValue(Object arg0) {
\r
38 return table.containsValue(arg0);
\r
41 public Set<java.util.Map.Entry<String, ISWTViewNode>> entrySet() {
\r
42 return table.entrySet();
\r
45 public ISWTViewNode get(Object arg0) {
\r
46 return table.get(arg0);
\r
49 public boolean isEmpty() {
\r
50 return table.isEmpty();
\r
53 public Set<String> keySet() {
\r
54 return table.keySet();
\r
57 public ISWTViewNode put(String arg0, ISWTViewNode arg1) {
\r
58 ISWTViewNode exist = table.put(arg0, arg1);
\r
59 if(exist != null) list.remove(exist);
\r
64 public void putAll(Map<? extends String, ? extends ISWTViewNode> arg0) {
\r
65 for(Map.Entry<? extends String, ? extends ISWTViewNode> entry : arg0.entrySet())
\r
66 put(entry.getKey(), entry.getValue());
\r
69 public ISWTViewNode remove(Object arg0) {
\r
70 ISWTViewNode node = table.remove(arg0);
\r
71 if(node != null) list.remove(node);
\r
76 return table.size();
\r
79 public Collection<ISWTViewNode> values() {
\r
86 public SWTRoot getRootNode() {
\r
87 ParentNode<?> root = super.getRootNode();
\r
88 return (root instanceof SWTRoot) ? (SWTRoot) root : null;
\r
91 public ResourceManager getResourceManager() {
\r
92 SWTRoot root = getRootNode();
\r
94 throw new IllegalStateException(this + " not attached to SWTRoot root node");
\r
95 return root.getResourceManager();
\r
98 public ResourceManager peekResourceManager() {
\r
99 SWTRoot root = getRootNode();
\r
100 return root != null ? root.peekResourceManager() : null;
\r
104 final public void asyncRemoveNode(INode node) {
\r
109 protected Map<String, ISWTViewNode> createChildMap() {
\r
113 protected void createChildComposites() {
\r
114 createChildComposites((Composite)getControl());
\r
117 protected void createChildComposites(Composite composite) {
\r
118 for(ISWTViewNode node : children.values()) node.createControls(composite);
\r
122 public Control getControl() {
\r
127 public IWorkbenchSite getSite() {
\r
129 ParentNode<?> parentNode = getParent();
\r
130 ISWTViewNode swtParent = (ISWTViewNode)parentNode;
\r
131 return swtParent.getSite();
\r
135 public Collection<ISWTViewNode> getChildComposites() {
\r
136 return children.values();
\r
140 public boolean isNodeDisposed() {
\r
144 public void dispose() {
\r
145 assert(!isNodeDisposed());
\r
146 for(ISWTViewNode child : getChildComposites())
\r