From 086b5b29877de07bc83b5eb3112f3d557df7c395 Mon Sep 17 00:00:00 2001 From: Tomas Zigo Date: Sat, 30 Sep 2023 14:08:50 +0200 Subject: [PATCH] Fix delete NB Browse, Tables page by page index if layer was deleted --- gui/wxpython/dbmgr/base.py | 7 ++++-- gui/wxpython/gui_core/widgets.py | 43 +++++++++++++++++++++++++------- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/gui/wxpython/dbmgr/base.py b/gui/wxpython/dbmgr/base.py index c9af8a851a3..05ae7b6e61d 100644 --- a/gui/wxpython/dbmgr/base.py +++ b/gui/wxpython/dbmgr/base.py @@ -1023,13 +1023,13 @@ def DeletePage(self, layer): if layer not in self.layers: return False - GNotebook.DeletePage(self, self.layers.index(layer)) + GNotebook.DeleteNBPage(self, self.layers.index(layer)) self.layers.remove(layer) del self.layerPage[layer] if self.GetSelection() >= 0: - self.selLayer = self.layers[self.GetSelection()] + self.selLayer = self.layers[-1] else: self.selLayer = None @@ -1361,6 +1361,9 @@ def OnSqlQuerySizeWrap(self, layer): def OnSqlQuerySize(self, event, layer): """Adapts SQL Query Simple tab on current width""" + if layer not in self.layers: + return + sqlNtb = event.GetEventObject() if not self.sqlBestSize: self.sqlBestSize = sqlNtb.GetBestSize() diff --git a/gui/wxpython/gui_core/widgets.py b/gui/wxpython/gui_core/widgets.py index 115b1052758..a1ead725b47 100644 --- a/gui/wxpython/gui_core/widgets.py +++ b/gui/wxpython/gui_core/widgets.py @@ -132,7 +132,17 @@ def BindPageChanged(self): self.widget.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnRemoveHighlight) def AddPage(self, *args, **kwargs): - """Add a new page""" + """Add a new page + + :param str name: use this param if notebooks has ability to + change position and then you must use page name + param arg to correctly delete notebook page. + If you do not use this parameter, make sure that + the notebooks does not have the ability to change + position, because in that case the deletion of + the page based on the position index would not + work correctly. + """ if "name" in kwargs: self.notebookPages[kwargs["name"]] = kwargs["page"] del kwargs["name"] @@ -140,7 +150,17 @@ def AddPage(self, *args, **kwargs): self.classObject.AddPage(self.widget, *args, **kwargs) def InsertPage(self, *args, **kwargs): - """Insert a new page""" + """Insert a new page + + :param str name: use this param if notebooks has ability to + change position and then you must use page name + param arg to correctly delete notebook page. + If you do not use this parameter, make sure that + the notebooks does not have the ability to change + position, because in that case the deletion of + the page based on the position index would not + work correctly. + """ if "name" in kwargs: self.notebookPages[kwargs["name"]] = kwargs["page"] del kwargs["name"] @@ -157,12 +177,9 @@ def InsertPage(self, *args, **kwargs): def DeletePage(self, page): """Delete page - That method works correctly if AddPage() and InsertPage() method - was used with name parameter argument. - - :param page: name + :param str|int page: page name or page index position - :return: True if page was deleted, False if not exists + :return bool: True if page was deleted, False if not exists """ delPageIndex = self.GetPageIndexByName(page) if delPageIndex != -1: @@ -219,8 +236,12 @@ def RemoveHighlight(self, page): def GetPageIndexByName(self, page): """Get notebook page index - :param page: name + :param str|int page: page name or page index position + + :return int: page index """ + if not self.notebookPages: + return page if page not in self.notebookPages: return -1 for pageIndex in range(self.classObject.GetPageCount(self.widget)): @@ -263,8 +284,12 @@ def BindPageChanged(self): def GetPageIndexByName(self, page): """Get notebook page index - :param page: name + :param str|int page: page name or page index position + + :return int: page index """ + if not self.notebookPages: + return page if page not in self.notebookPages: return -1