X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.views.swt%2Fsrc%2Forg%2Fsimantics%2Fviews%2Fswt%2FModelledView.java;h=92396f421de9d37e0b9673d8989d3ca894db64eb;hp=f50954857e7d3611d7956968ece2559d6f9bf8ea;hb=270834ce3962a4bca3945d06e642a99d21688c16;hpb=79b952a1ea3ae3f299c6d7aa612a98b7ae5db51a diff --git a/bundles/org.simantics.views.swt/src/org/simantics/views/swt/ModelledView.java b/bundles/org.simantics.views.swt/src/org/simantics/views/swt/ModelledView.java index f50954857..92396f421 100644 --- a/bundles/org.simantics.views.swt/src/org/simantics/views/swt/ModelledView.java +++ b/bundles/org.simantics.views.swt/src/org/simantics/views/swt/ModelledView.java @@ -27,7 +27,6 @@ import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartReference; import org.eclipse.ui.IWorkbenchSite; import org.simantics.Simantics; -import org.simantics.browsing.ui.common.ErrorLogger; import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport; import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupportImpl; import org.simantics.db.ReadGraph; @@ -36,7 +35,6 @@ import org.simantics.db.VirtualGraph; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.common.request.WriteResultRequest; -import org.simantics.db.common.utils.Logger; import org.simantics.db.exception.DatabaseException; import org.simantics.db.exception.ServiceNotFoundException; import org.simantics.db.layer0.util.RemoverUtil; @@ -47,8 +45,11 @@ import org.simantics.layer0.Layer0; import org.simantics.scenegraph.ontology.ScenegraphResources; import org.simantics.scl.runtime.function.Function1; import org.simantics.ui.workbench.IPropertyPage; -import org.simantics.utils.ui.jface.ActiveSelectionProvider; +import org.simantics.utils.ui.ErrorLogger; +import org.simantics.utils.ui.jface.BasePostSelectionProvider; import org.simantics.views.swt.client.base.SWTRoot; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * To use this class, first model your view contents in .pgraph files according @@ -67,6 +68,8 @@ import org.simantics.views.swt.client.base.SWTRoot; */ public class ModelledView extends SimanticsView implements IPartListener2 { + private static final Logger LOGGER = LoggerFactory.getLogger(ModelledView.class); + public static final int TIME_BEFORE_DISPOSE_WHEN_HIDDEN = 30000; // ms private static final boolean DEBUG = false; @@ -88,10 +91,11 @@ public class ModelledView extends SimanticsView implements IPartListener2 { protected ModelledSupport support; - ActiveSelectionProvider selectionProvider = new ActiveSelectionProvider() { + private BasePostSelectionProvider selectionProvider = new BasePostSelectionProvider() { @Override public void setSelection(ISelection selection) { - super.setSelection(selection); + super.setAndFireNonEqualSelection(selection); + super.firePostSelection(selection); } }; @@ -101,7 +105,6 @@ public class ModelledView extends SimanticsView implements IPartListener2 { @Override protected WidgetSupportImpl createSupport() { - try { runtime = Simantics.getSession().sync( new WriteResultRequest(Simantics.getSession().getService(VirtualGraph.class)) { @@ -114,16 +117,13 @@ public class ModelledView extends SimanticsView implements IPartListener2 { return runtime; } }); - } catch (ServiceNotFoundException e) { - Logger.defaultLogError(e); - } catch (DatabaseException e) { - Logger.defaultLogError(e); + } catch (ServiceNotFoundException | DatabaseException e) { + LOGGER.error("Failed to initialize modelled view database runtime support structures", e); } support = new ModelledSupport(this); return support; - } public void fireInput() { @@ -166,9 +166,7 @@ public class ModelledView extends SimanticsView implements IPartListener2 { } if (load) { - try { - loader = new SWTViewLoaderProcess(this, getSite(), getClass().getSimpleName()); viewVariable = loader.getVariable(Simantics.getSession(), configurationURI(), runtime); @@ -200,17 +198,10 @@ public class ModelledView extends SimanticsView implements IPartListener2 { body.layout(true); - getSite().setSelectionProvider(selectionProvider); - } catch (DatabaseException e) { - - e.printStackTrace(); - Logger.defaultLogError(e); - + LOGGER.error("Failed to create modelled SWT view controls", e); } - } - } @Override @@ -220,14 +211,12 @@ public class ModelledView extends SimanticsView implements IPartListener2 { // Only create controls if the part is TRULY visible. // Fast view parts seem to cause calls to createPartControl even // when the part is hidden in reality - boolean visible = site.getPage().isPartVisible(this); if (DEBUG) System.out.println(this + ": createControls( visible=" + site.getPage().isPartVisible(this) + " )"); doCreateControls(true); getSite().setSelectionProvider(selectionProvider); getSite().getPage().addPartListener(this); - } protected void inputChanged(IWorkbenchPart provider, Object input) { @@ -291,10 +280,8 @@ public class ModelledView extends SimanticsView implements IPartListener2 { RemoverUtil.remove(graph, rt); } }); - } catch (ServiceNotFoundException e) { - Logger.defaultLogError(e); - } catch (DatabaseException e) { - Logger.defaultLogError(e); + } catch (ServiceNotFoundException | DatabaseException e) { + LOGGER.error("Failed to dispose of modelled view database runtime support structures", e); } } @@ -394,10 +381,10 @@ public class ModelledView extends SimanticsView implements IPartListener2 { } } } - + // Can be used to cancel already scheduled dispose volatile boolean reallyClearExisting = false; - + Runnable clearExisting = new Runnable() { @Override @@ -445,5 +432,5 @@ public class ModelledView extends SimanticsView implements IPartListener2 { protected IPropertyPage getPropertyPage() { return null; } - + }