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(); };