]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.views.swt/src/org/simantics/views/swt/ModelledView.java
Usability fixes for GraphExplorerImpl -related WB selection propagation
[simantics/platform.git] / bundles / org.simantics.views.swt / src / org / simantics / views / swt / ModelledView.java
index f50954857e7d3611d7956968ece2559d6f9bf8ea..92396f421de9d37e0b9673d8989d3ca894db64eb 100644 (file)
@@ -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<Resource>(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;
     }
-    
+
 }