--- /dev/null
+package org.simantics.document.swt.core.base;\r
+\r
+\r
+import java.util.TreeMap;\r
+\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.simantics.document.server.JSONObject;\r
+import org.simantics.document.server.client.WidgetData;\r
+import org.simantics.document.swt.core.SWTDocument;\r
+\r
+public abstract class HasWidgetsWidgetManager<W extends Composite> extends PropertyWidgetManager<WidgetContainer> {\r
+ \r
+ class Container extends WidgetContainer {\r
+ \r
+ @SuppressWarnings("unchecked")\r
+ @Override\r
+ protected void doUpdateProperties(SWTDocument document, Control control, JSONObject object) {\r
+ HasWidgetsWidgetManager.this.doUpdateProperties(document, (W)control, object);\r
+ }\r
+ \r
+ @Override\r
+ protected Control doCreateControl(SWTDocument document, Composite parent, JSONObject object) {\r
+ if(parent.isDisposed()) {\r
+ new Exception().printStackTrace();\r
+ return null;\r
+ }\r
+ return HasWidgetsWidgetManager.this.doCreateControl(document, parent, object);\r
+ }\r
+ \r
+ } \r
+ \r
+ @Override\r
+ public WidgetContainer createWidget(JSONObject object) {\r
+ return new Container();\r
+ } \r
+ \r
+ @SuppressWarnings("unchecked")\r
+ @Override\r
+ public void updateChildren(SWTDocument document, JSONObject object, WidgetContainer widget, TreeMap<String, WidgetData> childMap) {\r
+ \r
+ for(WidgetData c : childMap.values()) {\r
+ WidgetContainer con = (WidgetContainer)c.widget;\r
+ con.getOrCreateControl(document, c.object);\r
+ }\r
+ \r
+ }\r
+ \r
+ @Override\r
+ public void updateProperties(SWTDocument document, JSONObject object, WidgetContainer widget) {\r
+ widget.updateProperties(document, object);\r
+ }\r
+ \r
+ abstract protected void doUpdateProperties(SWTDocument document, W control, JSONObject object);\r
+ abstract protected W doCreateControl(SWTDocument document, Composite parent, JSONObject object);\r
+ \r
+}\r