Tue, 26 Oct 2021 17:00:21 +0200
Some optimizations for the sidebars layout.
--- 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":