IDE: more wxPython4 related fixes. AUI Update crash on exit + PLCOpenEditor Save exception.
authorEdouard Tisserant <edouard@beremiz.fr>
Tue, 10 Dec 2024 12:44:38 +0100 (3 months ago)
changeset 4068 4f47609a5f62
parent 4067 bafb3f25d5bd
child 4069 e4f648e0595a
IDE: more wxPython4 related fixes. AUI Update crash on exit + PLCOpenEditor Save exception.
BeremizIDE.py
IDEFrame.py
PLCOpenEditor.py
--- a/BeremizIDE.py	Mon Dec 09 15:51:41 2024 +0100
+++ b/BeremizIDE.py	Tue Dec 10 12:44:38 2024 +0100
@@ -454,6 +454,8 @@
 
         LocalRuntimeMixin.__init__(self, self.Log)
 
+        self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
+
         self.LastPanelSelected = None
 
         # Define Tree item icon list
@@ -639,7 +641,6 @@
     def OnCloseFrame(self, event):
         if self.TryCloseFrame():
             self.LogConsole.Disconnect(-1, -1, wx.wxEVT_KILL_FOCUS)
-            super(Beremiz, self).OnCloseFrame(event)
             event.Skip()
         else:
             # prevent event to continue, i.e. cancel closing
--- a/IDEFrame.py	Mon Dec 09 15:51:41 2024 +0100
+++ b/IDEFrame.py	Tue Dec 10 12:44:38 2024 +0100
@@ -555,6 +555,8 @@
                              self.OnPouSelectedChanged)
         self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE,
                              self.OnPageClose)
+        self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSED,
+                             self.OnPageClosed)
         self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_END_DRAG,
                              self.OnPageDragged)
         self.AUIManager.AddPane(self.TabsOpened,
@@ -759,8 +761,6 @@
         self.SetRefreshFunctions()
         self.SetDeleteFunctions()
 
-        self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
-
         wx.CallAfter(self.InitFindDialog)
 
     def InitFindDialog(self):
@@ -921,8 +921,20 @@
         for element in elements:
             self.RefreshFunctions[element]()
 
+    def OnPageClosed(self, event):
+        """Callback function when AUINotebook Page closed
+
+        :param event: AUINotebook Event.
+        """
+        if self.TabsOpened.GetPageCount() == 0:
+            pane = self.AUIManager.GetPane(self.TabsOpened)
+            # on wxPython 4.1.0, AuiPaneInfo has no "IsMaximized" attribute...
+            if (not hasattr(pane, "IsMaximized")) or pane.IsMaximized():
+                self.AUIManager.RestorePane(pane)
+            self.AUIManager.Update()
+
     def OnPageClose(self, event):
-        """Callback function when AUINotebook Page closed with CloseButton
+        """Callback function when AUINotebook Page closing with CloseButton
 
         :param event: AUINotebook Event.
         """
@@ -1149,9 +1161,6 @@
     def OnQuitMenu(self, event):
         self.Close()
 
-    def OnCloseFrame(self, event):
-        self.AUIManager.UnInit()
-
     # -------------------------------------------------------------------------------
     #                            Edit Menu Functions
     # -------------------------------------------------------------------------------
@@ -1406,16 +1415,9 @@
         for child in self.TabsOpened.GetChildren():
             if isinstance(child, wx.aui.AuiTabCtrl):
                 auitabctrl.append(child)
-                if wx.VERSION >= (4, 1, 0) and child not in self.AuiTabCtrl:
+                if child not in self.AuiTabCtrl:
                     child.Bind(wx.EVT_LEFT_DCLICK, self.GetTabsOpenedDClickFunction(child))
         self.AuiTabCtrl = auitabctrl
-        # on wxPython 4.0.7, AuiManager has no "RestorePane" method...
-        if wx.VERSION >= (4, 1, 0) and self.TabsOpened.GetPageCount() == 0:
-            pane = self.AUIManager.GetPane(self.TabsOpened)
-            # on wxPython 4.1.0, AuiPaneInfo has no "IsMaximized" attribute...
-            if (not hasattr(pane, "IsMaximized")) or pane.IsMaximized():
-                self.AUIManager.RestorePane(pane)
-            self.AUIManager.Update()
 
     def EnsureTabVisible(self, tab):
         notebook = tab.GetParent()
--- a/PLCOpenEditor.py	Mon Dec 09 15:51:41 2024 +0100
+++ b/PLCOpenEditor.py	Tue Dec 10 12:44:38 2024 +0100
@@ -177,7 +177,6 @@
 
     def OnCloseFrame(self, event):
         if self.Controler is None or self.CheckSaveBeforeClosing(_("Close Application")):
-            self.AUIManager.UnInit()
 
             self.SaveLastState()
 
@@ -315,7 +314,7 @@
         self.GenerateProgramAs()
 
     def GenerateProgramAs(self):
-        dialog = wx.FileDialog(self, _("Choose a file"), os.getcwd(), os.path.basename(self.Controler.GetProgramFilePath()),  _("ST files (*.st)|*.st|All files|*.*"), wx.SAVE | wx.CHANGE_DIR)
+        dialog = wx.FileDialog(self, _("Choose a file"), os.getcwd(), os.path.basename(self.Controler.GetProgramFilePath()),  _("ST files (*.st)|*.st|All files|*.*"), wx.FD_SAVE | wx.FD_CHANGE_DIR)
         if dialog.ShowModal() == wx.ID_OK:
             self.GenerateProgram(dialog.GetPath())
         dialog.Destroy()