Some optimizations for the sidebars layout. eric7

Tue, 26 Oct 2021 17:00:21 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 26 Oct 2021 17:00:21 +0200
branch
eric7
changeset 8722
2f57e52a704b
parent 8721
f10b3f345463
child 8723
0338c9ad59af

Some optimizations for the sidebars layout.

eric7/EricWidgets/EricSideBar.py file | annotate | diff | comparison | revisions
eric7/Preferences/__init__.py file | annotate | diff | comparison | revisions
eric7/UI/UserInterface.py file | annotate | diff | comparison | revisions
--- a/eric7/EricWidgets/EricSideBar.py	Mon Oct 25 18:30:10 2021 +0200
+++ b/eric7/EricWidgets/EricSideBar.py	Tue Oct 26 17:00:21 2021 +0200
@@ -31,7 +31,7 @@
     Class implementing a sidebar with a widget area, that is hidden or shown,
     if the current tab is clicked again.
     """
-    Version = 3
+    Version = 4
     
     def __init__(self, orientation=None,
                  iconBarSize=EricIconBar.DefaultBarSize, parent=None):
@@ -67,9 +67,6 @@
         self.__maxSize = 0
         self.__bigSize = QSize()
         
-        self.splitter = None
-        self.splitterSizes = []
-        
         self.__hasFocus = False
         # flag storing if this widget or any child has the focus
         self.__autoHide = False
@@ -86,28 +83,6 @@
         self.__iconBar.currentClicked.connect(
             self.__currentIconClicked)
     
-    def setSplitter(self, splitter):
-        """
-        Public method to set the splitter managing the sidebar.
-        
-        @param splitter reference to the splitter (QSplitter)
-        """
-        self.splitter = splitter
-        self.splitter.splitterMoved.connect(self.__splitterMoved)
-        self.splitter.setChildrenCollapsible(False)
-        index = self.splitter.indexOf(self)
-        self.splitter.setCollapsible(index, False)
-    
-    def __splitterMoved(self, pos, index):
-        """
-        Private slot to react on splitter moves.
-        
-        @param pos new position of the splitter handle (integer)
-        @param index index of the splitter handle (integer)
-        """
-        if self.splitter:
-            self.splitterSizes = self.splitter.sizes()
-    
     def __shrinkIt(self):
         """
         Private method to shrink the sidebar.
@@ -122,8 +97,6 @@
         else:
             self.__minSize = self.minimumSizeHint().width()
             self.__maxSize = self.maximumWidth()
-        if self.splitter:
-            self.splitterSizes = self.splitter.sizes()
         
         self.__stackedWidget.hide()
         
@@ -151,8 +124,6 @@
             minSize = max(self.__minSize, self.minimumSizeHint().width())
             self.setMinimumWidth(minSize)
             self.setMaximumWidth(self.__maxSize)
-        if self.splitter:
-            self.splitter.setSizes(self.splitterSizes)
     
     def isMinimized(self):
         """
@@ -417,18 +388,15 @@
         
         @return saved state as a byte array (QByteArray)
         """
-        if len(self.splitterSizes) == 0:
-            if self.splitter:
-                self.splitterSizes = self.splitter.sizes()
-            self.__bigSize = self.size()
-            if self.__orientation in (
-                EricSideBarSide.NORTH, EricSideBarSide.SOUTH
-            ):
-                self.__minSize = self.minimumSizeHint().height()
-                self.__maxSize = self.maximumHeight()
-            else:
-                self.__minSize = self.minimumSizeHint().width()
-                self.__maxSize = self.maximumWidth()
+        self.__bigSize = self.size()
+        if self.__orientation in (
+            EricSideBarSide.NORTH, EricSideBarSide.SOUTH
+        ):
+            self.__minSize = self.minimumSizeHint().height()
+            self.__maxSize = self.maximumHeight()
+        else:
+            self.__minSize = self.minimumSizeHint().width()
+            self.__maxSize = self.maximumWidth()
         
         dataDict = {
             "version": self.Version,
@@ -436,7 +404,6 @@
             "big_size": [self.__bigSize.width(), self.__bigSize.height()],
             "min_size": self.__minSize,
             "max_size": self.__maxSize,
-            "splitter_sizes": self.splitterSizes,
         }
         data = json.dumps(dataDict)
         
@@ -469,14 +436,13 @@
             minSize = self.layout.minimumSize().width()
             maxSize = self.maximumWidth()
         
-        if stateDict["version"] in (2, 3):
+        if stateDict["version"] in (2, 3, 4):
             if stateDict["minimized"] and not self.__minimized:
                 self.__shrinkIt()
             
             self.__bigSize = QSize(*stateDict["big_size"])
             self.__minSize = max(stateDict["min_size"], minSize)
             self.__maxSize = max(stateDict["max_size"], maxSize)
-            self.splitterSizes = stateDict["splitter_sizes"]
             
             if not stateDict["minimized"]:
                 self.__expandIt()
--- a/eric7/Preferences/__init__.py	Mon Oct 25 18:30:10 2021 +0200
+++ b/eric7/Preferences/__init__.py	Tue Oct 26 17:00:21 2021 +0200
@@ -158,9 +158,9 @@
                 [True, True, True],
                 # saved states of the splitters and sidebars of the
                 # sidebars layout (2)
-                # left splitter, vertical splitter, right splitter,
+                # horizontal splitter, vertical splitter,
                 # left sidebar, bottom sidebar, right sidebar
-                [QByteArray(), QByteArray(), QByteArray(), "", "", ""],
+                [QByteArray(), QByteArray(), "", "", ""],
             ],
             "debug": [
                 # saved state main window with toolbox windows (0)
@@ -170,9 +170,9 @@
                 [False, True, True],
                 # saved states of the splitters and sidebars of the
                 # sidebars layout (2)
-                # left splitter, vertical splitter, right splitter,
+                # horizontal splitter, vertical splitter,
                 # left sidebar, bottom sidebar, right sidebar
-                [QByteArray(), QByteArray(), QByteArray(), "", "", ""],
+                [QByteArray(), QByteArray(), "", "", ""],
             ],
         },
         "ToolbarManagerState": QByteArray(),
@@ -1972,11 +1972,13 @@
                     profiles[name][1][:],
                     []
                 ]
-                for bs in profiles[name][2][:3]:
+                if len(profiles[name][2]) == 6:
+                    del profiles[name][2][2]
+                for bs in profiles[name][2][:2]:
                     # splitters
                     viewProfiles[name][2].append(
                         QByteArray.fromBase64(bs.encode("utf-8")))
-                viewProfiles[name][2] += profiles[name][2][3:]  # side bars
+                viewProfiles[name][2] += profiles[name][2][2:]  # side bars
         return viewProfiles
     elif key in ["ToolbarManagerState", "PreviewSplitterState"]:
         state = Prefs.settings.value("UI/" + key)
@@ -2014,10 +2016,10 @@
                 value[name][1][:],
                 []
             ]
-            for ba in value[name][2][:3]:
+            for ba in value[name][2][:2]:
                 # Splitters
                 profiles[name][2].append(bytes(ba.toBase64()).decode())
-            profiles[name][2] += value[name][2][3:]     # side bars
+            profiles[name][2] += value[name][2][2:]     # side bars
         Prefs.settings.setValue("UI/" + key, json.dumps(profiles))
     elif key in ("LogStdErrColour", "IconBarColor"):
         Prefs.settings.setValue("UI/" + key, value.name())
--- a/eric7/UI/UserInterface.py	Mon Oct 25 18:30:10 2021 +0200
+++ b/eric7/UI/UserInterface.py	Tue Oct 26 17:00:21 2021 +0200
@@ -1270,6 +1270,8 @@
         ## Populate the right side bar
         ####################################################
         
+        # TODO: add option to add all tools to the left sidebar
+        #       possibly with different order (e.g. debug after VCS)
         self.rightSidebar.addTab(
             self.debugViewer,
             UI.PixmapCache.getIcon("sbDebugViewer96"),
@@ -1366,20 +1368,16 @@
         # create the central widget
         logging.debug("Creating central widget...")
         cw = self.centralWidget()   # save the current central widget
-        self.leftSplitter = QSplitter(Qt.Orientation.Horizontal)
-        self.rightSplitter = QSplitter(Qt.Orientation.Horizontal)
+        self.horizontalSplitter = QSplitter(Qt.Orientation.Horizontal)
+        self.horizontalSplitter.setChildrenCollapsible(False)
         self.verticalSplitter = QSplitter(Qt.Orientation.Vertical)
+        self.verticalSplitter.setChildrenCollapsible(False)
         self.verticalSplitter.addWidget(cw)
         self.verticalSplitter.addWidget(self.bottomSidebar)
-        self.rightSplitter.addWidget(self.verticalSplitter)
-        self.rightSplitter.addWidget(self.rightSidebar)
-        self.leftSplitter.addWidget(self.leftSidebar)
-        self.leftSplitter.addWidget(self.rightSplitter)
-        self.setCentralWidget(self.leftSplitter)
-        
-        self.leftSidebar.setSplitter(self.leftSplitter)
-        self.rightSidebar.setSplitter(self.rightSplitter)
-        self.bottomSidebar.setSplitter(self.verticalSplitter)
+        self.horizontalSplitter.addWidget(self.leftSidebar)
+        self.horizontalSplitter.addWidget(self.verticalSplitter)
+        self.horizontalSplitter.addWidget(self.rightSidebar)
+        self.setCentralWidget(self.horizontalSplitter)
         
     def addSideWidget(self, side, widget, icon, label):
         """
@@ -3452,15 +3450,6 @@
         if self.symbolsViewer is not None:
             self.__menus["subwindow"].addAction(self.symbolsViewerActivateAct)
         
-        # bottom side
-        self.__menus["subwindow"].addSection(self.tr("Bottom Side"))
-        if self.__shellPosition == "bottom":
-            self.__menus["subwindow"].addAction(self.shellActivateAct)
-        self.__menus["subwindow"].addAction(self.taskViewerActivateAct)
-        self.__menus["subwindow"].addAction(self.logViewerActivateAct)
-        if self.numbersViewer is not None:
-            self.__menus["subwindow"].addAction(self.numbersViewerActivateAct)
-        
         # right side
         self.__menus["subwindow"].addSection(self.tr("Right Side"))
         if self.__shellPosition == "right":
@@ -3487,6 +3476,15 @@
             self.__menus["subwindow"].addAction(
                 self.microPythonWidgetActivateAct)
         
+        # bottom side
+        self.__menus["subwindow"].addSection(self.tr("Bottom Side"))
+        if self.__shellPosition == "bottom":
+            self.__menus["subwindow"].addAction(self.shellActivateAct)
+        self.__menus["subwindow"].addAction(self.taskViewerActivateAct)
+        self.__menus["subwindow"].addAction(self.logViewerActivateAct)
+        if self.numbersViewer is not None:
+            self.__menus["subwindow"].addAction(self.numbersViewerActivateAct)
+        
         # plug-in provided windows
         self.__menus["subwindow"].addSection(self.tr("Plug-ins"))
         
@@ -4634,19 +4632,17 @@
                 state = self.saveState()
                 self.profiles[self.currentProfile][0] = state
                 if self.__layoutType == "Sidebars":
-                    state = self.leftSplitter.saveState()
+                    state = self.horizontalSplitter.saveState()
                     self.profiles[self.currentProfile][2][0] = state
                     state = self.verticalSplitter.saveState()
                     self.profiles[self.currentProfile][2][1] = state
-                    state = self.rightSplitter.saveState()
-                    self.profiles[self.currentProfile][2][2] = state
                     
                     state = self.leftSidebar.saveState()
+                    self.profiles[self.currentProfile][2][2] = state
+                    state = self.bottomSidebar.saveState()
                     self.profiles[self.currentProfile][2][3] = state
-                    state = self.bottomSidebar.saveState()
+                    state = self.rightSidebar.saveState()
                     self.profiles[self.currentProfile][2][4] = state
-                    state = self.rightSidebar.saveState()
-                    self.profiles[self.currentProfile][2][5] = state
             
             # step 2: save the visibility of the windows of the active profile
             if self.__layoutType == "Toolboxes":
@@ -4691,22 +4687,19 @@
                 if self.__layoutType == "Sidebars":
                     state = self.profiles[name][2][0]
                     if not state.isEmpty():
-                        self.leftSplitter.restoreState(state)
+                        self.horizontalSplitter.restoreState(state)
                     state = self.profiles[name][2][1]
                     if not state.isEmpty():
                         self.verticalSplitter.restoreState(state)
+                    
                     state = self.profiles[name][2][2]
-                    if not state.isEmpty():
-                        self.rightSplitter.restoreState(state)
-                    
+                    if state:
+                        self.leftSidebar.restoreState(state)
                     state = self.profiles[name][2][3]
                     if state:
-                        self.leftSidebar.restoreState(state)
+                        self.bottomSidebar.restoreState(state)
                     state = self.profiles[name][2][4]
                     if state:
-                        self.bottomSidebar.restoreState(state)
-                    state = self.profiles[name][2][5]
-                    if state:
                         self.rightSidebar.restoreState(state)
                 
                 if self.__layoutType == "Toolboxes":

eric ide

mercurial