IDE: more wxPython4 related fixes. AUI Update crash on exit + PLCOpenEditor Save exception.
--- 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()