--- /dev/null
+package org.simantics.views.swt.client.impl;\r
+\r
+import java.util.Collection;\r
+import java.util.Iterator;\r
+\r
+import org.eclipse.jface.layout.GridDataFactory;\r
+import org.eclipse.jface.layout.GridLayoutFactory;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.simantics.views.swt.client.base.ISWTViewNode;\r
+import org.simantics.views.swt.client.base.SWTParentNode;\r
+import org.simantics.views.swt.client.base.SingleSWTViewNode;\r
+\r
+public class SWTAlternative extends SingleSWTViewNode<Composite> {\r
+ \r
+ private static final long serialVersionUID = -3427445018396850285L;\r
+\r
+ private org.eclipse.swt.widgets.Composite parent;\r
+ \r
+ public Boolean condition = false;\r
+ \r
+ @Override\r
+ public void createControls(org.eclipse.swt.widgets.Composite parent) {\r
+ \r
+ this.parent = parent;\r
+ \r
+ control = new Composite(parent, style);\r
+ \r
+ GridLayoutFactory.fillDefaults().applyTo(control);\r
+ GridDataFactory.fillDefaults().grab(true, true).applyTo(control);\r
+ \r
+ Collection<ISWTViewNode> nodes = children.values();\r
+ if(nodes.size() > 0) {\r
+ Iterator<ISWTViewNode> it = nodes.iterator();\r
+ if(condition == null || !condition) {\r
+ if(nodes.size() > 1) {\r
+ it.next();\r
+ it.next().createControls(control);\r
+ }\r
+ } else {\r
+ it.next().createControls(control);\r
+ }\r
+ }\r
+ \r
+ // TODO: can not use generic setProperties since if forms a loop through synchronizeCondition\r
+ synchronizeForeground(foreground);\r
+ synchronizeBackground(background);\r
+ synchronizeFont(font);\r
+ synchronizeLayoutData(layoutData);\r
+ \r
+ }\r
+ \r
+ final private void reset(ISWTViewNode node) {\r
+\r
+ node.reset();\r
+ if(node instanceof SWTParentNode) {\r
+ SWTParentNode parentNode = (SWTParentNode)node;\r
+ for(ISWTViewNode child : parentNode.getChildComposites()) reset(child);\r
+ }\r
+ \r
+ }\r
+ \r
+ final public void synchronizeCondition(Boolean condition) {\r
+ \r
+ if(condition == null) return;\r
+ \r
+ Composite currentControl = control;\r
+ \r
+ reset(this);\r
+ \r
+ currentControl.dispose();\r
+ \r
+ createControls(parent);\r
+ \r
+ parent.layout(true);\r
+ \r
+ }\r
+ \r
+}\r