1
0
mirror of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git synced 2025-03-16 02:59:51 +08:00

Moved SideBarLocation enum out of CDockWidgetSideTab into global ads namespace

This commit is contained in:
Uwe Kindler 2022-10-27 10:22:28 +02:00
parent 822ad48152
commit c94155fb06
20 changed files with 125 additions and 110 deletions

View File

@ -650,7 +650,7 @@ CMainWindow::CMainWindow(QWidget *parent) :
// uncomment the following line to enable focus highlighting of the dock // uncomment the following line to enable focus highlighting of the dock
// widget that has the focus // 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 // uncomment if you would like to enable dock widget auto hiding
CDockManager::setConfigFlag(CDockManager::DefaultAutoHideConfig, true); CDockManager::setConfigFlag(CDockManager::DefaultAutoHideConfig, true);
@ -748,7 +748,7 @@ void CMainWindow::onViewToggled(bool Open)
return; return;
} }
qDebug() << DockWidget->objectName() << " viewToggled(" << Open << ")"; //qDebug() << DockWidget->objectName() << " viewToggled(" << Open << ")";
} }

View File

@ -47,7 +47,7 @@ CMainWindow::CMainWindow(QWidget *parent)
TableDockWidget->resize(250, 150); TableDockWidget->resize(250, 150);
TableDockWidget->setMinimumSize(200,150); TableDockWidget->setMinimumSize(200,150);
TableDockWidget->setDefaultAutoHideDockProportion(0.5); TableDockWidget->setDefaultAutoHideDockProportion(0.5);
DockManager->addAutoHideDockWidget(CDockWidgetSideTab::SideTabBarArea::Left, TableDockWidget, CDockWidget::Last); DockManager->addAutoHideDockWidget(SideBarLocation::Left, TableDockWidget, CDockWidget::Last);
ui->menuView->addAction(TableDockWidget->toggleViewAction()); ui->menuView->addAction(TableDockWidget->toggleViewAction());
table = new QTableWidget(); table = new QTableWidget();
@ -58,7 +58,7 @@ CMainWindow::CMainWindow(QWidget *parent)
TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget); TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
TableDockWidget->resize(250, 150); TableDockWidget->resize(250, 150);
TableDockWidget->setMinimumSize(200,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()); ui->menuView->addAction(TableDockWidget->toggleViewAction());
QTableWidget* propertiesTable = new QTableWidget(); QTableWidget* propertiesTable = new QTableWidget();

View File

@ -50,14 +50,14 @@ namespace ads
static const int ResizeMargin = 4; static const int ResizeMargin = 4;
//============================================================================ //============================================================================
bool static isHorizontalArea(CDockWidgetSideTab::SideTabBarArea Area) bool static isHorizontalArea(SideBarLocation Area)
{ {
switch (Area) switch (Area)
{ {
case CDockWidgetSideTab::Top: case SideBarLocation::Top:
case CDockWidgetSideTab::Bottom: return true; case SideBarLocation::Bottom: return true;
case CDockWidgetSideTab::Left: case SideBarLocation::Left:
case CDockWidgetSideTab::Right: return false; case SideBarLocation::Right: return false;
} }
return true; 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) switch (Area)
{ {
case CDockWidgetSideTab::Top: return Qt::BottomEdge; case SideBarLocation::Top: return Qt::BottomEdge;
case CDockWidgetSideTab::Bottom: return Qt::TopEdge; case SideBarLocation::Bottom: return Qt::TopEdge;
case CDockWidgetSideTab::Left: return Qt::RightEdge; case SideBarLocation::Left: return Qt::RightEdge;
case CDockWidgetSideTab::Right: return Qt::LeftEdge; case SideBarLocation::Right: return Qt::LeftEdge;
} }
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) switch (Area)
{ {
case CDockWidgetSideTab::Bottom: case SideBarLocation::Bottom:
case CDockWidgetSideTab::Right: return 0; case SideBarLocation::Right: return 0;
case CDockWidgetSideTab::Top: case SideBarLocation::Top:
case CDockWidgetSideTab::Left: return 1; case SideBarLocation::Left: return 1;
} }
return 0; return 0;
@ -104,7 +104,7 @@ struct AutoHideDockContainerPrivate
CDockAreaWidget* DockArea{nullptr}; CDockAreaWidget* DockArea{nullptr};
CDockWidget* DockWidget{nullptr}; CDockWidget* DockWidget{nullptr};
QPointer<CDockManager> DockManager{nullptr}; QPointer<CDockManager> DockManager{nullptr};
CDockWidgetSideTab::SideTabBarArea SideTabBarArea; SideBarLocation SideTabBarArea;
QBoxLayout* Layout; QBoxLayout* Layout;
CResizeHandle* ResizeHandle = nullptr; CResizeHandle* ResizeHandle = nullptr;
QSize Size; QSize Size;
@ -117,14 +117,14 @@ struct AutoHideDockContainerPrivate
/** /**
* Convenience function to get a dock widget area * Convenience function to get a dock widget area
*/ */
DockWidgetArea getDockWidgetArea(CDockWidgetSideTab::SideTabBarArea area) DockWidgetArea getDockWidgetArea(SideBarLocation area)
{ {
switch (area) switch (area)
{ {
case CDockWidgetSideTab::Left: return LeftDockWidgetArea; case SideBarLocation::Left: return LeftDockWidgetArea;
case CDockWidgetSideTab::Right: return RightDockWidgetArea; case SideBarLocation::Right: return RightDockWidgetArea;
case CDockWidgetSideTab::Bottom: return BottomDockWidgetArea; case SideBarLocation::Bottom: return BottomDockWidgetArea;
case CDockWidgetSideTab::Top: return TopDockWidgetArea; case SideBarLocation::Top: return TopDockWidgetArea;
} }
return LeftDockWidgetArea; 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), Super(parent),
d(new AutoHideDockContainerPrivate(this)) 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) CAutoHideDockContainer(DockWidget->dockManager(), area, parent)
{ {
addDockWidget(DockWidget); addDockWidget(DockWidget);
@ -215,17 +215,17 @@ void CAutoHideDockContainer::updateSize()
switch (sideTabBarArea()) switch (sideTabBarArea())
{ {
case CDockWidgetSideTab::Top: case SideBarLocation::Top:
move(rect.topLeft()); move(rect.topLeft());
resize(rect.width(), qMin(rect.height(), d->Size.height())); resize(rect.width(), qMin(rect.height(), d->Size.height()));
break; break;
case CDockWidgetSideTab::Left: case SideBarLocation::Left:
move(rect.topLeft()); move(rect.topLeft());
resize(qMin(d->Size.width(), rect.width()), rect.height()); resize(qMin(d->Size.width(), rect.width()), rect.height());
break; break;
case CDockWidgetSideTab::Right: case SideBarLocation::Right:
{ {
QPoint p = rect.topRight(); QPoint p = rect.topRight();
p.rx() -= (width() - 1); p.rx() -= (width() - 1);
@ -234,7 +234,7 @@ void CAutoHideDockContainer::updateSize()
} }
break; break;
case CDockWidgetSideTab::Bottom: case SideBarLocation::Bottom:
{ {
QPoint p = rect.bottomLeft(); QPoint p = rect.bottomLeft();
p.ry() -= (height() - 1); 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; return d->SideTabBarArea;
} }

View File

@ -53,7 +53,7 @@ class CDockingStateReader;
class ADS_EXPORT CAutoHideDockContainer : public QFrame class ADS_EXPORT CAutoHideDockContainer : public QFrame
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(int sideTabBarArea READ sideTabBarArea) Q_PROPERTY(ads::SideBarLocation sideTabBarArea READ sideTabBarArea)
private: private:
AutoHideDockContainerPrivate* d; ///< private data (pimpl) AutoHideDockContainerPrivate* d; ///< private data (pimpl)
friend struct AutoHideDockContainerPrivate; friend struct AutoHideDockContainerPrivate;
@ -70,12 +70,12 @@ public:
/** /**
* Create Auto Hide widget with a dock manager * 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 * 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 * Virtual Destructor
@ -100,7 +100,7 @@ public:
/** /**
* Returns the side tab bar area of this Auto Hide dock container * 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 * Returns the dock area widget of this Auto Hide dock container

View File

@ -146,6 +146,7 @@ CDockAreaTabBar::CDockAreaTabBar(CDockAreaWidget* parent) :
//============================================================================ //============================================================================
CDockAreaTabBar::~CDockAreaTabBar() CDockAreaTabBar::~CDockAreaTabBar()
{ {
qDebug() << "~CDockAreaTabBar count " << count();
delete d; delete d;
} }

View File

@ -493,7 +493,6 @@ void CDockAreaTitleBar::onCurrentTabChanged(int Index)
//============================================================================ //============================================================================
void CDockAreaTitleBar::onAutoHideButtonClicked() void CDockAreaTitleBar::onAutoHideButtonClicked()
{ {
qDebug() << "CDockAreaTitleBar::onAutoHideButtonClicked()";
if (d->DockArea->features().testFlag(CDockWidget::DockWidgetPinnable)) if (d->DockArea->features().testFlag(CDockWidget::DockWidgetPinnable))
{ {
d->DockArea->toggleAutoHideArea(!d->DockArea->isAutoHide()); d->DockArea->toggleAutoHideArea(!d->DockArea->isAutoHide());

View File

@ -867,6 +867,7 @@ void CDockAreaWidget::saveState(QXmlStreamWriter& s) const
auto CurrentDockWidget = currentDockWidget(); auto CurrentDockWidget = currentDockWidget();
QString Name = CurrentDockWidget ? CurrentDockWidget->objectName() : ""; QString Name = CurrentDockWidget ? CurrentDockWidget->objectName() : "";
s.writeAttribute("Current", Name); s.writeAttribute("Current", Name);
// To keep the saved XML data small, we only save the allowed areas and the // 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 // dock area flags if the values are different from the default values
if (isAutoHide()) if (isAutoHide())

View File

@ -139,7 +139,7 @@ public:
unsigned int zOrderIndex = 0; unsigned int zOrderIndex = 0;
QList<CDockAreaWidget*> DockAreas; QList<CDockAreaWidget*> DockAreas;
QList<CAutoHideDockContainer*> AutoHideWidgets; QList<CAutoHideDockContainer*> AutoHideWidgets;
QMap<CDockWidgetSideTab::SideTabBarArea, CSideTabBar*> SideTabBarWidgets; QMap<SideBarLocation, CSideTabBar*> SideTabBarWidgets;
QGridLayout* Layout = nullptr; QGridLayout* Layout = nullptr;
QSplitter* RootSplitter = nullptr; QSplitter* RootSplitter = nullptr;
bool isFloating = false; 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 * Assumes that there are no auto hidden dock areas, and then restores all the dock areas that
* exist in the XML * 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 * 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; bool Ok;
#ifdef ADS_DEBUG_PRINT #ifdef ADS_DEBUG_PRINT
@ -1126,7 +1126,7 @@ bool DockContainerWidgetPrivate::restoreDockOrAutoHideDockArea(CDockingStateRead
const auto sideTabAreaValue = Stream.attributes().value("SideTabBarArea"); const auto sideTabAreaValue = Stream.attributes().value("SideTabBarArea");
if (!sideTabAreaValue.isNull()) if (!sideTabAreaValue.isNull())
{ {
auto sideTabBarArea = static_cast<CDockWidgetSideTab::SideTabBarArea>(sideTabAreaValue.toInt(&Ok)); auto sideTabBarArea = static_cast<SideBarLocation>(sideTabAreaValue.toInt(&Ok));
if (!Ok) if (!Ok)
{ {
return false; 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()) 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(); 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 // measure border distances - a distance less than 16 px means we touch the
// border // border
int BorderDistance[4]; int BorderDistance[4];
int Distance = qAbs(ContentRect.topLeft().y() - DockAreaRect.topLeft().y()); int Distance = qAbs(ContentRect.topLeft().y() - DockAreaRect.topLeft().y());
BorderDistance[CDockWidgetSideTab::Top] = (Distance < MinBorderDistance) ? 0 : Distance; BorderDistance[SideBarLocation::Top] = (Distance < MinBorderDistance) ? 0 : Distance;
if (!BorderDistance[CDockWidgetSideTab::Top]) if (!BorderDistance[SideBarLocation::Top])
{ {
borders |= BorderTop; borders |= BorderTop;
} }
qDebug() << "BorderDistance[CDockWidgetSideTab::Top] " << BorderDistance[CDockWidgetSideTab::Top];
Distance = qAbs(ContentRect.bottomRight().y() - DockAreaRect.bottomRight().y()); Distance = qAbs(ContentRect.bottomRight().y() - DockAreaRect.bottomRight().y());
BorderDistance[CDockWidgetSideTab::Bottom] = (Distance < MinBorderDistance) ? 0 : Distance; BorderDistance[SideBarLocation::Bottom] = (Distance < MinBorderDistance) ? 0 : Distance;
if (!BorderDistance[CDockWidgetSideTab::Bottom]) if (!BorderDistance[SideBarLocation::Bottom])
{ {
borders |= BorderBottom; borders |= BorderBottom;
} }
qDebug() << "BorderDistance[CDockWidgetSideTab::Bottom] " << BorderDistance[CDockWidgetSideTab::Bottom];
Distance = qAbs(ContentRect.topLeft().x() - DockAreaRect.topLeft().x()); Distance = qAbs(ContentRect.topLeft().x() - DockAreaRect.topLeft().x());
BorderDistance[CDockWidgetSideTab::Left] = (Distance < MinBorderDistance) ? 0 : Distance; BorderDistance[SideBarLocation::Left] = (Distance < MinBorderDistance) ? 0 : Distance;
if (!BorderDistance[CDockWidgetSideTab::Left]) if (!BorderDistance[SideBarLocation::Left])
{ {
borders |= BorderLeft; borders |= BorderLeft;
} }
qDebug() << "BorderDistance[CDockWidgetSideTab::Left] " << BorderDistance[CDockWidgetSideTab::Left];
Distance = qAbs(ContentRect.bottomRight().x() - DockAreaRect.bottomRight().x()); Distance = qAbs(ContentRect.bottomRight().x() - DockAreaRect.bottomRight().x());
BorderDistance[CDockWidgetSideTab::Right] = (Distance < MinBorderDistance) ? 0 : Distance; BorderDistance[SideBarLocation::Right] = (Distance < MinBorderDistance) ? 0 : Distance;
if (!BorderDistance[CDockWidgetSideTab::Right]) if (!BorderDistance[SideBarLocation::Right])
{ {
borders |= BorderRight; borders |= BorderRight;
} }
qDebug() << "BorderDistance[CDockWidgetSideTab::Right] " << BorderDistance[CDockWidgetSideTab::Right];
auto SideTab = CDockWidgetSideTab::Right; auto SideTab = SideBarLocation::Right;
switch (borders) switch (borders)
{ {
// 1. It's touching all 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 // 2. It's touching 3 borders
case BorderVerticalBottom : SideTab = CDockWidgetSideTab::Bottom; break; case BorderVerticalBottom : SideTab = SideBarLocation::Bottom; break;
case BorderVerticalTop : SideTab = CDockWidgetSideTab::Top; break; case BorderVerticalTop : SideTab = SideBarLocation::Top; break;
case BorderHorizontalLeft: SideTab = CDockWidgetSideTab::Left; break; case BorderHorizontalLeft: SideTab = SideBarLocation::Left; break;
case BorderHorizontalRight: SideTab = CDockWidgetSideTab::Right; break; case BorderHorizontalRight: SideTab = SideBarLocation::Right; break;
// 3. Its touching horizontal or vertical borders // 3. Its touching horizontal or vertical borders
case BorderVertical : SideTab = CDockWidgetSideTab::Bottom; break; case BorderVertical : SideTab = SideBarLocation::Bottom; break;
case BorderHorizontal: SideTab = CDockWidgetSideTab::Right; break; case BorderHorizontal: SideTab = SideBarLocation::Right; break;
// 4. Its in a corner // 4. Its in a corner
case BorderTopLeft : SideTab = HorizontalOrientation ? CDockWidgetSideTab::Top : CDockWidgetSideTab::Left; break; case BorderTopLeft : SideTab = HorizontalOrientation ? SideBarLocation::Top : SideBarLocation::Left; break;
case BorderTopRight : SideTab = HorizontalOrientation ? CDockWidgetSideTab::Top : CDockWidgetSideTab::Right; break; case BorderTopRight : SideTab = HorizontalOrientation ? SideBarLocation::Top : SideBarLocation::Right; break;
case BorderBottomLeft : SideTab = HorizontalOrientation ? CDockWidgetSideTab::Bottom : CDockWidgetSideTab::Left; break; case BorderBottomLeft : SideTab = HorizontalOrientation ? SideBarLocation::Bottom : SideBarLocation::Left; break;
case BorderBottomRight : SideTab = HorizontalOrientation ? CDockWidgetSideTab::Bottom : CDockWidgetSideTab::Right; break; case BorderBottomRight : SideTab = HorizontalOrientation ? SideBarLocation::Bottom : SideBarLocation::Right; break;
// 5 Ists touching only one border // 5 Ists touching only one border
case BorderLeft: SideTab = CDockWidgetSideTab::Left; break; case BorderLeft: SideTab = SideBarLocation::Left; break;
case BorderRight: SideTab = CDockWidgetSideTab::Right; break; case BorderRight: SideTab = SideBarLocation::Right; break;
case BorderTop: SideTab = CDockWidgetSideTab::Top; break; case BorderTop: SideTab = SideBarLocation::Top; break;
case BorderBottom: SideTab = CDockWidgetSideTab::Bottom; break; case BorderBottom: SideTab = SideBarLocation::Bottom; break;
} }
return SideTab; return SideTab;
@ -2016,7 +2017,7 @@ bool CDockContainerWidget::restoreState(CDockingStateReader& s, bool Testing)
bool IsFloating = s.attributes().value("Floating").toInt(); bool IsFloating = s.attributes().value("Floating").toInt();
ADS_PRINT("Restore CDockContainerWidget Floating" << IsFloating); ADS_PRINT("Restore CDockContainerWidget Floating" << IsFloating);
QWidget*NewRootSplitter {}; QWidget* NewRootSplitter {};
if (!Testing) if (!Testing)
{ {
d->VisibleDockAreaCount = -1;// invalidate the dock area count d->VisibleDockAreaCount = -1;// invalidate the dock area count
@ -2098,25 +2099,25 @@ void CDockContainerWidget::createRootSplitter()
void CDockContainerWidget::createSideTabBarWidgets() void CDockContainerWidget::createSideTabBarWidgets()
{ {
{ {
auto Area = CDockWidgetSideTab::Left; auto Area = SideBarLocation::Left;
d->SideTabBarWidgets[Area] = new CSideTabBar(this, Area); d->SideTabBarWidgets[Area] = new CSideTabBar(this, Area);
d->Layout->addWidget(d->SideTabBarWidgets[Area], 1, 0); d->Layout->addWidget(d->SideTabBarWidgets[Area], 1, 0);
} }
{ {
auto Area = CDockWidgetSideTab::Right; auto Area = SideBarLocation::Right;
d->SideTabBarWidgets[Area] = new CSideTabBar(this, Area); d->SideTabBarWidgets[Area] = new CSideTabBar(this, Area);
d->Layout->addWidget(d->SideTabBarWidgets[Area], 1, 2); d->Layout->addWidget(d->SideTabBarWidgets[Area], 1, 2);
} }
{ {
auto Area = CDockWidgetSideTab::Bottom; auto Area = SideBarLocation::Bottom;
d->SideTabBarWidgets[Area] = new CSideTabBar(this, Area); d->SideTabBarWidgets[Area] = new CSideTabBar(this, Area);
d->Layout->addWidget(d->SideTabBarWidgets[Area], 2, 1); d->Layout->addWidget(d->SideTabBarWidgets[Area], 2, 1);
} }
{ {
auto Area = CDockWidgetSideTab::Top; auto Area = SideBarLocation::Top;
d->SideTabBarWidgets[Area] = new CSideTabBar(this, Area); d->SideTabBarWidgets[Area] = new CSideTabBar(this, Area);
d->Layout->addWidget(d->SideTabBarWidgets[Area], 0, 1); 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]; return d->SideTabBarWidgets[area];
} }

View File

@ -100,7 +100,8 @@ protected:
* Initializing inserts the tabs into the side tab widget and hides it * 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 * 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 * 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 * 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 * Removes dockwidget
@ -320,7 +321,7 @@ public:
/** /**
* Returns the side tab widget for the given area * Returns the side tab widget for the given area
*/ */
CSideTabBar* sideTabBar(CDockWidgetSideTab::SideTabBarArea area) const; CSideTabBar* sideTabBar(SideBarLocation area) const;
/** /**

View File

@ -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); 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); d->DockWidgetsMap.insert(Dockwidget->objectName(), Dockwidget);
auto container = DockContainerWidget->createAndInitializeAutoHideDockWidgetContainer(area, Dockwidget, insertOrder); auto container = DockContainerWidget->createAndInitializeAutoHideDockWidgetContainer(area, Dockwidget, insertOrder);

View File

@ -340,14 +340,16 @@ public:
* An overlay widget is used for auto hide functionality * An overlay widget is used for auto hide functionality
* \return Returns the CAutoHideDockContainer that contains the new DockWidget * \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. * Adds dock widget overlayed into the given container based on the CDockWidgetSideTab::SideTabBarArea.
* An overlay widget is used for auto hide functionality * An overlay widget is used for auto hide functionality
* \return Returns the CAutoHideDockContainer that contains the new DockWidget * \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 * This function will add the given Dockwidget to the given dock area as

View File

@ -344,6 +344,10 @@ CDockWidget::CDockWidget(const QString &title, QWidget *parent) :
CDockWidget::~CDockWidget() CDockWidget::~CDockWidget()
{ {
ADS_PRINT("~CDockWidget()"); ADS_PRINT("~CDockWidget()");
if (d->SideTabWidget)
{
delete d->SideTabWidget;
}
delete d; delete d;
} }

View File

@ -98,6 +98,7 @@ CDockWidgetSideTab::CDockWidgetSideTab(CDockWidget* DockWidget, QWidget* parent)
//============================================================================ //============================================================================
CDockWidgetSideTab::~CDockWidgetSideTab() CDockWidgetSideTab::~CDockWidgetSideTab()
{ {
qDebug() << "~CDockWidgetSideTab()";
delete d; delete d;
} }
@ -111,7 +112,7 @@ void CDockWidgetSideTab::updateStyle()
//============================================================================ //============================================================================
CDockWidgetSideTab::SideTabBarArea CDockWidgetSideTab::sideTabBarArea() const SideBarLocation CDockWidgetSideTab::sideTabBarArea() const
{ {
auto dockAreaWidget = d->DockWidget->dockAreaWidget(); auto dockAreaWidget = d->DockWidget->dockAreaWidget();
if (dockAreaWidget && dockAreaWidget->isAutoHide()) 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); setOrientation((area == Bottom || area == Top) ? Qt::Horizontal : Qt::Vertical);

View File

@ -50,7 +50,7 @@ class ADS_EXPORT CDockWidgetSideTab : public CPushButton
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(SideTabBarArea sideTabBarArea READ sideTabBarArea) Q_PROPERTY(ads::SideBarLocation sideTabBarArea READ sideTabBarArea)
Q_PROPERTY(Qt::Orientation orientation READ orientation) Q_PROPERTY(Qt::Orientation orientation READ orientation)
Q_PROPERTY(bool activeTab READ isActiveTab) Q_PROPERTY(bool activeTab READ isActiveTab)
@ -71,18 +71,6 @@ protected:
public: public:
using Super = CPushButton; using Super = CPushButton;
/**
* Dock widget side tab bar locations
*/
enum SideTabBarArea
{
Top,
Left,
Right,
Bottom
};
Q_ENUM(SideTabBarArea)
/** /**
* Default Constructor * Default Constructor
* param[in] DockWidget The dock widget this title bar belongs to * param[in] DockWidget The dock widget this title bar belongs to
@ -103,7 +91,7 @@ public:
/** /**
* Getter for side tab bar area property * Getter for side tab bar area property
*/ */
SideTabBarArea sideTabBarArea() const; SideBarLocation sideTabBarArea() const;
/** /**
* Set orientation vertical or horizontal * Set orientation vertical or horizontal
@ -118,7 +106,7 @@ public:
/** /**
* Update the orientation, visibility and spacing based on the area and the config * 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 * Returns true, if this is the active tab. The tab is active if the auto hide widget is visible

View File

@ -352,6 +352,7 @@ CDockWidgetTab::CDockWidgetTab(CDockWidget* DockWidget, QWidget *parent) :
//============================================================================ //============================================================================
CDockWidgetTab::~CDockWidgetTab() CDockWidgetTab::~CDockWidgetTab()
{ {
qDebug() << "~CDockWidgetTab " << text();
ADS_PRINT("~CDockWidgetTab()"); ADS_PRINT("~CDockWidgetTab()");
delete d; delete d;
} }

View File

@ -721,6 +721,7 @@ CFloatingDockContainer::CFloatingDockContainer(CDockWidget *DockWidget) :
//============================================================================ //============================================================================
CFloatingDockContainer::~CFloatingDockContainer() CFloatingDockContainer::~CFloatingDockContainer()
{ {
qDebug() << "~CFloatingDockContainer " << windowTitle();
ADS_PRINT("~CFloatingDockContainer"); ADS_PRINT("~CFloatingDockContainer");
if (d->DockManager) if (d->DockManager)
{ {

View File

@ -297,7 +297,6 @@ bool CResizeHandle::isResizing() const
//============================================================================ //============================================================================
void CResizeHandle::setMinResizeSize(int MinSize) void CResizeHandle::setMinResizeSize(int MinSize)
{ {
qDebug() << "CResizeHandle::setMinResizeSize " << MinSize;
d->MinSize = MinSize; d->MinSize = MinSize;
} }
@ -305,7 +304,6 @@ void CResizeHandle::setMinResizeSize(int MinSize)
//============================================================================ //============================================================================
void CResizeHandle::setMaxResizeSize(int MaxSize) void CResizeHandle::setMaxResizeSize(int MaxSize)
{ {
qDebug() << "CResizeHandle::setMaxResizeSize " << MaxSize;
d->MaxSize = MaxSize; d->MaxSize = MaxSize;
} }

View File

@ -54,7 +54,7 @@ struct SideTabBarPrivate
CDockContainerWidget* ContainerWidget; CDockContainerWidget* ContainerWidget;
QBoxLayout* TabsLayout; QBoxLayout* TabsLayout;
Qt::Orientation Orientation; Qt::Orientation Orientation;
CDockWidgetSideTab::SideTabBarArea SideTabArea = CDockWidgetSideTab::Left; SideBarLocation SideTabArea = SideBarLocation::Left;
/** /**
* Convenience function to check if this is a horizontal side bar * 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), Super(parent),
d(new SideTabBarPrivate(this)) d(new SideTabBarPrivate(this))
{ {
d->SideTabArea = area; d->SideTabArea = area;
d->ContainerWidget = parent; d->ContainerWidget = parent;
d->Orientation = (area == CDockWidgetSideTab::Bottom || area == CDockWidgetSideTab::Top) d->Orientation = (area == SideBarLocation::Bottom || area == SideBarLocation::Top)
? Qt::Horizontal : Qt::Vertical; ? Qt::Horizontal : Qt::Vertical;
auto mainLayout = new QBoxLayout(d->Orientation == Qt::Vertical ? QBoxLayout::TopToBottom : QBoxLayout::LeftToRight); 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) void CSideTabBar::removeSideTab(CDockWidgetSideTab* SideTab)
{ {
qDebug() << "CSideTabBar::removeSideTab " << SideTab->text();
d->TabsLayout->removeWidget(SideTab); d->TabsLayout->removeWidget(SideTab);
if (d->TabsLayout->isEmpty()) if (d->TabsLayout->isEmpty())
{ {
@ -168,7 +169,7 @@ int CSideTabBar::tabCount() const
//============================================================================ //============================================================================
CDockWidgetSideTab::SideTabBarArea CSideTabBar::sideTabBarArea() const SideBarLocation CSideTabBar::sideTabBarArea() const
{ {
return d->SideTabArea; return d->SideTabArea;
} }

View File

@ -45,7 +45,7 @@ class CDockWidgetSideTab;
class ADS_EXPORT CSideTabBar : public QFrame class ADS_EXPORT CSideTabBar : public QFrame
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(int sideTabBarArea READ sideTabBarArea) Q_PROPERTY(ads::SideBarLocation sideTabBarArea READ sideTabBarArea)
Q_PROPERTY(Qt::Orientation orientation READ orientation) Q_PROPERTY(Qt::Orientation orientation READ orientation)
private: private:
@ -62,7 +62,7 @@ public:
/** /**
* Default Constructor * Default Constructor
*/ */
CSideTabBar(CDockContainerWidget* parent, CDockWidgetSideTab::SideTabBarArea area); CSideTabBar(CDockContainerWidget* parent, SideBarLocation area);
/** /**
* Virtual Destructor * Virtual Destructor
@ -97,7 +97,7 @@ public:
/** /**
* Getter for side tab bar area property * Getter for side tab bar area property
*/ */
CDockWidgetSideTab::SideTabBarArea sideTabBarArea() const; SideBarLocation sideTabBarArea() const;
Q_SIGNALS: Q_SIGNALS:
void sideTabAutoHideToggleRequested(); void sideTabAutoHideToggleRequested();

View File

@ -69,6 +69,7 @@ QT_FORWARD_DECLARE_CLASS(QSplitter)
namespace ads namespace ads
{ {
Q_NAMESPACE
class CDockSplitter; class CDockSplitter;
enum DockWidgetArea 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 namespace internal
{ {
static const bool RestoreTesting = true; static const bool RestoreTesting = true;