-package org.simantics.document.swt.core.base;\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 WidgetContainer<C extends Control> {\r
- \r
- C control;\r
- \r
- abstract protected Control doCreateControl(SWTDocument document, Composite parent, JSONObject object);\r
- abstract protected void doUpdateProperties(SWTDocument document, Control control, JSONObject object);\r
- \r
- @SuppressWarnings("unchecked")\r
- public void createControl(SWTDocument document, Composite parent, final JSONObject object) {\r
- control = (C)doCreateControl(document, parent, object);\r
- if(control == null) {\r
- new Exception().printStackTrace();\r
- return;\r
- }\r
- doUpdateProperties(document, control, object);\r
- }\r
- \r
- public C getControl() {\r
- return (C)control;\r
- }\r
- \r
- @SuppressWarnings("unchecked")\r
- public <T> T getOrCreateControl(SWTDocument document, JSONObject object) {\r
- if(control == null || control.isDisposed()) {\r
- String parentId = object.getJSONField("parent");\r
- WidgetData parent = document.getWidget(parentId);\r
- if(parent != null) {\r
- WidgetContainer<?> parentContainer = (WidgetContainer<?>)parent.widget;\r
- Composite pc = (Composite)parentContainer.getOrCreateControl(document, parent.object);\r
- // TODO: pc may be disposed, how to handle this and why is it happening?\r
- if(pc != null && !pc.isDisposed())\r
- createControl(document, pc, object);\r
- }\r
- }\r
- return (T)control;\r
- }\r
- \r
- public void updateProperties(SWTDocument document, JSONObject object) {\r
- if(control != null) {\r
- doUpdateProperties(document, control, object);\r
- }\r
- }\r
- \r
+package org.simantics.document.swt.core.base;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.simantics.document.server.JSONObject;
+import org.simantics.document.server.client.WidgetData;
+import org.simantics.document.swt.core.SWTDocument;
+
+public abstract class WidgetContainer<C extends Control> {
+
+ C control;
+
+ abstract protected Control doCreateControl(SWTDocument document, Composite parent, JSONObject object);
+ abstract protected void doUpdateProperties(SWTDocument document, Control control, JSONObject object);
+
+ @SuppressWarnings("unchecked")
+ public void createControl(SWTDocument document, Composite parent, final JSONObject object) {
+ control = (C)doCreateControl(document, parent, object);
+ if(control == null) {
+ new Exception().printStackTrace();
+ return;
+ }
+ doUpdateProperties(document, control, object);
+ }
+
+ public C getControl() {
+ return (C)control;
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> T getOrCreateControl(SWTDocument document, JSONObject object) {
+ if(control == null || control.isDisposed()) {
+ String parentId = object.getJSONField("parent");
+ WidgetData parent = document.getWidget(parentId);
+ if(parent != null) {
+ WidgetContainer<?> parentContainer = (WidgetContainer<?>)parent.widget;
+ Composite pc = (Composite)parentContainer.getOrCreateControl(document, parent.object);
+ // TODO: pc may be disposed, how to handle this and why is it happening?
+ if(pc != null && !pc.isDisposed())
+ createControl(document, pc, object);
+ }
+ }
+ return (T)control;
+ }
+
+ public void updateProperties(SWTDocument document, JSONObject object) {
+ if(control != null) {
+ doUpdateProperties(document, control, object);
+ }
+ }
+
}
\ No newline at end of file