X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.document.swt.core%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Fswt%2Fcore%2Fbase%2FWidgetContainer.java;h=4fb21b2bf8ff2e4ab2ef24977913568400eef577;hb=e4ffdffae875e518a4eb070b8bda6ead1a9843d3;hp=6053bbab91b8f305c5ab6465fd86754013dfbeab;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/base/WidgetContainer.java b/bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/base/WidgetContainer.java index 6053bbab9..4fb21b2bf 100644 --- a/bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/base/WidgetContainer.java +++ b/bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/base/WidgetContainer.java @@ -1,52 +1,52 @@ -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 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 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); - } - } - +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 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 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