]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/sg/DiagramSceneGraphProvider.java
Listen to changes in page settings
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / sg / DiagramSceneGraphProvider.java
index d3170b9506270350f5dde298d7e1285bee0f2d1a..ca6d6d04cfa2ea1feeb8572ab3d256acb9de5ec9 100644 (file)
@@ -26,6 +26,7 @@ import org.simantics.db.exception.ManyObjectsForFunctionalRelationException;
 import org.simantics.db.exception.NoSingleResultException;
 import org.simantics.db.exception.ServiceException;
 import org.simantics.db.management.ISessionContext;
+import org.simantics.db.procedure.Listener;
 import org.simantics.db.request.Read;
 import org.simantics.diagram.adapter.DefaultConnectionClassFactory;
 import org.simantics.diagram.adapter.FlagClassFactory;
@@ -97,6 +98,7 @@ import org.simantics.utils.page.PageDesc;
 import org.simantics.utils.page.PageOrientation;
 import org.simantics.utils.threads.AWTThread;
 import org.simantics.utils.threads.IThreadWorkQueue;
+import org.simantics.utils.threads.ThreadUtils;
 import org.simantics.utils.ui.ErrorLogger;
 
 
@@ -288,6 +290,35 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi
             DiagramDesc diagramDesc = Simantics.getSession().syncRequest(DiagramRequests.getDiagramDesc(diagramResource));
             if (diagramDesc != null)
                 setDiagramDesc(ctx, diagramDesc);
+
+            // Create a listener to react to page setting changes.
+            Simantics.getSession().asyncRequest(DiagramRequests.getDiagramDesc(diagramResource), new Listener<DiagramDesc>() {
+
+                @Override
+                public void execute(DiagramDesc result) {
+                    if (result != null && ctx != null) {
+                        ThreadUtils.asyncExec(ctx.getThreadAccess(), new Runnable() {
+                            @Override
+                            public void run() {
+                                if (ctx != null) {
+                                    setDiagramDesc(ctx, result);
+                                }
+                            }
+                        });
+                    }
+                }
+
+                @Override
+                public void exception(Throwable t) {
+                    ErrorLogger.defaultLogError(t);
+                }
+
+                @Override
+                public boolean isDisposed() {
+                    return ctx == null;
+                }
+                
+            });
         } catch (DatabaseException e) {
             ErrorLogger.defaultLogError(e);
         }
@@ -296,7 +327,7 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi
     protected void setDiagramDesc(ICanvasContext ctx, DiagramDesc diagramDesc) {
         IHintContext hints = ctx.getDefaultHintContext();
         hints.setHint(Hints.KEY_PAGE_DESC, diagramDesc.getPageDesc());
-        //hints.setHint(Hints.KEY_DISPLAY_PAGE, diagramDesc.isPageBordersVisible());
+        hints.setHint(Hints.KEY_DISPLAY_PAGE, diagramDesc.isPageBordersVisible());
         hints.setHint(Hints.KEY_DISPLAY_MARGINS, diagramDesc.isMarginsVisible());
     }
 
@@ -348,13 +379,7 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi
         }
 
         try {
-
-            IModelingRules modelingRules = Simantics.getSession().syncRequest(DiagramRequests.getModelingRules(resource, null));
-            if (modelingRules != null) {
-                initialHints.setHint(DiagramModelHints.KEY_MODELING_RULES, modelingRules);
-            }
-            
-            initialHints.setHint(SynchronizationHints.COPY_ADVISOR, getCopyAdvisor());
+               fillInitialDiagramHints(initialHints);
             
             final RuntimeDiagramManager runtimeDiagramManager = RuntimeDiagramManager.create(Simantics.getSession(), resource, modelURI, RVI);
             
@@ -385,6 +410,15 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi
         return ctx.getSceneGraph();
     }
     
+    protected void fillInitialDiagramHints(IHintContext initialHints) throws DatabaseException {
+         IModelingRules modelingRules = Simantics.getSession().syncRequest(DiagramRequests.getModelingRules(resource, null));
+          if (modelingRules != null) {
+              initialHints.setHint(DiagramModelHints.KEY_MODELING_RULES, modelingRules);
+          }
+          
+          initialHints.setHint(SynchronizationHints.COPY_ADVISOR, getCopyAdvisor());
+    }
+    
     protected IElementClassProvider createElementClassProvider(ReadGraph graph) throws DatabaseException {
         DiagramResource dr = DiagramResource.getInstance(graph);
         return ElementClassProviders.mappedProvider(