IDE/CLI: cleaner implementation of actions To Do Before Quit
authorEdouard Tisserant <edouard@beremiz.fr>
Thu, 27 Feb 2025 14:55:42 +0100 (2 weeks ago)
changeset 4120 6b4e1452fa16
parent 4119 766f3e0e7277
child 4121 ef48f96ccf06
IDE/CLI: cleaner implementation of actions To Do Before Quit
BeremizIDE.py
CLIController.py
ProjectController.py
connectors/WAMP/__init__.py
--- a/BeremizIDE.py	Thu Feb 27 09:38:10 2025 +0100
+++ b/BeremizIDE.py	Thu Feb 27 14:55:42 2025 +0100
@@ -65,7 +65,7 @@
     ITEM_RESOURCE, \
     ITEM_CONFNODE
 
-from ProjectController import ProjectController, GetAddMenuItems, MATIEC_ERROR_MODEL
+from ProjectController import ProjectController, GetAddMenuItems, MATIEC_ERROR_MODEL, ToDoBeforeQuit
 
 from IDEFrame import \
     TITLE,\
@@ -614,14 +614,6 @@
         else:
             return IDEFrame.LoadTab(self, notebook, page_infos)
 
-    # Strange hack required by WAMP connector, using twisted.
-    # Twisted reactor needs to be stopped only before quit,
-    # since it cannot be restarted
-    ToDoBeforeQuit = []
-
-    def AddToDoBeforeQuit(self, Thing):
-        self.ToDoBeforeQuit.append(Thing)
-
     def TryCloseFrame(self):
         if self.CTR is None or self.CheckSaveBeforeClosing(_("Close Application")):
             if self.CTR is not None:
@@ -631,9 +623,9 @@
 
             self.SaveLastState()
 
-            for Thing in self.ToDoBeforeQuit:
+            for Thing in ToDoBeforeQuit:
                 Thing()
-            self.ToDoBeforeQuit = []
+            ToDoBeforeQuit = []
 
             return True
         return False
--- a/CLIController.py	Thu Feb 27 09:38:10 2025 +0100
+++ b/CLIController.py	Thu Feb 27 14:55:42 2025 +0100
@@ -11,7 +11,7 @@
 
 import fake_wx
 
-from ProjectController import ProjectController
+from ProjectController import ProjectController, ToDoBeforeQuit
 from LocalRuntimeMixin import LocalRuntimeMixin
 from runtime.loglevels import LogLevelsCount, LogLevels
 
@@ -154,9 +154,14 @@
         
 
     def finish(self):
+        global ToDoBeforeQuit
 
         self._Disconnect()
 
+        for Thing in ToDoBeforeQuit:
+            Thing()
+        ToDoBeforeQuit = []
+
         if not self.session.keep:
             self.KillLocalRuntime()
 
--- a/ProjectController.py	Thu Feb 27 09:38:10 2025 +0100
+++ b/ProjectController.py	Thu Feb 27 14:55:42 2025 +0100
@@ -2141,3 +2141,10 @@
         for d in self.StatusMethods:
             if d["method"] == method and d.get("enabled", True) and d.get("shown", True):
                 getattr(self, method)()
+
+
+# Strange hack required by WAMP connector, using twisted.
+# Twisted reactor needs to be stopped only before quit,
+# since it cannot be restarted
+ToDoBeforeQuit = []
+
--- a/connectors/WAMP/__init__.py	Thu Feb 27 09:38:10 2025 +0100
+++ b/connectors/WAMP/__init__.py	Thu Feb 27 14:55:42 2025 +0100
@@ -90,12 +90,11 @@
         confnodesroot.logger.write(_("WAMP connecting to URL : %s\n") % url)
         return conn
 
-    AddToDoBeforeQuit = confnodesroot.AppFrame.AddToDoBeforeQuit
 
     def ThreadProc():
         global _WampConnection
         _WampConnection = RegisterWampClient()
-        AddToDoBeforeQuit(reactor.stop)
+        ToDoBeforeQuit.append(reactor.stop)
         reactor.run(installSignalHandlers=False)
 
     class WampPLCObjectProxy(object):