# HG changeset patch # User Edouard Tisserant <edouard@beremiz.fr> # Date 1733831078 -3600 # Node ID 4f47609a5f6267bda4f131810af81635c9fc29ce # Parent bafb3f25d5bdee2e233a2cedbbcdd1e1a642040c IDE: more wxPython4 related fixes. AUI Update crash on exit + PLCOpenEditor Save exception. diff -r bafb3f25d5bd -r 4f47609a5f62 BeremizIDE.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 diff -r bafb3f25d5bd -r 4f47609a5f62 IDEFrame.py --- 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() diff -r bafb3f25d5bd -r 4f47609a5f62 PLCOpenEditor.py --- 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()