From 4d3328e468edb25189aa0c8f7ada46ea29e2f059 Mon Sep 17 00:00:00 2001 From: Syarif Fakhri Date: Wed, 14 Sep 2022 17:39:57 +0800 Subject: [PATCH] Fix side tab widget ordering Now is fixed based on the side tab widget --- src/DockContainerWidget.cpp | 19 ++++++++++++------- src/DockWidgetSideTab.cpp | 7 +++++++ src/DockWidgetSideTab.h | 6 ++++++ src/SideTabBar.cpp | 14 ++++++++++++++ src/SideTabBar.h | 10 ++++++++++ 5 files changed, 49 insertions(+), 7 deletions(-) diff --git a/src/DockContainerWidget.cpp b/src/DockContainerWidget.cpp index dbb9a66..32de115 100644 --- a/src/DockContainerWidget.cpp +++ b/src/DockContainerWidget.cpp @@ -899,14 +899,19 @@ void DockContainerWidgetPrivate::saveChildNodesState(QXmlStreamWriter& s, QWidge void DockContainerWidgetPrivate::saveOverlayWidgetsState(QXmlStreamWriter& Stream) { - for (const auto dockAreaWidget : _this->findChildren()) + for (const auto sideTabBar : SideTabBarWidgets.values()) { - if (!dockAreaWidget->isOverlayed()) - { - continue; - } + for (auto itemIndex = 0; itemIndex < sideTabBar->tabCount(); itemIndex++) + { + const auto sideTab = sideTabBar->tabAt(itemIndex); + if (sideTab == nullptr) + { + continue; + } - dockAreaWidget->saveState(Stream); + const auto dockArea = sideTab->dockWidget()->dockAreaWidget(); + dockArea->saveState(Stream); + } } } @@ -1096,7 +1101,7 @@ bool DockContainerWidgetPrivate::restoreOverlayDockArea(CDockingStateReader& s, DockWidget->setClosedState(Closed); DockWidget->setProperty(internal::ClosedProperty, Closed); DockWidget->setProperty(internal::DirtyProperty, false); - _this->sideTabBar(area)->insertSideTab(0, DockWidget->sideTabWidget()); + _this->sideTabBar(area)->insertSideTab(-1, DockWidget->sideTabWidget()); DockArea->overlayDockContainer()->addDockWidget(DockWidget); DockWidget->sideTabWidget()->updateStyle(); // Needed as the side tab widget get it's left/right property from the overlay dock container which was just added DockArea->overlayDockContainer()->toggleView(!Closed); diff --git a/src/DockWidgetSideTab.cpp b/src/DockWidgetSideTab.cpp index 4c07dea..d65c172 100644 --- a/src/DockWidgetSideTab.cpp +++ b/src/DockWidgetSideTab.cpp @@ -314,6 +314,13 @@ void CDockWidgetSideTab::updateOrientationAndSpacing(SideTabBarArea area) d->TitleLabel->show(); } + +//============================================================================ +CDockWidget* CDockWidgetSideTab::dockWidget() const +{ + return d->DockWidget; +} + /** * Private data class of SideTabIcon class (pimpl) */ diff --git a/src/DockWidgetSideTab.h b/src/DockWidgetSideTab.h index edda9be..73fc4c1 100644 --- a/src/DockWidgetSideTab.h +++ b/src/DockWidgetSideTab.h @@ -136,6 +136,12 @@ public: */ void updateOrientationAndSpacing(SideTabBarArea area); + + /** + * returns the dock widget this belongs to + */ + CDockWidget* dockWidget() const; + Q_SIGNALS: void elidedChanged(bool elided); void clicked(); diff --git a/src/SideTabBar.cpp b/src/SideTabBar.cpp index bbc1b5b..a6fb4de 100644 --- a/src/SideTabBar.cpp +++ b/src/SideTabBar.cpp @@ -123,4 +123,18 @@ Qt::Orientation CSideTabBar::orientation() const { return d->Orientation; } + + +//============================================================================ +CDockWidgetSideTab* CSideTabBar::tabAt(int index) const +{ + return qobject_cast(d->TabsLayout->itemAt(index)->widget()); +} + + +//============================================================================ +int CSideTabBar::tabCount() const +{ + return d->TabsLayout->count(); +} } diff --git a/src/SideTabBar.h b/src/SideTabBar.h index 9575d53..47d0d49 100644 --- a/src/SideTabBar.h +++ b/src/SideTabBar.h @@ -84,6 +84,16 @@ public: */ Qt::Orientation orientation() const; + /* + * get the side tab widget at position, returns nullptr if it's out of bounds + */ + CDockWidgetSideTab* tabAt(int index) const; + + /* + * Gets the count of the tab widgets + */ + int tabCount() const; + Q_SIGNALS: void sideTabAutoHideToggleRequested(); };