From c94155fb06450e87f9d7c068997f18ddf00247c0 Mon Sep 17 00:00:00 2001 From: Uwe Kindler Date: Thu, 27 Oct 2022 10:22:28 +0200 Subject: [PATCH] Moved SideBarLocation enum out of CDockWidgetSideTab into global ads namespace --- demo/MainWindow.cpp | 4 +- examples/autohide/mainwindow.cpp | 4 +- src/AutoHideDockContainer.cpp | 56 +++++++++++----------- src/AutoHideDockContainer.h | 8 ++-- src/DockAreaTabBar.cpp | 1 + src/DockAreaTitleBar.cpp | 1 - src/DockAreaWidget.cpp | 1 + src/DockContainerWidget.cpp | 81 ++++++++++++++++---------------- src/DockContainerWidget.h | 7 +-- src/DockManager.cpp | 6 ++- src/DockManager.h | 6 ++- src/DockWidget.cpp | 4 ++ src/DockWidgetSideTab.cpp | 5 +- src/DockWidgetSideTab.h | 18 ++----- src/DockWidgetTab.cpp | 1 + src/FloatingDockContainer.cpp | 1 + src/ResizeHandle.cpp | 2 - src/SideTabBar.cpp | 9 ++-- src/SideTabBar.h | 6 +-- src/ads_globals.h | 14 ++++++ 20 files changed, 125 insertions(+), 110 deletions(-) diff --git a/demo/MainWindow.cpp b/demo/MainWindow.cpp index 285b26c..a474510 100644 --- a/demo/MainWindow.cpp +++ b/demo/MainWindow.cpp @@ -650,7 +650,7 @@ CMainWindow::CMainWindow(QWidget *parent) : // uncomment the following line to enable focus highlighting of the dock // widget that has the focus - CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true); + //CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true); // uncomment if you would like to enable dock widget auto hiding CDockManager::setConfigFlag(CDockManager::DefaultAutoHideConfig, true); @@ -748,7 +748,7 @@ void CMainWindow::onViewToggled(bool Open) return; } - qDebug() << DockWidget->objectName() << " viewToggled(" << Open << ")"; + //qDebug() << DockWidget->objectName() << " viewToggled(" << Open << ")"; } diff --git a/examples/autohide/mainwindow.cpp b/examples/autohide/mainwindow.cpp index acde567..9669268 100644 --- a/examples/autohide/mainwindow.cpp +++ b/examples/autohide/mainwindow.cpp @@ -47,7 +47,7 @@ CMainWindow::CMainWindow(QWidget *parent) TableDockWidget->resize(250, 150); TableDockWidget->setMinimumSize(200,150); TableDockWidget->setDefaultAutoHideDockProportion(0.5); - DockManager->addAutoHideDockWidget(CDockWidgetSideTab::SideTabBarArea::Left, TableDockWidget, CDockWidget::Last); + DockManager->addAutoHideDockWidget(SideBarLocation::Left, TableDockWidget, CDockWidget::Last); ui->menuView->addAction(TableDockWidget->toggleViewAction()); table = new QTableWidget(); @@ -58,7 +58,7 @@ CMainWindow::CMainWindow(QWidget *parent) TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget); TableDockWidget->resize(250, 150); TableDockWidget->setMinimumSize(200,150); - DockManager->addAutoHideDockWidget(CDockWidgetSideTab::SideTabBarArea::Left, TableDockWidget, CDockWidget::Last); + DockManager->addAutoHideDockWidget(SideBarLocation::Left, TableDockWidget, CDockWidget::Last); ui->menuView->addAction(TableDockWidget->toggleViewAction()); QTableWidget* propertiesTable = new QTableWidget(); diff --git a/src/AutoHideDockContainer.cpp b/src/AutoHideDockContainer.cpp index 80698f2..51e00cb 100644 --- a/src/AutoHideDockContainer.cpp +++ b/src/AutoHideDockContainer.cpp @@ -50,14 +50,14 @@ namespace ads static const int ResizeMargin = 4; //============================================================================ -bool static isHorizontalArea(CDockWidgetSideTab::SideTabBarArea Area) +bool static isHorizontalArea(SideBarLocation Area) { switch (Area) { - case CDockWidgetSideTab::Top: - case CDockWidgetSideTab::Bottom: return true; - case CDockWidgetSideTab::Left: - case CDockWidgetSideTab::Right: return false; + case SideBarLocation::Top: + case SideBarLocation::Bottom: return true; + case SideBarLocation::Left: + case SideBarLocation::Right: return false; } return true; @@ -65,14 +65,14 @@ bool static isHorizontalArea(CDockWidgetSideTab::SideTabBarArea Area) //============================================================================ -Qt::Edge static edgeFromSideTabBarArea(CDockWidgetSideTab::SideTabBarArea Area) +Qt::Edge static edgeFromSideTabBarArea(SideBarLocation Area) { switch (Area) { - case CDockWidgetSideTab::Top: return Qt::BottomEdge; - case CDockWidgetSideTab::Bottom: return Qt::TopEdge; - case CDockWidgetSideTab::Left: return Qt::RightEdge; - case CDockWidgetSideTab::Right: return Qt::LeftEdge; + case SideBarLocation::Top: return Qt::BottomEdge; + case SideBarLocation::Bottom: return Qt::TopEdge; + case SideBarLocation::Left: return Qt::RightEdge; + case SideBarLocation::Right: return Qt::LeftEdge; } return Qt::LeftEdge; @@ -80,15 +80,15 @@ Qt::Edge static edgeFromSideTabBarArea(CDockWidgetSideTab::SideTabBarArea Area) //============================================================================ -int resizeHandleLayoutPosition(CDockWidgetSideTab::SideTabBarArea Area) +int resizeHandleLayoutPosition(SideBarLocation Area) { switch (Area) { - case CDockWidgetSideTab::Bottom: - case CDockWidgetSideTab::Right: return 0; + case SideBarLocation::Bottom: + case SideBarLocation::Right: return 0; - case CDockWidgetSideTab::Top: - case CDockWidgetSideTab::Left: return 1; + case SideBarLocation::Top: + case SideBarLocation::Left: return 1; } return 0; @@ -104,7 +104,7 @@ struct AutoHideDockContainerPrivate CDockAreaWidget* DockArea{nullptr}; CDockWidget* DockWidget{nullptr}; QPointer DockManager{nullptr}; - CDockWidgetSideTab::SideTabBarArea SideTabBarArea; + SideBarLocation SideTabBarArea; QBoxLayout* Layout; CResizeHandle* ResizeHandle = nullptr; QSize Size; @@ -117,14 +117,14 @@ struct AutoHideDockContainerPrivate /** * Convenience function to get a dock widget area */ - DockWidgetArea getDockWidgetArea(CDockWidgetSideTab::SideTabBarArea area) + DockWidgetArea getDockWidgetArea(SideBarLocation area) { switch (area) { - case CDockWidgetSideTab::Left: return LeftDockWidgetArea; - case CDockWidgetSideTab::Right: return RightDockWidgetArea; - case CDockWidgetSideTab::Bottom: return BottomDockWidgetArea; - case CDockWidgetSideTab::Top: return TopDockWidgetArea; + case SideBarLocation::Left: return LeftDockWidgetArea; + case SideBarLocation::Right: return RightDockWidgetArea; + case SideBarLocation::Bottom: return BottomDockWidgetArea; + case SideBarLocation::Top: return TopDockWidgetArea; } return LeftDockWidgetArea; @@ -168,7 +168,7 @@ CDockContainerWidget* CAutoHideDockContainer::parentContainer() const //============================================================================ -CAutoHideDockContainer::CAutoHideDockContainer(CDockManager* DockManager, CDockWidgetSideTab::SideTabBarArea area, CDockContainerWidget* parent) : +CAutoHideDockContainer::CAutoHideDockContainer(CDockManager* DockManager, SideBarLocation area, CDockContainerWidget* parent) : Super(parent), d(new AutoHideDockContainerPrivate(this)) { @@ -200,7 +200,7 @@ CAutoHideDockContainer::CAutoHideDockContainer(CDockManager* DockManager, CDockW //============================================================================ -CAutoHideDockContainer::CAutoHideDockContainer(CDockWidget* DockWidget, CDockWidgetSideTab::SideTabBarArea area, CDockContainerWidget* parent) : +CAutoHideDockContainer::CAutoHideDockContainer(CDockWidget* DockWidget, SideBarLocation area, CDockContainerWidget* parent) : CAutoHideDockContainer(DockWidget->dockManager(), area, parent) { addDockWidget(DockWidget); @@ -215,17 +215,17 @@ void CAutoHideDockContainer::updateSize() switch (sideTabBarArea()) { - case CDockWidgetSideTab::Top: + case SideBarLocation::Top: move(rect.topLeft()); resize(rect.width(), qMin(rect.height(), d->Size.height())); break; - case CDockWidgetSideTab::Left: + case SideBarLocation::Left: move(rect.topLeft()); resize(qMin(d->Size.width(), rect.width()), rect.height()); break; - case CDockWidgetSideTab::Right: + case SideBarLocation::Right: { QPoint p = rect.topRight(); p.rx() -= (width() - 1); @@ -234,7 +234,7 @@ void CAutoHideDockContainer::updateSize() } break; - case CDockWidgetSideTab::Bottom: + case SideBarLocation::Bottom: { QPoint p = rect.bottomLeft(); p.ry() -= (height() - 1); @@ -299,7 +299,7 @@ void CAutoHideDockContainer::addDockWidget(CDockWidget* DockWidget) //============================================================================ -CDockWidgetSideTab::SideTabBarArea CAutoHideDockContainer::sideTabBarArea() const +SideBarLocation CAutoHideDockContainer::sideTabBarArea() const { return d->SideTabBarArea; } diff --git a/src/AutoHideDockContainer.h b/src/AutoHideDockContainer.h index 7bd3e92..047290f 100644 --- a/src/AutoHideDockContainer.h +++ b/src/AutoHideDockContainer.h @@ -53,7 +53,7 @@ class CDockingStateReader; class ADS_EXPORT CAutoHideDockContainer : public QFrame { Q_OBJECT - Q_PROPERTY(int sideTabBarArea READ sideTabBarArea) + Q_PROPERTY(ads::SideBarLocation sideTabBarArea READ sideTabBarArea) private: AutoHideDockContainerPrivate* d; ///< private data (pimpl) friend struct AutoHideDockContainerPrivate; @@ -70,12 +70,12 @@ public: /** * Create Auto Hide widget with a dock manager */ - CAutoHideDockContainer(CDockManager* DockManager, CDockWidgetSideTab::SideTabBarArea area, CDockContainerWidget* parent); + CAutoHideDockContainer(CDockManager* DockManager, SideBarLocation area, CDockContainerWidget* parent); /** * Create Auto Hide widget with the given dock widget */ - CAutoHideDockContainer(CDockWidget* DockWidget, CDockWidgetSideTab::SideTabBarArea area, CDockContainerWidget* parent); + CAutoHideDockContainer(CDockWidget* DockWidget, SideBarLocation area, CDockContainerWidget* parent); /** * Virtual Destructor @@ -100,7 +100,7 @@ public: /** * Returns the side tab bar area of this Auto Hide dock container */ - CDockWidgetSideTab::SideTabBarArea sideTabBarArea() const; + SideBarLocation sideTabBarArea() const; /** * Returns the dock area widget of this Auto Hide dock container diff --git a/src/DockAreaTabBar.cpp b/src/DockAreaTabBar.cpp index d06313a..34a37d4 100644 --- a/src/DockAreaTabBar.cpp +++ b/src/DockAreaTabBar.cpp @@ -146,6 +146,7 @@ CDockAreaTabBar::CDockAreaTabBar(CDockAreaWidget* parent) : //============================================================================ CDockAreaTabBar::~CDockAreaTabBar() { + qDebug() << "~CDockAreaTabBar count " << count(); delete d; } diff --git a/src/DockAreaTitleBar.cpp b/src/DockAreaTitleBar.cpp index bc047da..95eae21 100644 --- a/src/DockAreaTitleBar.cpp +++ b/src/DockAreaTitleBar.cpp @@ -493,7 +493,6 @@ void CDockAreaTitleBar::onCurrentTabChanged(int Index) //============================================================================ void CDockAreaTitleBar::onAutoHideButtonClicked() { - qDebug() << "CDockAreaTitleBar::onAutoHideButtonClicked()"; if (d->DockArea->features().testFlag(CDockWidget::DockWidgetPinnable)) { d->DockArea->toggleAutoHideArea(!d->DockArea->isAutoHide()); diff --git a/src/DockAreaWidget.cpp b/src/DockAreaWidget.cpp index 31a4a79..94fa8b8 100644 --- a/src/DockAreaWidget.cpp +++ b/src/DockAreaWidget.cpp @@ -867,6 +867,7 @@ void CDockAreaWidget::saveState(QXmlStreamWriter& s) const auto CurrentDockWidget = currentDockWidget(); QString Name = CurrentDockWidget ? CurrentDockWidget->objectName() : ""; s.writeAttribute("Current", Name); + // To keep the saved XML data small, we only save the allowed areas and the // dock area flags if the values are different from the default values if (isAutoHide()) diff --git a/src/DockContainerWidget.cpp b/src/DockContainerWidget.cpp index 27ac1ce..fad92b8 100644 --- a/src/DockContainerWidget.cpp +++ b/src/DockContainerWidget.cpp @@ -139,7 +139,7 @@ public: unsigned int zOrderIndex = 0; QList DockAreas; QList AutoHideWidgets; - QMap SideTabBarWidgets; + QMap SideTabBarWidgets; QGridLayout* Layout = nullptr; QSplitter* RootSplitter = nullptr; bool isFloating = false; @@ -255,7 +255,7 @@ public: * Assumes that there are no auto hidden dock areas, and then restores all the dock areas that * exist in the XML */ - bool restoreAutoHideDockArea(CDockingStateReader& s, CDockWidgetSideTab::SideTabBarArea area, bool Testing); + bool restoreAutoHideDockArea(CDockingStateReader& s, SideBarLocation area, bool Testing); /** * Restores either a dock area or an auto hide dock area depending on the value in the XML @@ -1033,7 +1033,7 @@ bool DockContainerWidgetPrivate::restoreSplitter(CDockingStateReader& s, } //============================================================================ -bool DockContainerWidgetPrivate::restoreAutoHideDockArea(CDockingStateReader& s, CDockWidgetSideTab::SideTabBarArea area, bool Testing) +bool DockContainerWidgetPrivate::restoreAutoHideDockArea(CDockingStateReader& s, SideBarLocation area, bool Testing) { bool Ok; #ifdef ADS_DEBUG_PRINT @@ -1126,7 +1126,7 @@ bool DockContainerWidgetPrivate::restoreDockOrAutoHideDockArea(CDockingStateRead const auto sideTabAreaValue = Stream.attributes().value("SideTabBarArea"); if (!sideTabAreaValue.isNull()) { - auto sideTabBarArea = static_cast(sideTabAreaValue.toInt(&Ok)); + auto sideTabBarArea = static_cast(sideTabAreaValue.toInt(&Ok)); if (!Ok) { return false; @@ -1500,7 +1500,8 @@ CDockAreaWidget* CDockContainerWidget::addDockWidget(DockWidgetArea area, CDockW //============================================================================ -CAutoHideDockContainer* CDockContainerWidget::createAndInitializeAutoHideDockWidgetContainer(CDockWidgetSideTab::SideTabBarArea area, CDockWidget* DockWidget, CDockWidget::eAutoHideInsertOrder insertOrder) +CAutoHideDockContainer* CDockContainerWidget::createAndInitializeAutoHideDockWidgetContainer( + SideBarLocation area, CDockWidget* DockWidget, CDockWidget::eAutoHideInsertOrder insertOrder) { if (d->DockManager != DockWidget->dockManager()) { @@ -1546,7 +1547,7 @@ enum eBorderLocation //============================================================================ -CDockWidgetSideTab::SideTabBarArea CDockContainerWidget::calculateSideTabBarArea(CDockAreaWidget* DockAreaWidget) +SideBarLocation CDockContainerWidget::calculateSideTabBarArea(CDockAreaWidget* DockAreaWidget) { auto ContentRect = this->contentRect(); @@ -1562,62 +1563,62 @@ CDockWidgetSideTab::SideTabBarArea CDockContainerWidget::calculateSideTabBarArea // measure border distances - a distance less than 16 px means we touch the // border int BorderDistance[4]; + int Distance = qAbs(ContentRect.topLeft().y() - DockAreaRect.topLeft().y()); - BorderDistance[CDockWidgetSideTab::Top] = (Distance < MinBorderDistance) ? 0 : Distance; - if (!BorderDistance[CDockWidgetSideTab::Top]) + BorderDistance[SideBarLocation::Top] = (Distance < MinBorderDistance) ? 0 : Distance; + if (!BorderDistance[SideBarLocation::Top]) { borders |= BorderTop; } - qDebug() << "BorderDistance[CDockWidgetSideTab::Top] " << BorderDistance[CDockWidgetSideTab::Top]; + Distance = qAbs(ContentRect.bottomRight().y() - DockAreaRect.bottomRight().y()); - BorderDistance[CDockWidgetSideTab::Bottom] = (Distance < MinBorderDistance) ? 0 : Distance; - if (!BorderDistance[CDockWidgetSideTab::Bottom]) + BorderDistance[SideBarLocation::Bottom] = (Distance < MinBorderDistance) ? 0 : Distance; + if (!BorderDistance[SideBarLocation::Bottom]) { borders |= BorderBottom; } - qDebug() << "BorderDistance[CDockWidgetSideTab::Bottom] " << BorderDistance[CDockWidgetSideTab::Bottom]; + Distance = qAbs(ContentRect.topLeft().x() - DockAreaRect.topLeft().x()); - BorderDistance[CDockWidgetSideTab::Left] = (Distance < MinBorderDistance) ? 0 : Distance; - if (!BorderDistance[CDockWidgetSideTab::Left]) + BorderDistance[SideBarLocation::Left] = (Distance < MinBorderDistance) ? 0 : Distance; + if (!BorderDistance[SideBarLocation::Left]) { borders |= BorderLeft; } - qDebug() << "BorderDistance[CDockWidgetSideTab::Left] " << BorderDistance[CDockWidgetSideTab::Left]; + Distance = qAbs(ContentRect.bottomRight().x() - DockAreaRect.bottomRight().x()); - BorderDistance[CDockWidgetSideTab::Right] = (Distance < MinBorderDistance) ? 0 : Distance; - if (!BorderDistance[CDockWidgetSideTab::Right]) + BorderDistance[SideBarLocation::Right] = (Distance < MinBorderDistance) ? 0 : Distance; + if (!BorderDistance[SideBarLocation::Right]) { borders |= BorderRight; } - qDebug() << "BorderDistance[CDockWidgetSideTab::Right] " << BorderDistance[CDockWidgetSideTab::Right]; - auto SideTab = CDockWidgetSideTab::Right; + auto SideTab = SideBarLocation::Right; switch (borders) { // 1. It's touching all borders - case BorderAll: SideTab = HorizontalOrientation ? CDockWidgetSideTab::Bottom : CDockWidgetSideTab::Right; break; + case BorderAll: SideTab = HorizontalOrientation ? SideBarLocation::Bottom : SideBarLocation::Right; break; // 2. It's touching 3 borders - case BorderVerticalBottom : SideTab = CDockWidgetSideTab::Bottom; break; - case BorderVerticalTop : SideTab = CDockWidgetSideTab::Top; break; - case BorderHorizontalLeft: SideTab = CDockWidgetSideTab::Left; break; - case BorderHorizontalRight: SideTab = CDockWidgetSideTab::Right; break; + case BorderVerticalBottom : SideTab = SideBarLocation::Bottom; break; + case BorderVerticalTop : SideTab = SideBarLocation::Top; break; + case BorderHorizontalLeft: SideTab = SideBarLocation::Left; break; + case BorderHorizontalRight: SideTab = SideBarLocation::Right; break; // 3. Its touching horizontal or vertical borders - case BorderVertical : SideTab = CDockWidgetSideTab::Bottom; break; - case BorderHorizontal: SideTab = CDockWidgetSideTab::Right; break; + case BorderVertical : SideTab = SideBarLocation::Bottom; break; + case BorderHorizontal: SideTab = SideBarLocation::Right; break; // 4. Its in a corner - case BorderTopLeft : SideTab = HorizontalOrientation ? CDockWidgetSideTab::Top : CDockWidgetSideTab::Left; break; - case BorderTopRight : SideTab = HorizontalOrientation ? CDockWidgetSideTab::Top : CDockWidgetSideTab::Right; break; - case BorderBottomLeft : SideTab = HorizontalOrientation ? CDockWidgetSideTab::Bottom : CDockWidgetSideTab::Left; break; - case BorderBottomRight : SideTab = HorizontalOrientation ? CDockWidgetSideTab::Bottom : CDockWidgetSideTab::Right; break; + case BorderTopLeft : SideTab = HorizontalOrientation ? SideBarLocation::Top : SideBarLocation::Left; break; + case BorderTopRight : SideTab = HorizontalOrientation ? SideBarLocation::Top : SideBarLocation::Right; break; + case BorderBottomLeft : SideTab = HorizontalOrientation ? SideBarLocation::Bottom : SideBarLocation::Left; break; + case BorderBottomRight : SideTab = HorizontalOrientation ? SideBarLocation::Bottom : SideBarLocation::Right; break; // 5 Ists touching only one border - case BorderLeft: SideTab = CDockWidgetSideTab::Left; break; - case BorderRight: SideTab = CDockWidgetSideTab::Right; break; - case BorderTop: SideTab = CDockWidgetSideTab::Top; break; - case BorderBottom: SideTab = CDockWidgetSideTab::Bottom; break; + case BorderLeft: SideTab = SideBarLocation::Left; break; + case BorderRight: SideTab = SideBarLocation::Right; break; + case BorderTop: SideTab = SideBarLocation::Top; break; + case BorderBottom: SideTab = SideBarLocation::Bottom; break; } return SideTab; @@ -2016,7 +2017,7 @@ bool CDockContainerWidget::restoreState(CDockingStateReader& s, bool Testing) bool IsFloating = s.attributes().value("Floating").toInt(); ADS_PRINT("Restore CDockContainerWidget Floating" << IsFloating); - QWidget*NewRootSplitter {}; + QWidget* NewRootSplitter {}; if (!Testing) { d->VisibleDockAreaCount = -1;// invalidate the dock area count @@ -2098,25 +2099,25 @@ void CDockContainerWidget::createRootSplitter() void CDockContainerWidget::createSideTabBarWidgets() { { - auto Area = CDockWidgetSideTab::Left; + auto Area = SideBarLocation::Left; d->SideTabBarWidgets[Area] = new CSideTabBar(this, Area); d->Layout->addWidget(d->SideTabBarWidgets[Area], 1, 0); } { - auto Area = CDockWidgetSideTab::Right; + auto Area = SideBarLocation::Right; d->SideTabBarWidgets[Area] = new CSideTabBar(this, Area); d->Layout->addWidget(d->SideTabBarWidgets[Area], 1, 2); } { - auto Area = CDockWidgetSideTab::Bottom; + auto Area = SideBarLocation::Bottom; d->SideTabBarWidgets[Area] = new CSideTabBar(this, Area); d->Layout->addWidget(d->SideTabBarWidgets[Area], 2, 1); } { - auto Area = CDockWidgetSideTab::Top; + auto Area = SideBarLocation::Top; d->SideTabBarWidgets[Area] = new CSideTabBar(this, Area); d->Layout->addWidget(d->SideTabBarWidgets[Area], 0, 1); } @@ -2267,7 +2268,7 @@ void CDockContainerWidget::closeOtherAreas(CDockAreaWidget* KeepOpenArea) } //============================================================================ -CSideTabBar* CDockContainerWidget::sideTabBar(CDockWidgetSideTab::SideTabBarArea area) const +CSideTabBar* CDockContainerWidget::sideTabBar(SideBarLocation area) const { return d->SideTabBarWidgets[area]; } diff --git a/src/DockContainerWidget.h b/src/DockContainerWidget.h index e33a3a8..0efc75d 100644 --- a/src/DockContainerWidget.h +++ b/src/DockContainerWidget.h @@ -100,7 +100,8 @@ protected: * Initializing inserts the tabs into the side tab widget and hides it * Returns nullptr if you try and insert into an area where the configuration is not enabled */ - CAutoHideDockContainer* createAndInitializeAutoHideDockWidgetContainer(CDockWidgetSideTab::SideTabBarArea area, CDockWidget* DockWidget, CDockWidget::eAutoHideInsertOrder insertOrder); + CAutoHideDockContainer* createAndInitializeAutoHideDockWidgetContainer( + SideBarLocation area, CDockWidget* DockWidget, CDockWidget::eAutoHideInsertOrder insertOrder); /** * Helper function for creation of the root splitter @@ -220,7 +221,7 @@ public: /** * Get's the auto hide dock side tab bar area based on the dock area widget position */ - CDockWidgetSideTab::SideTabBarArea calculateSideTabBarArea(CDockAreaWidget* DockAreaWidget); + SideBarLocation calculateSideTabBarArea(CDockAreaWidget* DockAreaWidget); /** * Removes dockwidget @@ -320,7 +321,7 @@ public: /** * Returns the side tab widget for the given area */ - CSideTabBar* sideTabBar(CDockWidgetSideTab::SideTabBarArea area) const; + CSideTabBar* sideTabBar(SideBarLocation area) const; /** diff --git a/src/DockManager.cpp b/src/DockManager.cpp index d349b1a..d1aed23 100644 --- a/src/DockManager.cpp +++ b/src/DockManager.cpp @@ -867,13 +867,15 @@ CDockAreaWidget* CDockManager::addDockWidgetToContainer(DockWidgetArea area, } //============================================================================ -CAutoHideDockContainer* CDockManager::addAutoHideDockWidget(CDockWidgetSideTab::SideTabBarArea area, CDockWidget* Dockwidget, CDockWidget::eAutoHideInsertOrder insertOrder) +CAutoHideDockContainer* CDockManager::addAutoHideDockWidget(SideBarLocation area, CDockWidget* Dockwidget, + CDockWidget::eAutoHideInsertOrder insertOrder) { return addAutoHideDockWidgetToContainer(area, Dockwidget, this, insertOrder); } //============================================================================ -CAutoHideDockContainer* CDockManager::addAutoHideDockWidgetToContainer(CDockWidgetSideTab::SideTabBarArea area, CDockWidget* Dockwidget, CDockContainerWidget* DockContainerWidget, CDockWidget::eAutoHideInsertOrder insertOrder) +CAutoHideDockContainer* CDockManager::addAutoHideDockWidgetToContainer(SideBarLocation area, CDockWidget* Dockwidget, + CDockContainerWidget* DockContainerWidget, CDockWidget::eAutoHideInsertOrder insertOrder) { d->DockWidgetsMap.insert(Dockwidget->objectName(), Dockwidget); auto container = DockContainerWidget->createAndInitializeAutoHideDockWidgetContainer(area, Dockwidget, insertOrder); diff --git a/src/DockManager.h b/src/DockManager.h index 96840c9..f68367a 100644 --- a/src/DockManager.h +++ b/src/DockManager.h @@ -340,14 +340,16 @@ public: * An overlay widget is used for auto hide functionality * \return Returns the CAutoHideDockContainer that contains the new DockWidget */ - CAutoHideDockContainer* addAutoHideDockWidget(CDockWidgetSideTab::SideTabBarArea area, CDockWidget* Dockwidget, CDockWidget::eAutoHideInsertOrder insertOrder = CDockWidget::Last); + CAutoHideDockContainer* addAutoHideDockWidget(SideBarLocation area, CDockWidget* Dockwidget, + CDockWidget::eAutoHideInsertOrder insertOrder = CDockWidget::Last); /** * Adds dock widget overlayed into the given container based on the CDockWidgetSideTab::SideTabBarArea. * An overlay widget is used for auto hide functionality * \return Returns the CAutoHideDockContainer that contains the new DockWidget */ - CAutoHideDockContainer* addAutoHideDockWidgetToContainer(CDockWidgetSideTab::SideTabBarArea area, CDockWidget* Dockwidget, CDockContainerWidget* DockContainerWidget, CDockWidget::eAutoHideInsertOrder = CDockWidget::Last); + CAutoHideDockContainer* addAutoHideDockWidgetToContainer(SideBarLocation area, + CDockWidget* Dockwidget, CDockContainerWidget* DockContainerWidget, CDockWidget::eAutoHideInsertOrder = CDockWidget::Last); /** * This function will add the given Dockwidget to the given dock area as diff --git a/src/DockWidget.cpp b/src/DockWidget.cpp index 15fb9c4..745a6fe 100644 --- a/src/DockWidget.cpp +++ b/src/DockWidget.cpp @@ -344,6 +344,10 @@ CDockWidget::CDockWidget(const QString &title, QWidget *parent) : CDockWidget::~CDockWidget() { ADS_PRINT("~CDockWidget()"); + if (d->SideTabWidget) + { + delete d->SideTabWidget; + } delete d; } diff --git a/src/DockWidgetSideTab.cpp b/src/DockWidgetSideTab.cpp index 41000e0..e4e6423 100644 --- a/src/DockWidgetSideTab.cpp +++ b/src/DockWidgetSideTab.cpp @@ -98,6 +98,7 @@ CDockWidgetSideTab::CDockWidgetSideTab(CDockWidget* DockWidget, QWidget* parent) //============================================================================ CDockWidgetSideTab::~CDockWidgetSideTab() { + qDebug() << "~CDockWidgetSideTab()"; delete d; } @@ -111,7 +112,7 @@ void CDockWidgetSideTab::updateStyle() //============================================================================ -CDockWidgetSideTab::SideTabBarArea CDockWidgetSideTab::sideTabBarArea() const +SideBarLocation CDockWidgetSideTab::sideTabBarArea() const { auto dockAreaWidget = d->DockWidget->dockAreaWidget(); if (dockAreaWidget && dockAreaWidget->isAutoHide()) @@ -141,7 +142,7 @@ Qt::Orientation CDockWidgetSideTab::orientation() const //============================================================================ -void CDockWidgetSideTab::updateOrientationAndSpacing(SideTabBarArea area) +void CDockWidgetSideTab::updateOrientationAndSpacing(SideBarLocation area) { setOrientation((area == Bottom || area == Top) ? Qt::Horizontal : Qt::Vertical); diff --git a/src/DockWidgetSideTab.h b/src/DockWidgetSideTab.h index 6668ff4..0585bb9 100644 --- a/src/DockWidgetSideTab.h +++ b/src/DockWidgetSideTab.h @@ -50,7 +50,7 @@ class ADS_EXPORT CDockWidgetSideTab : public CPushButton { Q_OBJECT - Q_PROPERTY(SideTabBarArea sideTabBarArea READ sideTabBarArea) + Q_PROPERTY(ads::SideBarLocation sideTabBarArea READ sideTabBarArea) Q_PROPERTY(Qt::Orientation orientation READ orientation) Q_PROPERTY(bool activeTab READ isActiveTab) @@ -71,18 +71,6 @@ protected: public: using Super = CPushButton; - /** - * Dock widget side tab bar locations - */ - enum SideTabBarArea - { - Top, - Left, - Right, - Bottom - }; - Q_ENUM(SideTabBarArea) - /** * Default Constructor * param[in] DockWidget The dock widget this title bar belongs to @@ -103,7 +91,7 @@ public: /** * Getter for side tab bar area property */ - SideTabBarArea sideTabBarArea() const; + SideBarLocation sideTabBarArea() const; /** * Set orientation vertical or horizontal @@ -118,7 +106,7 @@ public: /** * Update the orientation, visibility and spacing based on the area and the config */ - void updateOrientationAndSpacing(SideTabBarArea area); + void updateOrientationAndSpacing(SideBarLocation area); /** * Returns true, if this is the active tab. The tab is active if the auto hide widget is visible diff --git a/src/DockWidgetTab.cpp b/src/DockWidgetTab.cpp index e82ae77..b97cac0 100644 --- a/src/DockWidgetTab.cpp +++ b/src/DockWidgetTab.cpp @@ -352,6 +352,7 @@ CDockWidgetTab::CDockWidgetTab(CDockWidget* DockWidget, QWidget *parent) : //============================================================================ CDockWidgetTab::~CDockWidgetTab() { + qDebug() << "~CDockWidgetTab " << text(); ADS_PRINT("~CDockWidgetTab()"); delete d; } diff --git a/src/FloatingDockContainer.cpp b/src/FloatingDockContainer.cpp index 2152b6b..571c5f1 100644 --- a/src/FloatingDockContainer.cpp +++ b/src/FloatingDockContainer.cpp @@ -721,6 +721,7 @@ CFloatingDockContainer::CFloatingDockContainer(CDockWidget *DockWidget) : //============================================================================ CFloatingDockContainer::~CFloatingDockContainer() { + qDebug() << "~CFloatingDockContainer " << windowTitle(); ADS_PRINT("~CFloatingDockContainer"); if (d->DockManager) { diff --git a/src/ResizeHandle.cpp b/src/ResizeHandle.cpp index a29e60c..84f02d2 100644 --- a/src/ResizeHandle.cpp +++ b/src/ResizeHandle.cpp @@ -297,7 +297,6 @@ bool CResizeHandle::isResizing() const //============================================================================ void CResizeHandle::setMinResizeSize(int MinSize) { - qDebug() << "CResizeHandle::setMinResizeSize " << MinSize; d->MinSize = MinSize; } @@ -305,7 +304,6 @@ void CResizeHandle::setMinResizeSize(int MinSize) //============================================================================ void CResizeHandle::setMaxResizeSize(int MaxSize) { - qDebug() << "CResizeHandle::setMaxResizeSize " << MaxSize; d->MaxSize = MaxSize; } diff --git a/src/SideTabBar.cpp b/src/SideTabBar.cpp index 38d4dc1..610e40b 100644 --- a/src/SideTabBar.cpp +++ b/src/SideTabBar.cpp @@ -54,7 +54,7 @@ struct SideTabBarPrivate CDockContainerWidget* ContainerWidget; QBoxLayout* TabsLayout; Qt::Orientation Orientation; - CDockWidgetSideTab::SideTabBarArea SideTabArea = CDockWidgetSideTab::Left; + SideBarLocation SideTabArea = SideBarLocation::Left; /** * Convenience function to check if this is a horizontal side bar @@ -73,13 +73,13 @@ SideTabBarPrivate::SideTabBarPrivate(CSideTabBar* _public) : //============================================================================ -CSideTabBar::CSideTabBar(CDockContainerWidget* parent, CDockWidgetSideTab::SideTabBarArea area) : +CSideTabBar::CSideTabBar(CDockContainerWidget* parent, SideBarLocation area) : Super(parent), d(new SideTabBarPrivate(this)) { d->SideTabArea = area; d->ContainerWidget = parent; - d->Orientation = (area == CDockWidgetSideTab::Bottom || area == CDockWidgetSideTab::Top) + d->Orientation = (area == SideBarLocation::Bottom || area == SideBarLocation::Top) ? Qt::Horizontal : Qt::Vertical; auto mainLayout = new QBoxLayout(d->Orientation == Qt::Vertical ? QBoxLayout::TopToBottom : QBoxLayout::LeftToRight); @@ -126,6 +126,7 @@ void CSideTabBar::insertSideTab(int Index, CDockWidgetSideTab* SideTab) //============================================================================ void CSideTabBar::removeSideTab(CDockWidgetSideTab* SideTab) { + qDebug() << "CSideTabBar::removeSideTab " << SideTab->text(); d->TabsLayout->removeWidget(SideTab); if (d->TabsLayout->isEmpty()) { @@ -168,7 +169,7 @@ int CSideTabBar::tabCount() const //============================================================================ -CDockWidgetSideTab::SideTabBarArea CSideTabBar::sideTabBarArea() const +SideBarLocation CSideTabBar::sideTabBarArea() const { return d->SideTabArea; } diff --git a/src/SideTabBar.h b/src/SideTabBar.h index 82fea12..f3baa8f 100644 --- a/src/SideTabBar.h +++ b/src/SideTabBar.h @@ -45,7 +45,7 @@ class CDockWidgetSideTab; class ADS_EXPORT CSideTabBar : public QFrame { Q_OBJECT - Q_PROPERTY(int sideTabBarArea READ sideTabBarArea) + Q_PROPERTY(ads::SideBarLocation sideTabBarArea READ sideTabBarArea) Q_PROPERTY(Qt::Orientation orientation READ orientation) private: @@ -62,7 +62,7 @@ public: /** * Default Constructor */ - CSideTabBar(CDockContainerWidget* parent, CDockWidgetSideTab::SideTabBarArea area); + CSideTabBar(CDockContainerWidget* parent, SideBarLocation area); /** * Virtual Destructor @@ -97,7 +97,7 @@ public: /** * Getter for side tab bar area property */ - CDockWidgetSideTab::SideTabBarArea sideTabBarArea() const; + SideBarLocation sideTabBarArea() const; Q_SIGNALS: void sideTabAutoHideToggleRequested(); diff --git a/src/ads_globals.h b/src/ads_globals.h index d8021b8..006ccb7 100644 --- a/src/ads_globals.h +++ b/src/ads_globals.h @@ -69,6 +69,7 @@ QT_FORWARD_DECLARE_CLASS(QSplitter) namespace ads { +Q_NAMESPACE class CDockSplitter; enum DockWidgetArea @@ -130,6 +131,19 @@ enum eBitwiseOperator }; +/** + * Each dock container supports 4 sidbars + */ +enum SideBarLocation +{ + Top, + Left, + Right, + Bottom +}; +Q_ENUMS(SideBarLocation); + + namespace internal { static const bool RestoreTesting = true;