From debbe2d5aa701704c5c23ef5d406ca1eb5a1ed6c Mon Sep 17 00:00:00 2001
From: David Hammer <dhammer@mailbox.org>
Date: Wed, 26 Jan 2022 21:11:19 +0100
Subject: [PATCH] Update geom on reconfigure for manual module geom

---
 src/calng/manual_geometry_base.py | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/calng/manual_geometry_base.py b/src/calng/manual_geometry_base.py
index c80b6e08..ee3748fc 100644
--- a/src/calng/manual_geometry_base.py
+++ b/src/calng/manual_geometry_base.py
@@ -112,7 +112,11 @@ class ManualGeometryBase(PythonDevice):
         self.KARABO_SLOT(self.requestScene)
         self.update_geom()
         plt.switch_backend("agg")
+        self.registerInitialFunction(self._initialization)
+
+    def _initialization(self):
         self.updateState(State.ON)
+        self.pleaseSendYourGeometry()
 
     def requestScene(self, params):
         payload = Hash()
@@ -132,6 +136,7 @@ class ManualGeometryBase(PythonDevice):
         self.reply(response)
 
     def pleaseSendYourGeometry(self):
+        self.update_geom()
         self.writeChannel("geometryOutput", Hash("pickledGeometry", self.pickled))
         axis = self.geom.inspect()
         axis.figure.tight_layout(pad=0)
@@ -152,11 +157,6 @@ class ManualGeometryBase(PythonDevice):
         self._prereconfigure_update_hash = config
 
     def postReconfigure(self):
-        if any(
-            path.startswith("quadrantCorners")
-            for path in self._prereconfigure_update_hash.getPaths()
-        ):
-            self.update_geom()
         del self._prereconfigure_update_hash
 
 
@@ -184,6 +184,15 @@ class ManualQuadrantsGeometryBase(ManualGeometryBase):
                 .commit(),
             )
 
+    def postReconfigure(self):
+        if any(
+            path.startswith("quadrantCorners")
+            for path in self._prereconfigure_update_hash.getPaths()
+        ):
+            self.update_geom()
+
+        super().postReconfigure()
+
     def update_geom(self):
         self.quadrant_corners = tuple(
             (self.get(f"quadrantCorners.Q{q}.x"), self.get(f"quadrantCorners.Q{q}.y"))
@@ -209,6 +218,12 @@ class ManualModulesGeometryBase(ManualGeometryBase):
             .commit(),
         )
 
+    def postReconfigure(self):
+        if self._prereconfigure_update_hash.has("modules"):
+            self.update_geom()
+
+        super().postReconfigure()
+
     def update_geom(self):
         modules = self.get("modules")
         module_pos = [(module.get("posX"), module.get("posY")) for module in modules]
-- 
GitLab