Browse Source

wxGUI: new design for GNotebooks (#1801)

* new grey color for GNotebooks
* other notebooks also adapted
Linda Kladivova 3 years ago
parent
commit
87398fa1d2

+ 5 - 8
gui/wxpython/core/globalvar.py

@@ -137,19 +137,16 @@ QUERYLAYER = "qlayer"
 
 """Style definition for FlatNotebook pages"""
 FNPageStyle = (
-    FN.FNB_FF2 | FN.FNB_BACKGROUND_GRADIENT | FN.FNB_NODRAG | FN.FNB_TABS_BORDER_SIMPLE
+    FN.FNB_NODRAG
+    | FN.FNB_TABS_BORDER_SIMPLE
+    | FN.FNB_NAV_BUTTONS_WHEN_NEEDED
+    | FN.FNB_HIDE_ON_SINGLE_TAB
 )
 
 FNPageDStyle = (
-    FN.FNB_FANCY_TABS
-    | FN.FNB_BOTTOM
-    | FN.FNB_NODRAG
-    | FN.FNB_NO_NAV_BUTTONS
-    | FN.FNB_NO_X_BUTTON
+    FN.FNB_BOTTOM | FN.FNB_NODRAG | FN.FNB_NO_NAV_BUTTONS | FN.FNB_NO_X_BUTTON
 )
 
-FNPageColor = wx.Colour(125, 200, 175)
-
 """Dialog widget dimension"""
 DIALOG_SPIN_SIZE = (150, -1)
 DIALOG_COMBOBOX_SIZE = (300, -1)

+ 0 - 1
gui/wxpython/core/settings.py

@@ -809,7 +809,6 @@ class Settings:
         self.internalSettings["appearance"]["commandNotebook"]["choices"] = (
             _("Basic top"),
             _("Basic left"),
-            _("Fancy green"),
             _("List left"),
         )
 

+ 14 - 24
gui/wxpython/dbmgr/base.py

@@ -57,6 +57,7 @@ from dbmgr.sqlbuilder import SQLBuilderSelect, SQLBuilderUpdate
 from core.gcmd import RunCommand, GException, GError, GMessage, GWarning
 from core.utils import ListOfCatsToRange
 from gui_core.dialogs import CreateNewVector
+from gui_core.widgets import GNotebook
 from dbmgr.vinfo import VectorDBInfo, GetUnicodeValue, CreateDbInfoDesc, GetDbEncoding
 from core.debug import Debug
 from dbmgr.dialogs import ModifyTableRecord, AddColumnDialog
@@ -885,7 +886,7 @@ class DbMgrBase:
         return self.dbMgrData["mapDBInfo"].layers.keys()
 
 
-class DbMgrNotebookBase(FN.FlatNotebook):
+class DbMgrNotebookBase(GNotebook):
     def __init__(self, parent, parentDbMgrBase):
         """Base class for notebook with attribute tables in tabs
 
@@ -922,12 +923,7 @@ class DbMgrNotebookBase(FN.FlatNotebook):
         # list which represents layers numbers in order of tabs
         self.layers = []
 
-        if globalvar.hasAgw:
-            dbmStyle = {"agwStyle": globalvar.FNPageStyle}
-        else:
-            dbmStyle = {"style": globalvar.FNPageStyle}
-
-        FN.FlatNotebook.__init__(self, parent=self.parent, id=wx.ID_ANY, **dbmStyle)
+        GNotebook.__init__(self, parent=self.parent, style=globalvar.FNPageStyle)
 
         self.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnLayerPageChanged)
 
@@ -1022,7 +1018,7 @@ class DbMgrNotebookBase(FN.FlatNotebook):
         if layer not in self.layers:
             return False
 
-        FN.FlatNotebook.DeletePage(self, self.layers.index(layer))
+        GNotebook.DeleteNBPage(self, self.layers.index(layer))
 
         self.layers.remove(layer)
         del self.layerPage[layer]
@@ -1036,7 +1032,7 @@ class DbMgrNotebookBase(FN.FlatNotebook):
 
     def DeleteAllPages(self):
         """Removes all layer pages"""
-        FN.FlatNotebook.DeleteAllPages(self)
+        GNotebook.DeleteAllPages(self)
         self.layerPage = {}
         self.layers = []
         self.selLayer = None
@@ -1174,8 +1170,8 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
 
         if pos == -1:
             pos = self.GetPageCount()
-        self.InsertPage(
-            pos,
+        self.InsertNBPage(
+            index=pos,
             page=panel,
             text=" %d / %s %s"
             % (layer, label, self.dbMgrData["mapDBInfo"].layers[layer]["table"]),
@@ -1204,17 +1200,11 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
         listSizer.Add(win, proportion=1, flag=wx.EXPAND | wx.ALL, border=3)
 
         # sql statement box
-        FNPageStyle = (
-            FN.FNB_NO_NAV_BUTTONS
-            | FN.FNB_NO_X_BUTTON
-            | FN.FNB_NODRAG
-            | FN.FNB_FANCY_TABS
-        )
-        if globalvar.hasAgw:
-            dbmStyle = {"agwStyle": FNPageStyle}
-        else:
-            dbmStyle = {"style": FNPageStyle}
-        sqlNtb = FN.FlatNotebook(parent=sqlQueryPanel, id=wx.ID_ANY, **dbmStyle)
+        sqlNtb = GNotebook(
+            parent=sqlQueryPanel,
+            style=FN.FNB_NO_NAV_BUTTONS | FN.FNB_NO_X_BUTTON | FN.FNB_NODRAG,
+        )
+
         # Simple tab
         simpleSqlPanel = wx.Panel(parent=sqlNtb, id=wx.ID_ANY)
         sqlNtb.AddPage(page=simpleSqlPanel, text=_("Simple"))
@@ -2337,8 +2327,8 @@ class DbMgrTablesPage(DbMgrNotebookBase):
 
         if pos == -1:
             pos = self.GetPageCount()
-        self.InsertPage(
-            pos,
+        self.InsertNBPage(
+            index=pos,
             page=panel,
             text=" %d / %s %s"
             % (layer, label, self.dbMgrData["mapDBInfo"].layers[layer]["table"]),

+ 0 - 2
gui/wxpython/dbmgr/manager.py

@@ -131,14 +131,12 @@ class AttributeManager(wx.Frame, DbMgrBase):
         self.notebook.AddPage(
             page=self.pages["browse"], text=_("Browse data"), name="browse"
         )
-        self.pages["browse"].SetTabAreaColour(globalvar.FNPageColor)
 
         self.CreateDbMgrPage(parent=self, pageName="manageTable")
 
         self.notebook.AddPage(
             page=self.pages["manageTable"], text=_("Manage tables"), name="table"
         )
-        self.pages["manageTable"].SetTabAreaColour(globalvar.FNPageColor)
 
         self.CreateDbMgrPage(parent=self, pageName="manageLayer")
         self.notebook.AddPage(

+ 1 - 12
gui/wxpython/gui_core/forms.py

@@ -68,10 +68,6 @@ from threading import Thread
 
 import wx
 
-try:
-    import wx.lib.agw.flatnotebook as FN
-except ImportError:
-    import wx.lib.flatnotebook as FN
 import wx.lib.colourselect as csel
 import wx.lib.filebrowsebutton as filebrowse
 from wx.lib.newevent import NewEvent
@@ -115,7 +111,6 @@ from gui_core.widgets import (
     FloatValidator,
     FormListbook,
     FormNotebook,
-    GNotebook,
     PlacementValidator,
 )
 from core.giface import Notification, StandaloneGrassInterface
@@ -1053,13 +1048,7 @@ class CmdPanel(wx.Panel):
         elif style == 1:  # basic left
             self.notebook = FormNotebook(self, style=wx.BK_LEFT)
             self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChange)
-        elif style == 2:  # fancy green
-            self.notebook = GNotebook(
-                self, style=globalvar.FNPageStyle | FN.FNB_NO_X_BUTTON
-            )
-            self.notebook.SetTabAreaColour(globalvar.FNPageColor)
-            self.notebook.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnPageChange)
-        elif style == 3:
+        elif style == 2:  # list left
             self.notebook = FormListbook(self, style=wx.BK_LEFT)
             self.notebook.Bind(wx.EVT_LISTBOOK_PAGE_CHANGED, self.OnPageChange)
         self.notebook.Refresh()

+ 24 - 20
gui/wxpython/gui_core/widgets.py

@@ -131,26 +131,26 @@ class NotebookController:
         """Binds page changed event."""
         self.widget.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnRemoveHighlight)
 
-    def AddPage(self, **kwargs):
+    def AddPage(self, *args, **kwargs):
         """Add a new page"""
         if "name" in kwargs:
             self.notebookPages[kwargs["name"]] = kwargs["page"]
             del kwargs["name"]
 
-        self.classObject.AddPage(self.widget, **kwargs)
+        self.classObject.AddPage(self.widget, *args, **kwargs)
 
-    def InsertPage(self, **kwargs):
+    def InsertPage(self, *args, **kwargs):
         """Insert a new page"""
         if "name" in kwargs:
             self.notebookPages[kwargs["name"]] = kwargs["page"]
             del kwargs["name"]
 
         try:
-            self.classObject.InsertPage(self.widget, **kwargs)
+            self.classObject.InsertPage(self.widget, *args, **kwargs)
         except TypeError as e:  # documentation says 'index', but certain versions of wx require 'n'
             kwargs["n"] = kwargs["index"]
             del kwargs["index"]
-            self.classObject.InsertPage(self.widget, **kwargs)
+            self.classObject.InsertPage(self.widget, *args, **kwargs)
 
     def DeletePage(self, page):
         """Delete page
@@ -264,7 +264,7 @@ class FlatNotebookController(NotebookController):
 
         return self.classObject.GetPageIndex(self.widget, self.notebookPages[page])
 
-    def InsertPage(self, **kwargs):
+    def InsertPage(self, *args, **kwargs):
         """Insert a new page"""
         if "name" in kwargs:
             self.notebookPages[kwargs["name"]] = kwargs["page"]
@@ -272,14 +272,14 @@ class FlatNotebookController(NotebookController):
 
         kwargs["indx"] = kwargs["index"]
         del kwargs["index"]
-        self.classObject.InsertPage(self.widget, **kwargs)
+        self.classObject.InsertPage(self.widget, *args, **kwargs)
 
 
 class GNotebook(FN.FlatNotebook):
     """Generic notebook widget.
 
     Enables advanced style settings.
-    Problems with hidden tabs and does not respect system colors (native look).
+    Problems with hidden tabs. Uses system colours for active tabs.
     """
 
     def __init__(self, parent, style, **kwargs):
@@ -293,14 +293,18 @@ class GNotebook(FN.FlatNotebook):
         self.controller = FlatNotebookController(
             classObject=FN.FlatNotebook, widget=self
         )
+        self.SetActiveTabColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW))
+        self.SetActiveTabTextColour(
+            wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
+        )
 
-    def AddPage(self, **kwargs):
+    def AddPage(self, *args, **kwargs):
         """@copydoc NotebookController::AddPage()"""
-        self.controller.AddPage(**kwargs)
+        self.controller.AddPage(*args, **kwargs)
 
-    def InsertNBPage(self, **kwargs):
+    def InsertNBPage(self, *args, **kwargs):
         """@copydoc NotebookController::InsertPage()"""
-        self.controller.InsertPage(**kwargs)
+        self.controller.InsertPage(*args, **kwargs)
 
     def DeleteNBPage(self, page):
         """@copydoc NotebookController::DeletePage()"""
@@ -328,13 +332,13 @@ class FormNotebook(wx.Notebook):
         wx.Notebook.__init__(self, parent, id=wx.ID_ANY, style=style)
         self.controller = NotebookController(classObject=wx.Notebook, widget=self)
 
-    def AddPage(self, **kwargs):
+    def AddPage(self, *args, **kwargs):
         """@copydoc NotebookController::AddPage()"""
-        self.controller.AddPage(**kwargs)
+        self.controller.AddPage(*args, **kwargs)
 
-    def InsertNBPage(self, **kwargs):
+    def InsertNBPage(self, *args, **kwargs):
         """@copydoc NotebookController::InsertPage()"""
-        self.controller.InsertPage(**kwargs)
+        self.controller.InsertPage(*args, **kwargs)
 
     def DeleteNBPage(self, page):
         """@copydoc NotebookController::DeletePage()"""
@@ -362,13 +366,13 @@ class FormListbook(wx.Listbook):
         wx.Listbook.__init__(self, parent, id=wx.ID_ANY, style=style)
         self.controller = NotebookController(classObject=wx.Listbook, widget=self)
 
-    def AddPage(self, **kwargs):
+    def AddPage(self, *args, **kwargs):
         """@copydoc NotebookController::AddPage()"""
-        self.controller.AddPage(**kwargs)
+        self.controller.AddPage(*args, **kwargs)
 
-    def InsertPage_(self, **kwargs):
+    def InsertPage_(self, *args, **kwargs):
         """@copydoc NotebookController::InsertPage()"""
-        self.controller.InsertPage(**kwargs)
+        self.controller.InsertPage(*args, **kwargs)
 
     def DeletePage(self, page):
         """@copydoc NotebookController::DeletePage()"""

+ 0 - 1
gui/wxpython/lmgr/frame.py

@@ -343,7 +343,6 @@ class GMFrame(wx.Frame):
         """Initialize Display widget"""
         # create display notebook
         self.notebookLayers = GNotebook(parent=parent, style=globalvar.FNPageStyle)
-        self.notebookLayers.SetTabAreaColour(globalvar.FNPageColor)
         menu = self._createTabMenu()
         self.notebookLayers.SetRightClickMenu(menu)
         # bindings

+ 0 - 1
gui/wxpython/main_window/frame.py

@@ -302,7 +302,6 @@ class GMFrame(wx.Frame):
         """Initialize Display widget"""
         # create display notebook
         self.notebookLayers = GNotebook(parent=parent, style=globalvar.FNPageStyle)
-        self.notebookLayers.SetTabAreaColour(globalvar.FNPageColor)
         menu = self._createTabMenu()
         self.notebookLayers.SetRightClickMenu(menu)
         # bindings

+ 9 - 8
gui/wxpython/nviz/tools.py

@@ -51,7 +51,13 @@ from gui_core.gselect import VectorDBInfo
 from core.gcmd import GMessage, RunCommand
 from modules.colorrules import ThematicVectorTable
 from core.settings import UserSettings
-from gui_core.widgets import ScrolledPanel, NumTextCtrl, FloatSlider, SymbolButton
+from gui_core.widgets import (
+    ScrolledPanel,
+    NumTextCtrl,
+    FloatSlider,
+    SymbolButton,
+    GNotebook,
+)
 from gui_core.gselect import Select
 from gui_core.wrap import (
     Window,
@@ -75,7 +81,7 @@ from nviz.mapwindow import (
 from .wxnviz import DM_FLAT, DM_GOURAUD, MAX_ISOSURFS
 
 
-class NvizToolWindow(FN.FlatNotebook):
+class NvizToolWindow(GNotebook):
     """Nviz (3D view) tools panel"""
 
     def __init__(
@@ -94,12 +100,7 @@ class NvizToolWindow(FN.FlatNotebook):
         self.mapWindow = display.GetWindow()
         self._display = self.mapWindow.GetDisplay()
 
-        if globalvar.hasAgw:
-            kwargs["agwStyle"] = style
-        else:
-            kwargs["style"] = style
-        FN.FlatNotebook.__init__(self, parent, id, **kwargs)
-        self.SetTabAreaColour(globalvar.FNPageColor)
+        GNotebook.__init__(self, parent, style=style)
 
         self.win = {}  # window ids
         self.page = {}  # page ids

+ 7 - 13
gui/wxpython/psmap/frame.py

@@ -27,9 +27,9 @@ from math import sin, cos, pi, sqrt
 import wx
 
 try:
-    import wx.lib.agw.flatnotebook as fnb
+    import wx.lib.agw.flatnotebook as FN
 except ImportError:
-    import wx.lib.flatnotebook as fnb
+    import wx.lib.flatnotebook as FN
 
 import grass.script as grass
 
@@ -41,6 +41,7 @@ from core.gcmd import RunCommand, GError, GMessage
 from core.settings import UserSettings
 from core.utils import PilImageToWxImage
 from gui_core.forms import GUI
+from gui_core.widgets import GNotebook
 from gui_core.dialogs import HyperlinkDialog
 from gui_core.ghelp import ShowAboutDialog
 from gui_core.wrap import ClientDC, PseudoDC, Rect, StockCursor, EmptyBitmap
@@ -151,7 +152,7 @@ class PsMapFrame(wx.Frame):
         self.openDialogs = dict()
 
         self.pageId = NewId()
-        # current page of flatnotebook
+        # current page of GNotebook
         self.currentPage = 0
         # canvas for draft mode
         self.canvas = PsMapBufferedWindow(
@@ -199,7 +200,7 @@ class PsMapFrame(wx.Frame):
         # workaround for http://trac.wxwidgets.org/ticket/13628
         self.SetSize(self.GetBestSize())
 
-        self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
+        self.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
         self.Bind(EVT_CMD_DONE, self.OnCmdDone)
 
@@ -220,15 +221,8 @@ class PsMapFrame(wx.Frame):
     def _layout(self):
         """Do layout"""
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        if globalvar.hasAgw:
-            self.book = fnb.FlatNotebook(
-                parent=self, id=wx.ID_ANY, agwStyle=globalvar.FNPageDStyle
-            )
-        else:
-            self.book = fnb.FlatNotebook(
-                parent=self, id=wx.ID_ANY, style=globalvar.FNPageDStyle
-            )
 
+        self.book = GNotebook(parent=self, style=globalvar.FNPageDStyle)
         self.book.AddPage(self.canvas, "Draft mode")
         self.book.AddPage(self.previewCanvas, "Preview")
         self.book.SetSelection(0)
@@ -1299,7 +1293,7 @@ class PsMapFrame(wx.Frame):
                     self.deleteObject(id)
 
     def OnPageChanged(self, event):
-        """Flatnotebook page has changed"""
+        """GNotebook page has changed"""
         self.currentPage = self.book.GetPageIndex(self.book.GetCurrentPage())
         if self.currentPage == 1:
             self.SetStatusText(

+ 1 - 3
gui/wxpython/tplot/frame.py

@@ -178,9 +178,7 @@ class TplotFrame(wx.Frame):
         # self.vbox.AddSpacer(10)
 
         # ------------ADD NOTEBOOK------------
-        self.ntb = GNotebook(
-            parent=self.mainPanel, style=FN.FNB_FANCY_TABS | FN.FNB_NODRAG
-        )
+        self.ntb = GNotebook(parent=self.mainPanel, style=FN.FNB_NODRAG)
 
         # ------------ITEMS IN NOTEBOOK PAGE (RASTER)------------------------
 

+ 0 - 2
gui/wxpython/vnet/dialogs.py

@@ -541,7 +541,6 @@ class VNETDialog(wx.Dialog):
         self.inpDbMgrData["browse"] = self.inpDbMgrData["dbMgr"].CreateDbMgrPage(
             parent=self.notebook, pageName="browse"
         )
-        self.inpDbMgrData["browse"].SetTabAreaColour(globalvar.FNPageColor)
 
     def _updateInputDbMgrPage(self, show):
         """Show or hide input tables tab"""
@@ -562,7 +561,6 @@ class VNETDialog(wx.Dialog):
         self.resultDbMgrData["browse"] = self.resultDbMgrData["dbMgr"].CreateDbMgrPage(
             parent=self.notebook, pageName="browse"
         )
-        self.resultDbMgrData["browse"].SetTabAreaColour(globalvar.FNPageColor)
 
     def _updateResultDbMgrPage(self):
         """Show or Hide Result tables tab"""

+ 1 - 3
gui/wxpython/web_services/widgets.py

@@ -139,9 +139,7 @@ class WSPanel(wx.Panel):
 
         reqDataBox = StaticBox(parent=self, label=_(" Requested data settings "))
         self._nb_sizer = wx.StaticBoxSizer(reqDataBox, wx.VERTICAL)
-        self.notebook = GNotebook(
-            parent=self, style=FN.FNB_FANCY_TABS | FN.FNB_NO_X_BUTTON | FN.FNB_NODRAG
-        )
+        self.notebook = GNotebook(parent=self, style=FN.FNB_NO_X_BUTTON | FN.FNB_NODRAG)
 
         self._requestPage()
         self._advancedSettsPage()