From 44a5873415d614c93d5f2d2e6490d5b89e30a39a Mon Sep 17 00:00:00 2001 From: Uwe Kindler Date: Mon, 7 Nov 2022 08:11:00 +0100 Subject: [PATCH 1/8] Fixed emission of missing top level event when redocking a auto hide widget --- src/AutoHideDockContainer.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/AutoHideDockContainer.cpp b/src/AutoHideDockContainer.cpp index f4deed3..b83d689 100644 --- a/src/AutoHideDockContainer.cpp +++ b/src/AutoHideDockContainer.cpp @@ -379,7 +379,17 @@ void CAutoHideDockContainer::moveContentsToParent() // location like it had as a auto hide widget. This brings the least surprise // to the user and he does not have to search where the widget was inserted. d->DockWidget->setDockArea(nullptr); - dockContainer()->addDockWidget(d->getDockWidgetArea(d->SideTabBarArea), d->DockWidget); + auto DockContainer = dockContainer(); + + // If the container contained only one visible dock widget, the we need + // to emit a top level event for this widget because it is not the one and + // only visible docked widget anymore + auto TopLevelDockWidget = DockContainer->topLevelDockWidget(); + DockContainer->addDockWidget(d->getDockWidgetArea(d->SideTabBarArea), d->DockWidget); + if (TopLevelDockWidget) + { + CDockWidget::emitTopLevelEventForWidget(TopLevelDockWidget, false); + } } From eda610409afaa51863a67228a43e2e5d89a8cf2c Mon Sep 17 00:00:00 2001 From: Uwe Kindler Date: Mon, 7 Nov 2022 08:11:50 +0100 Subject: [PATCH 2/8] Added actions to demo applications to create floating, docked and auto hide image viewers --- demo/MainWindow.cpp | 48 +++++++++ demo/MainWindow.h | 1 + demo/RenderWidget.cpp | 6 -- demo/demo.qrc | 7 ++ demo/images/ads_icon.svg | 86 ++-------------- demo/images/ads_icon2.svg | 13 +++ demo/images/ads_logo.svg | 98 +++---------------- demo/images/ads_tile_blue.svg | 33 +++++++ demo/images/ads_tile_blue_light.svg | 147 ++++++++++++++++++++++++++++ demo/images/ads_tile_green.svg | 33 +++++++ demo/images/ads_tile_orange.svg | 33 +++++++ demo/images/crop_original.svg | 6 ++ demo/images/panorama.svg | 6 ++ demo/images/photo.svg | 6 ++ 14 files changed, 354 insertions(+), 169 deletions(-) create mode 100644 demo/images/ads_icon2.svg create mode 100644 demo/images/ads_tile_blue.svg create mode 100644 demo/images/ads_tile_blue_light.svg create mode 100644 demo/images/ads_tile_green.svg create mode 100644 demo/images/ads_tile_orange.svg create mode 100644 demo/images/crop_original.svg create mode 100644 demo/images/panorama.svg create mode 100644 demo/images/photo.svg diff --git a/demo/MainWindow.cpp b/demo/MainWindow.cpp index bf8a133..1325404 100644 --- a/demo/MainWindow.cpp +++ b/demo/MainWindow.cpp @@ -575,6 +575,22 @@ void MainWindowPrivate::createActions() _this->connect(a, SIGNAL(triggered()), SLOT(createTable())); ui.menuTests->addAction(a); + a = ui.toolBar->addAction("Create Image Viewer"); + auto ToolButton = qobject_cast(ui.toolBar->widgetForAction(a)); + ToolButton->setPopupMode(QToolButton::InstantPopup); + a->setToolTip("Creates floating, docked or pinned image viewer"); + a->setIcon(svgIcon(":/adsdemo/images/panorama.svg")); + ui.menuTests->addAction(a); + auto Menu = new QMenu(); + ToolButton->setMenu(Menu); + a = Menu->addAction("Floating Image Viewer"); + _this->connect(a, SIGNAL(triggered()), SLOT(createImageViewer())); + a = Menu->addAction("Docked Image Viewer"); + _this->connect(a, SIGNAL(triggered()), SLOT(createImageViewer())); + a = Menu->addAction("Pinned Image Viewer"); + _this->connect(a, SIGNAL(triggered()), SLOT(createImageViewer())); + + ui.menuTests->addSeparator(); a = ui.menuTests->addAction("Show Status Dialog"); _this->connect(a, SIGNAL(triggered()), SLOT(showStatusDialog())); @@ -587,6 +603,7 @@ void MainWindowPrivate::createActions() a->setToolTip("Applies a Visual Studio light style (visual_studio_light.css)." ); a->setIcon(svgIcon(":/adsdemo/images/color_lens.svg")); QObject::connect(a, &QAction::triggered, _this, &CMainWindow::applyVsStyle); + ui.menuTests->addAction(a); } @@ -902,3 +919,34 @@ void CMainWindow::applyVsStyle() d->DockManager->setStyleSheet(Stylesheet); } + +//============================================================================ +void CMainWindow::createImageViewer() +{ + QAction* a = qobject_cast(sender()); + qDebug() << "createImageViewer " << a->text(); + + auto DockWidget = d->createImageViewer(); + DockWidget->setFeature(ads::CDockWidget::DockWidgetDeleteOnClose, true); + DockWidget->setFeature(ads::CDockWidget::DockWidgetForceCloseWithArea, true); + DockWidget->setFeature(ads::CDockWidget::CustomCloseHandling, true); + DockWidget->resize(QSize(640, 480)); + connect(DockWidget, &ads::CDockWidget::closeRequested, [this](){ + qDebug() << "ImageViewer close requested"; + }); + + if (a->text().startsWith("Floating")) + { + auto FloatingWidget = d->DockManager->addDockWidgetFloating(DockWidget); + FloatingWidget->move(QPoint(20, 20)); + } + else if (a->text().startsWith("Docked")) + { + d->DockManager->addDockWidget(ads::RightDockWidgetArea, DockWidget); + } + else if (a->text().startsWith("Pinned")) + { + d->DockManager->addAutoHideDockWidget(ads::SideBarLeft, DockWidget); + } +} + diff --git a/demo/MainWindow.h b/demo/MainWindow.h index a4d78a8..0eeb525 100644 --- a/demo/MainWindow.h +++ b/demo/MainWindow.h @@ -66,6 +66,7 @@ private slots: void showStatusDialog(); void toggleDockWidgetWindowTitle(); void applyVsStyle(); + void createImageViewer(); }; #endif // MAINWINDOW_H diff --git a/demo/RenderWidget.cpp b/demo/RenderWidget.cpp index 41e3024..c168e96 100644 --- a/demo/RenderWidget.cpp +++ b/demo/RenderWidget.cpp @@ -19,12 +19,6 @@ CRenderWidget::CRenderWidget(QWidget* Parent) : QWidget(Parent), m_ScaleFactor(1) { - // - // OpaquePaintEvent indicates that we do not need an auto-filled - // background. It is used for widgets filling the whole paint area - // with its own opaque colors and need to draw its contents quickly. - // This applies for a capture widget. - // this->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); this->setCursor(Qt::OpenHandCursor); } diff --git a/demo/demo.qrc b/demo/demo.qrc index 3139b20..e6f2f40 100644 --- a/demo/demo.qrc +++ b/demo/demo.qrc @@ -26,5 +26,12 @@ images/zoom_in.svg images/zoom_out.svg images/zoom_out_map.svg + images/ads_tile_blue.svg + images/ads_tile_blue_light.svg + images/ads_tile_green.svg + images/ads_tile_orange.svg + images/photo.svg + images/crop_original.svg + images/panorama.svg diff --git a/demo/images/ads_icon.svg b/demo/images/ads_icon.svg index 4231be6..ee0ac56 100644 --- a/demo/images/ads_icon.svg +++ b/demo/images/ads_icon.svg @@ -1,77 +1,11 @@ - - - - - electric_iron icon - Licensed under Iconfu Standard License v1.0 (https://www.iconfu.com/iconfu_standard_license) - Incors GmbH - - - - - - - - + + + + + + + + + + diff --git a/demo/images/ads_icon2.svg b/demo/images/ads_icon2.svg new file mode 100644 index 0000000..91a0b02 --- /dev/null +++ b/demo/images/ads_icon2.svg @@ -0,0 +1,13 @@ + + + electric_iron icon - Licensed under Iconfu Standard License v1.0 (https://www.iconfu.com/iconfu_standard_license) - Incors GmbH + + + + + + + + + + diff --git a/demo/images/ads_logo.svg b/demo/images/ads_logo.svg index 1072540..da1b3b4 100644 --- a/demo/images/ads_logo.svg +++ b/demo/images/ads_logo.svg @@ -1,88 +1,12 @@ - - - - - electric_iron icon - Licensed under Iconfu Standard License v1.0 (https://www.iconfu.com/iconfu_standard_license) - Incors GmbH - - Qt Advanced Docking - - - - - - - + + + + Qt Advanced Docking + + + + + + + diff --git a/demo/images/ads_tile_blue.svg b/demo/images/ads_tile_blue.svg new file mode 100644 index 0000000..91ec6dc --- /dev/null +++ b/demo/images/ads_tile_blue.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/images/ads_tile_blue_light.svg b/demo/images/ads_tile_blue_light.svg new file mode 100644 index 0000000..aa9bb83 --- /dev/null +++ b/demo/images/ads_tile_blue_light.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/images/ads_tile_green.svg b/demo/images/ads_tile_green.svg new file mode 100644 index 0000000..ce8075a --- /dev/null +++ b/demo/images/ads_tile_green.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/images/ads_tile_orange.svg b/demo/images/ads_tile_orange.svg new file mode 100644 index 0000000..bb343dd --- /dev/null +++ b/demo/images/ads_tile_orange.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/images/crop_original.svg b/demo/images/crop_original.svg new file mode 100644 index 0000000..a4a6513 --- /dev/null +++ b/demo/images/crop_original.svg @@ -0,0 +1,6 @@ + + crop_original icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) + + + + \ No newline at end of file diff --git a/demo/images/panorama.svg b/demo/images/panorama.svg new file mode 100644 index 0000000..5716c3d --- /dev/null +++ b/demo/images/panorama.svg @@ -0,0 +1,6 @@ + + panorama icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) + + + + \ No newline at end of file diff --git a/demo/images/photo.svg b/demo/images/photo.svg new file mode 100644 index 0000000..6da0234 --- /dev/null +++ b/demo/images/photo.svg @@ -0,0 +1,6 @@ + + photo icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) + + + + \ No newline at end of file From be86a772ce4e631fb6ba36f550befd1b5396a126 Mon Sep 17 00:00:00 2001 From: Uwe Kindler Date: Mon, 7 Nov 2022 08:19:00 +0100 Subject: [PATCH 3/8] Implemented custom close handling for dynamically created image viewers --- demo/MainWindow.cpp | 19 ++++++++++++++++--- demo/MainWindow.h | 1 + 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/demo/MainWindow.cpp b/demo/MainWindow.cpp index 1325404..1509b4b 100644 --- a/demo/MainWindow.cpp +++ b/demo/MainWindow.cpp @@ -873,6 +873,20 @@ void CMainWindow::onEditorCloseRequested() } +//============================================================================ +void CMainWindow::onImageViewerCloseRequested() +{ + auto DockWidget = qobject_cast(sender()); + int Result = QMessageBox::question(this, "Close Image Viewer", QString("%1 " + "contains unsaved changes? Would you like to close it?") + .arg(DockWidget->windowTitle())); + if (QMessageBox::Yes == Result) + { + DockWidget->closeDockWidget(); + } +} + + //============================================================================ void CMainWindow::createTable() { @@ -931,9 +945,8 @@ void CMainWindow::createImageViewer() DockWidget->setFeature(ads::CDockWidget::DockWidgetForceCloseWithArea, true); DockWidget->setFeature(ads::CDockWidget::CustomCloseHandling, true); DockWidget->resize(QSize(640, 480)); - connect(DockWidget, &ads::CDockWidget::closeRequested, [this](){ - qDebug() << "ImageViewer close requested"; - }); + connect(DockWidget, &ads::CDockWidget::closeRequested, this, + &CMainWindow::onImageViewerCloseRequested); if (a->text().startsWith("Floating")) { diff --git a/demo/MainWindow.h b/demo/MainWindow.h index 0eeb525..4afee14 100644 --- a/demo/MainWindow.h +++ b/demo/MainWindow.h @@ -63,6 +63,7 @@ private slots: void createEditor(); void createTable(); void onEditorCloseRequested(); + void onImageViewerCloseRequested(); void showStatusDialog(); void toggleDockWidgetWindowTitle(); void applyVsStyle(); From 2569e0aa0554328fb667fb43808dd2c295ee71b3 Mon Sep 17 00:00:00 2001 From: Uwe Kindler Date: Mon, 7 Nov 2022 09:50:28 +0100 Subject: [PATCH 4/8] Dynamically created image viewer now loads random image in demo --- demo/MainWindow.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/demo/MainWindow.cpp b/demo/MainWindow.cpp index 1509b4b..5e38d3c 100644 --- a/demo/MainWindow.cpp +++ b/demo/MainWindow.cpp @@ -60,6 +60,7 @@ #include #include #include +#include #ifdef Q_OS_WIN @@ -325,7 +326,19 @@ struct MainWindowPrivate { static int ImageViewerCount = 0; auto w = new CImageViewer(); - auto Result = w->loadFile(":adsdemo/images/ads_logo.svg"); + auto ImageIndex = QRandomGenerator::global()->bounded(4); + auto FileName = ":adsdemo/images/ads_logo.svg"; + + // Pick a random image from a number of images + switch (ImageIndex) + { + case 0: FileName = ":adsdemo/images/ads_tile_blue.svg"; break; + case 1: FileName = ":adsdemo/images/ads_tile_light_blue.svg"; break; + case 2: FileName = ":adsdemo/images/ads_tile_green.svg"; break; + case 3: FileName = ":adsdemo/images/ads_tile_orange.svg"; break; + } + + auto Result = w->loadFile(FileName); qDebug() << "loadFile result: " << Result; ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Image Viewer %1").arg(ImageViewerCount++)); DockWidget->setWidget(w,ads:: CDockWidget::ForceNoScrollArea); @@ -701,6 +714,7 @@ CMainWindow::CMainWindow(QWidget *parent) : // uncomment if you would like to enable dock widget auto hiding CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig); + CDockManager::setAutoHideConfigFlag(CDockManager::AutoHideShowOnMouseOver, true); // uncomment if you would like to enable an equal distribution of the // available size of a splitter to all contained dock widgets From 95b627e83e0d29dc21ac0ab8e20e391285d4436a Mon Sep 17 00:00:00 2001 From: Uwe Kindler Date: Mon, 7 Nov 2022 10:15:14 +0100 Subject: [PATCH 5/8] Prevent accidental hiding collapsing of an auto hide widget by a mouse click shortly after a mouse over collapse event --- src/AutoHideTab.cpp | 24 +++++++++++++++++++++++- src/DockContainerWidget.cpp | 2 +- src/DockManager.h | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/AutoHideTab.cpp b/src/AutoHideTab.cpp index 2b5b10d..72bbf0c 100644 --- a/src/AutoHideTab.cpp +++ b/src/AutoHideTab.cpp @@ -31,6 +31,7 @@ #include #include +#include #include "AutoHideDockContainer.h" #include "AutoHideSideBar.h" @@ -49,6 +50,7 @@ struct AutoHideTabPrivate CDockWidget* DockWidget = nullptr; CAutoHideSideBar* SideBar = nullptr; Qt::Orientation Orientation{Qt::Vertical}; + QElapsedTimer TimeSinceHoverMousePress; /** * Private data constructor @@ -229,14 +231,34 @@ void CAutoHideTab::setDockWidget(CDockWidget* DockWidget) //============================================================================ bool CAutoHideTab::event(QEvent* event) { + if (!CDockManager::testAutoHideConfigFlag(CDockManager::AutoHideShowOnMouseOver)) + { + return Super::event(event); + } + switch (event->type()) { case QEvent::Enter: case QEvent::Leave: - case QEvent::MouseButtonPress: d->forwardEventToDockContainer(event); break; + case QEvent::MouseButtonPress: + // If AutoHideShowOnMouseOver is active, then the showing is triggered + // by a MousePressEvent sent to this tab. To prevent accidental hiding + // of the tab by a mouse click, we wait at least 500 ms before we accept + // the mouse click + if (!event->spontaneous()) + { + d->TimeSinceHoverMousePress.restart(); + d->forwardEventToDockContainer(event); + } + else if (d->TimeSinceHoverMousePress.hasExpired(500)) + { + d->forwardEventToDockContainer(event); + } + break; + default: break; } diff --git a/src/DockContainerWidget.cpp b/src/DockContainerWidget.cpp index 2ddb1ab..bf09436 100644 --- a/src/DockContainerWidget.cpp +++ b/src/DockContainerWidget.cpp @@ -2064,7 +2064,7 @@ CDockManager* CDockContainerWidget::dockManager() const //=========================================================================== void CDockContainerWidget::handleAutoHideWidgetEvent(QEvent* e, QWidget* w) { - if (!CDockManager::testAutoHideConfigFlag(CDockManager::ShowAutoHideOnMouseOver)) + if (!CDockManager::testAutoHideConfigFlag(CDockManager::AutoHideShowOnMouseOver)) { return; } diff --git a/src/DockManager.h b/src/DockManager.h index 4fb3c8d..c29ec4a 100644 --- a/src/DockManager.h +++ b/src/DockManager.h @@ -239,7 +239,7 @@ public: AutoHideButtonTogglesArea = 0x04, //!< If the flag is set, the auto hide button enables auto hiding for all dock widgets in an area, if disabled, only the current dock widget will be toggled AutoHideButtonCheckable = 0x08, //!< If the flag is set, the auto hide button will be checked and unchecked depending on the auto hide state. Mainly for styling purposes. AutoHideSideBarsIconOnly = 0x10,///< show only icons in auto hide side tab - if a tab has no icon, then the text will be shown - ShowAutoHideOnMouseOver = 0x20, ///< show the auto hide window on mouse over tab and hide it if mouse leaves auto hide container + AutoHideShowOnMouseOver = 0x20, ///< show the auto hide window on mouse over tab and hide it if mouse leaves auto hide container DefaultAutoHideConfig = AutoHideFeatureEnabled | DockAreaHasAutoHideButton ///< the default configuration for left and right side bars From 6cdea82a40b2cbc368a72c0b94a1a176ea834d4b Mon Sep 17 00:00:00 2001 From: Uwe Kindler Date: Mon, 7 Nov 2022 10:15:39 +0100 Subject: [PATCH 6/8] Fixed wrong image filename in demo application --- demo/MainWindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/MainWindow.cpp b/demo/MainWindow.cpp index 5e38d3c..f549ba3 100644 --- a/demo/MainWindow.cpp +++ b/demo/MainWindow.cpp @@ -333,7 +333,7 @@ struct MainWindowPrivate switch (ImageIndex) { case 0: FileName = ":adsdemo/images/ads_tile_blue.svg"; break; - case 1: FileName = ":adsdemo/images/ads_tile_light_blue.svg"; break; + case 1: FileName = ":adsdemo/images/ads_tile_blue_light.svg"; break; case 2: FileName = ":adsdemo/images/ads_tile_green.svg"; break; case 3: FileName = ":adsdemo/images/ads_tile_orange.svg"; break; } From 00738704807a96db74819fcb5bc2f85568d68b34 Mon Sep 17 00:00:00 2001 From: Uwe Kindler Date: Mon, 7 Nov 2022 14:36:19 +0100 Subject: [PATCH 7/8] Added documentation for Auto-Hide feature --- demo/MainWindow.cpp | 3 + demo/demo.pro | 1 + demo/demo.qrc | 2 + demo/images/ads_icon2.svg | 14 +- demo/images/font_download.svg | 6 + demo/main.cpp | 1 + doc/AutoHide_PinTo.png | Bin 0 -> 27071 bytes ...fg_flag_AutoHideSideBarsIconOnly_false.png | Bin 0 -> 33505 bytes ...cfg_flag_AutoHideSideBarsIconOnly_true.png | Bin 0 -> 15947 bytes doc/cfg_flag_DockAreaHasAutoHideButton.png | Bin 0 -> 17921 bytes doc/user-guide.md | 149 ++++++++++++++---- src/DockManager.h | 12 +- 12 files changed, 143 insertions(+), 45 deletions(-) create mode 100644 demo/images/font_download.svg create mode 100644 doc/AutoHide_PinTo.png create mode 100644 doc/cfg_flag_AutoHideSideBarsIconOnly_false.png create mode 100644 doc/cfg_flag_AutoHideSideBarsIconOnly_true.png create mode 100644 doc/cfg_flag_DockAreaHasAutoHideButton.png diff --git a/demo/MainWindow.cpp b/demo/MainWindow.cpp index f549ba3..b0cb8e4 100644 --- a/demo/MainWindow.cpp +++ b/demo/MainWindow.cpp @@ -222,6 +222,7 @@ struct MainWindowPrivate ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Filesystem %1") .arg(FileSystemCount++)); DockWidget->setWidget(w); + DockWidget->setIcon(svgIcon(":/adsdemo/images/folder_open.svg")); ui.menuView->addAction(DockWidget->toggleViewAction()); // We disable focus to test focus highlighting if the dock widget content // does not support focus @@ -282,6 +283,7 @@ struct MainWindowPrivate ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Label %1").arg(LabelCount++)); DockWidget->setWidget(l); + DockWidget->setIcon(svgIcon(":/adsdemo/images/font_download.svg")); ui.menuView->addAction(DockWidget->toggleViewAction()); return DockWidget; } @@ -341,6 +343,7 @@ struct MainWindowPrivate auto Result = w->loadFile(FileName); qDebug() << "loadFile result: " << Result; ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Image Viewer %1").arg(ImageViewerCount++)); + DockWidget->setIcon(svgIcon(":/adsdemo/images/photo.svg")); DockWidget->setWidget(w,ads:: CDockWidget::ForceNoScrollArea); auto ToolBar = DockWidget->createDefaultToolBar(); ToolBar->addActions(w->actions()); diff --git a/demo/demo.pro b/demo/demo.pro index b330fd9..a94b5d1 100644 --- a/demo/demo.pro +++ b/demo/demo.pro @@ -15,6 +15,7 @@ lessThan(QT_MAJOR_VERSION, 6) { CONFIG += c++14 CONFIG += debug_and_release DEFINES += QT_DEPRECATED_WARNINGS +RC_FILE += app.rc adsBuildStatic { DEFINES += ADS_STATIC diff --git a/demo/demo.qrc b/demo/demo.qrc index e6f2f40..a182763 100644 --- a/demo/demo.qrc +++ b/demo/demo.qrc @@ -33,5 +33,7 @@ images/photo.svg images/crop_original.svg images/panorama.svg + images/ads_icon2.svg + images/font_download.svg diff --git a/demo/images/ads_icon2.svg b/demo/images/ads_icon2.svg index 91a0b02..8ed092a 100644 --- a/demo/images/ads_icon2.svg +++ b/demo/images/ads_icon2.svg @@ -1,13 +1,11 @@ electric_iron icon - Licensed under Iconfu Standard License v1.0 (https://www.iconfu.com/iconfu_standard_license) - Incors GmbH - - - - - - - - + + + + + + diff --git a/demo/images/font_download.svg b/demo/images/font_download.svg new file mode 100644 index 0000000..ecf5582 --- /dev/null +++ b/demo/images/font_download.svg @@ -0,0 +1,6 @@ + + font_download icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) + + + + \ No newline at end of file diff --git a/demo/main.cpp b/demo/main.cpp index 2b7e636..750c983 100644 --- a/demo/main.cpp +++ b/demo/main.cpp @@ -45,6 +45,7 @@ int main(int argc, char *argv[]) QApplication a(argc, argv); a.setApplicationName("Advanced Docking System Demo"); a.setQuitOnLastWindowClosed(true); + a.setWindowIcon(QIcon(":/adsdemo/images/ads_icon2.svg")); qInstallMessageHandler(myMessageOutput); qDebug() << "Message handler test"; diff --git a/doc/AutoHide_PinTo.png b/doc/AutoHide_PinTo.png new file mode 100644 index 0000000000000000000000000000000000000000..5f653e564175946b7f789c4716a70438a2f1cf55 GIT binary patch literal 27071 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�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 literal 0 HcmV?d00001 diff --git a/doc/cfg_flag_DockAreaHasAutoHideButton.png b/doc/cfg_flag_DockAreaHasAutoHideButton.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca1013d331173afd160d6e094acfb61f3e381d2 GIT binary patch literal 17921 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 zUF_aDockManager = new CDockManager(this); +``` + +If you set the Auto-Hide flags, you can set individual flags using the +function `CDockManager::setAutoHideConfigFlag` or you can set all flags using +the function `CDockManager::setAutoHideConfigFlags`. Instead of settings all +flags individually, it is better to pick a predefined set of configuration +flags and then modify individual flags. The following predefined +configurations are available + +- `DefaultAutoHideConfig` - default auto hide config + +Pick one of those predefined configurations and then modify the following +configurations flags to adjust the docking system to your needs. + +### `AutoHideFeatureEnabled` + +Enables / disables the Auto-Hide functionality. Only if this flag is enabled, +the other Auto-Hide flags will be evaluated. + +### `DockAreaHasAutoHideButton` + +If this flag is set (default), then each dock area has a pin button in the title +bar to toggle Auto-Hide state. + +![DockAreaHasAutoHideButton true](cfg_flag_DockAreaHasAutoHideButton.png) + +### `AutoHideButtonTogglesArea` + +If set, the the pin button in the dock area title bar toggles the complete area. +If not set (default), then the pin button toggles the current active tab / dock +widget and pressing the **Ctrl** key while clicking the pin button toggles the +complete ara. + +### `AutoHideButtonCheckable` + +Normally the pin button in the dock area title bar is not checkable. If this +flag is set, then the button is checkable. That means, if button is checked, +the dock widget is pinned. + +### `AutoHideSideBarsIconOnly` + +Normally the Auto-Hide tabs show the icon and title of the dock widget: + +![AutoHideSideBarsIconOnly false](cfg_flag_AutoHideSideBarsIconOnly_false.png) + +You can set this flag, if you would like to have only icons in the Auto-Hide +tabs instead of icon and dock widget title. If this is set, the Auto-Hide tab +needs less space. The tooltip of each tab still shows the dock widget title. + +![AutoHideSideBarsIconOnly true](cfg_flag_AutoHideSideBarsIconOnly_true.png) + +### `AutoHideShowOnMouseOver` + +Normally Auto-Hide widgets are shown by clicking the Auto-Hide tab and +hidden by clicking the Auto-Hide tab again or by clicking into any other +dock widget in the same container. If this flag is set, the Auto-Hide widget +is shown, if the user hovers over the Auto-Hide tab or if the users moves the +mouse outside of the Auto-Hide widget. Showing and hiding my mouse click still +works if this feature is enabled. + ## DockWidget Feature Flags ### `DockWidgetClosable` @@ -613,51 +703,48 @@ When an entire area is closed, the default behavior is to hide the dock widgets ## Auto Hide Dock Widgets -Enabling this feature adds a pin icon to each dock area that will pin the dock widgets in the area to the left, right or bottom edge of the window as a side tab. The dock widget is then normally hidden, but showing the view by clicking the tab would overlay the dock widget on top of all the other widgets. +The Advanced Docking System supports "Auto-Hide" functionality for **all** dock containers. The "Auto Hide" feature allows to display more information using less screen space by hiding or showing windows pinned to one of the four dock container borders. -![Auto hide demo](autohide-feature-demo.png) +Enabling this feature adds a button with a pin icon to each dock area. -The area dock widgets are added to are based on the distance to the left, right and bottom edge. +![DockAreaHasAutoHideButton true](cfg_flag_DockAreaHasAutoHideButton.png) -Note: Overlay, Pin, and Auto Hide here all refer to the same functionality. +By clicking this button, the current dock widget (or the complete area - depending on the +configuration flags) will be pinned to a certain border. The border is choosen +depending on the location of the dock area. If you click the pin button while +holding down the **Ctrl** key, the whole dock area will be pinned to a certain +border. -### Setting Configuration Flags +### Pinning Auto-Hide Widgets to a certain border -Setting and enabling the overlay feature is similar to setting config flags, but do be aware that it uses a different eOverlayFlag enum and not the eConfigFlag enum. This is only relevant if you call `CDockManager::setConfigFlags` for the `ConfigFlags`, as it would mean you have to call `CDockManager::setConfigFlags` a second time for the `AutoHideFlags`. +If you would like to pin a dock widget or a dock area to a certain border, +then you can right-click into the dock widget tab or into the dock area title bar +to show the context menu. Then you can select the location via the **Pin to** menu: -```c++ -CDockManager::setConfigFlags(CDockManager::DefaultAutoHideConfig); -CDockManager::setConfigFlag(CDockManager::LeftSideBarPrioritizeIconOnly, true); -... -d->DockManager = new CDockManager(this); -``` +![Pin to](AutoHide_PinTo.png) + +### Show / Hide Auto-Hide Widgets via Mouse Over + +Normally Auto-Hide widgets are shown by clicking the Auto-Hide tab and hidden by +clicking the Auto-Hide tab again or by clicking into any other dock widget in +the same container. If the Auto-Hide config flag `AutoHideShowOnMouseOver` is set, +the Auto-Hide widget is shown, if the user hovers over the Auto-Hide tab and is +collapsed if the mouse cursor leaves the Auto-Hide widget. Showing and hiding +my mouse click still works if this feature is enabled. ### Adding Auto Hide Widgets -Adding an auto hide widget is similar to adding a dock widget, simply call `dockManager->addAutoHideDockWidget`. +Adding an auto hide widget is similar to adding a dock widget, simply call +`dockManager->addAutoHideDockWidget()`. ```c++ +CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig); d->DockManager = new CDockManager(this); CDockWidget* TableDockWidget = new CDockWidget("Table 1"); -TableDockWidget->setDefaultOverlayDockProportion(0.5); // Default size in proportion to the window size when adding the overlay widget -DockManager->addOverlayDockWidget(CDockWidgetSideTab::SideTabBarArea::LeftTop, TableDockWidget, CDockWidget::Last); +DockManager->addAutoHideDockWidget(SideBarLeft, TableDockWidget); ``` -See `autohide` example to learn how it works. - -### Configuration Flags For Auto Hide Widgets - -- `DockContainerHasTopSideBar`,`DockContainerHasLeftSideBar`, `DockContainerHasRightSideBar`, `DockContainerHasBottomSideBar` -> Enabling each of these enables the side bar at each location. Disabling any of them would mean that the widget cannot be added at that location, so it would be added at the next available location. E.g. If you only enable `DockContainerHasRightSideBar` and `DockContainerHasBottomSideBar` then it will be added to the bottom side bar or right side bar respectively. If none of these are enabled, the auto hide button will not be added, as at least one of them must be enabled to work. -- `DockAreaHasAutoHideButton` -> Adds the auto hide button to the title bar of the dock area -- `TopSideBarPrioritizeIconOnly`, `LeftSideBarPrioritizeIconOnly`, `RightSideBarPrioritizeIconOnly`, `BottomSideBarPrioritizeIconOnly` -> If this is set, the side bar this is enabled with will prioritize showing an icon only, as opposed to an icon and text. This is set per side bar, so if you only enable `LeftSideBarPrioritizeIconOnly`, the right and bottom side bars will still show the icon and the text. This is only relevant if an icon is set, otherwise it will only show text as usual. -- `AutoHideDockAreaHasTitle` -> Adds the title of the dock window where the title bar would be. -- `DefaultAutoHideConfig` -> Enables `DockContainerHasTopSideBar`, `DockContainerHasLeftSideBar`, `DockContainerHasRightSideBar`, `DockContainerHasBottomSideBar`, `DockAreaHasAutoHideButton`, `AutoHideDockAreaHasTitle` - -### Limitations - -- Currently the `LeftBottom` and `RightBottom` areas can only be added programatically, and not through the pin icon. These are used if you'd like to add a new dock widget separated from the normal dock areas. - -- Adding a `DockWidget` (e.g. via `addDockWidget`) to an `DockArea` in an Auto Hide Widget that already has a dockwidget is undefined behavior. An overlayed dock area does not have tabs and does not support more than one `DockWidget` in it's area. If you want to add a `DockWidget` to a `DockArea` that *could* be in an auto hidden widget, check first if it's auto hidden via `CDockArea::isAutoHide` and handle it accordingly (typically by adding the overlay dock widget as a side tab instead of to the area). +See `autohide` example or the demo application to learn how it works. ## Styling diff --git a/src/DockManager.h b/src/DockManager.h index c29ec4a..7a2bfc3 100644 --- a/src/DockManager.h +++ b/src/DockManager.h @@ -340,18 +340,18 @@ public: CDockContainerWidget* DockContainerWidget); /** - * Adds a dock widget overlayed into the dock manager container based on the side tab bar area. - * An overlay widget is used for auto hide functionality + * Adds an Auto-Hide widget to the dock manager container pinned to + * the given side bar location. * \return Returns the CAutoHideDockContainer that contains the new DockWidget */ - CAutoHideDockContainer* addAutoHideDockWidget(SideBarLocation area, CDockWidget* Dockwidget); + CAutoHideDockContainer* addAutoHideDockWidget(SideBarLocation Location, CDockWidget* Dockwidget); /** - * Adds dock widget overlayed into the given container based on the CDockWidgetSideTab::SideTabBarArea. - * An overlay widget is used for auto hide functionality + * Adds an Auto-Hide widget to the given DockContainerWidget pinned to + * the given side bar location in this container. * \return Returns the CAutoHideDockContainer that contains the new DockWidget */ - CAutoHideDockContainer* addAutoHideDockWidgetToContainer(SideBarLocation area, + CAutoHideDockContainer* addAutoHideDockWidgetToContainer(SideBarLocation Location, CDockWidget* Dockwidget, CDockContainerWidget* DockContainerWidget); /** From 5a9f23a9adbe3233fa9c2aaf68cc054790b880b9 Mon Sep 17 00:00:00 2001 From: Uwe Kindler Date: Mon, 7 Nov 2022 16:28:27 +0100 Subject: [PATCH 8/8] Fixed emission of top level event in DockContainerWidget --- demo/MainWindow.cpp | 1 - doc/user-guide.md | 111 +++++++++++++++++----------------- src/AutoHideDockContainer.cpp | 9 --- src/DockContainerWidget.cpp | 19 +++++- 4 files changed, 72 insertions(+), 68 deletions(-) diff --git a/demo/MainWindow.cpp b/demo/MainWindow.cpp index b0cb8e4..07dea01 100644 --- a/demo/MainWindow.cpp +++ b/demo/MainWindow.cpp @@ -717,7 +717,6 @@ CMainWindow::CMainWindow(QWidget *parent) : // uncomment if you would like to enable dock widget auto hiding CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig); - CDockManager::setAutoHideConfigFlag(CDockManager::AutoHideShowOnMouseOver, true); // uncomment if you would like to enable an equal distribution of the // available size of a splitter to all contained dock widgets diff --git a/doc/user-guide.md b/doc/user-guide.md index e8d882f..45fd7f5 100644 --- a/doc/user-guide.md +++ b/doc/user-guide.md @@ -29,6 +29,10 @@ - [`FloatingContainerForceQWidgetTitleBar` (Linux only)](#floatingcontainerforceqwidgettitlebar-linux-only) - [`MiddleMouseButtonClosesTab`](#middlemousebuttonclosestab) - [Auto-Hide Configuration Flags](#auto-hide-configuration-flags) + - [Auto Hide Dock Widgets](#auto-hide-dock-widgets) + - [Pinning Auto-Hide Widgets to a certain border](#pinning-auto-hide-widgets-to-a-certain-border) + - [Show / Hide Auto-Hide Widgets via Mouse Over](#show--hide-auto-hide-widgets-via-mouse-over) + - [Adding Auto Hide Widgets](#adding-auto-hide-widgets) - [Setting Auto-Hide Flags](#setting-auto-hide-flags) - [`AutoHideFeatureEnabled`](#autohidefeatureenabled) - [`DockAreaHasAutoHideButton`](#dockareahasautohidebutton) @@ -49,10 +53,6 @@ - [Central Widget](#central-widget) - [Empty Dock Area](#empty-dock-area) - [Custom Close Handling](#custom-close-handling) -- [Auto Hide Dock Widgets](#auto-hide-dock-widgets) - - [Pinning Auto-Hide Widgets to a certain border](#pinning-auto-hide-widgets-to-a-certain-border) - - [Show / Hide Auto-Hide Widgets via Mouse Over](#show--hide-auto-hide-widgets-via-mouse-over) - - [Adding Auto Hide Widgets](#adding-auto-hide-widgets) - [Styling](#styling) - [Disabling the Internal Style Sheet](#disabling-the-internal-style-sheet) @@ -500,16 +500,60 @@ possible in various web browsers. ## Auto-Hide Configuration Flags -The Advanced Docking System has a number of global configuration options to -configure the Auto-Hide functionality. The "Auto Hide" feature allows to display -more information using less screen space by hiding or showing windows pinned to -one of the four dock container borders. +### Auto Hide Dock Widgets + +The Advanced Docking System supports "Auto-Hide" functionality for **all** +dock containers. The "Auto Hide" feature allows to display more information +using less screen space by hiding or showing windows pinned to one of the +four dock container borders. + +Enabling this feature adds a button with a pin icon to each dock area. + +![DockAreaHasAutoHideButton true](cfg_flag_DockAreaHasAutoHideButton.png) + +By clicking this button, the current dock widget (or the complete area - depending on the +configuration flags) will be pinned to a certain border. The border is choosen +depending on the location of the dock area. If you click the pin button while +holding down the **Ctrl** key, the whole dock area will be pinned to a certain +border. + +### Pinning Auto-Hide Widgets to a certain border + +If you would like to pin a dock widget or a dock area to a certain border, +then you can right-click into the dock widget tab or into the dock area title bar +to show the context menu. Then you can select the location via the **Pin to** menu: + +![Pin to](AutoHide_PinTo.png) + +### Show / Hide Auto-Hide Widgets via Mouse Over + +Normally Auto-Hide widgets are shown by clicking the Auto-Hide tab and hidden by +clicking the Auto-Hide tab again or by clicking into any other dock widget in +the same container. If the Auto-Hide config flag `AutoHideShowOnMouseOver` is set, +the Auto-Hide widget is shown, if the user hovers over the Auto-Hide tab and is +collapsed if the mouse cursor leaves the Auto-Hide widget. Showing and hiding +by mouse click still works if this feature is enabled. + +### Adding Auto Hide Widgets + +Adding an auto hide widget is similar to adding a dock widget, simply call +`dockManager->addAutoHideDockWidget()`. + +```c++ +CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig); +d->DockManager = new CDockManager(this); +CDockWidget* TableDockWidget = new CDockWidget("Table 1"); +DockManager->addAutoHideDockWidget(SideBarLeft, TableDockWidget); +``` + +See `autohide` example or the demo application to learn how it works. ### Setting Auto-Hide Flags -You should set the Auto-Hide flags before creating the dock manager -instance. That means, you should set the Auto-Hide flags after setting the -configuration flags. +The Advanced Docking System has a number of global configuration flags to +configure the Auto-Hide functionality. You should set the Auto-Hide flags before +creating the dock manager instance. That means, you should set the Auto-Hide +flags after setting the configuration flags. ```c++ CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true); @@ -701,51 +745,6 @@ Normally clicking the close button of a dock widget will just hide the widget an When an entire area is closed, the default behavior is to hide the dock widgets it contains regardless of the `DockWidgetDeleteOnClose` flag except if there is only one dock widget. In this special case, the `DockWidgetDeleteOnClose` flag is followed. This behavior can be changed by setting the `DockWidgetForceCloseWithArea` flag to all the dock widgets that needs to be closed with their area. -## Auto Hide Dock Widgets - -The Advanced Docking System supports "Auto-Hide" functionality for **all** dock containers. The "Auto Hide" feature allows to display more information using less screen space by hiding or showing windows pinned to one of the four dock container borders. - -Enabling this feature adds a button with a pin icon to each dock area. - -![DockAreaHasAutoHideButton true](cfg_flag_DockAreaHasAutoHideButton.png) - -By clicking this button, the current dock widget (or the complete area - depending on the -configuration flags) will be pinned to a certain border. The border is choosen -depending on the location of the dock area. If you click the pin button while -holding down the **Ctrl** key, the whole dock area will be pinned to a certain -border. - -### Pinning Auto-Hide Widgets to a certain border - -If you would like to pin a dock widget or a dock area to a certain border, -then you can right-click into the dock widget tab or into the dock area title bar -to show the context menu. Then you can select the location via the **Pin to** menu: - -![Pin to](AutoHide_PinTo.png) - -### Show / Hide Auto-Hide Widgets via Mouse Over - -Normally Auto-Hide widgets are shown by clicking the Auto-Hide tab and hidden by -clicking the Auto-Hide tab again or by clicking into any other dock widget in -the same container. If the Auto-Hide config flag `AutoHideShowOnMouseOver` is set, -the Auto-Hide widget is shown, if the user hovers over the Auto-Hide tab and is -collapsed if the mouse cursor leaves the Auto-Hide widget. Showing and hiding -my mouse click still works if this feature is enabled. - -### Adding Auto Hide Widgets - -Adding an auto hide widget is similar to adding a dock widget, simply call -`dockManager->addAutoHideDockWidget()`. - -```c++ -CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig); -d->DockManager = new CDockManager(this); -CDockWidget* TableDockWidget = new CDockWidget("Table 1"); -DockManager->addAutoHideDockWidget(SideBarLeft, TableDockWidget); -``` - -See `autohide` example or the demo application to learn how it works. - ## Styling The Advanced Docking System supports styling via [Qt Style Sheets](https://doc.qt.io/qt-5/stylesheet.html). All components like splitters, tabs, buttons, titlebar and diff --git a/src/AutoHideDockContainer.cpp b/src/AutoHideDockContainer.cpp index b83d689..6a09fdb 100644 --- a/src/AutoHideDockContainer.cpp +++ b/src/AutoHideDockContainer.cpp @@ -380,16 +380,7 @@ void CAutoHideDockContainer::moveContentsToParent() // to the user and he does not have to search where the widget was inserted. d->DockWidget->setDockArea(nullptr); auto DockContainer = dockContainer(); - - // If the container contained only one visible dock widget, the we need - // to emit a top level event for this widget because it is not the one and - // only visible docked widget anymore - auto TopLevelDockWidget = DockContainer->topLevelDockWidget(); DockContainer->addDockWidget(d->getDockWidgetArea(d->SideTabBarArea), d->DockWidget); - if (TopLevelDockWidget) - { - CDockWidget::emitTopLevelEventForWidget(TopLevelDockWidget, false); - } } diff --git a/src/DockContainerWidget.cpp b/src/DockContainerWidget.cpp index bf09436..c8d5d69 100644 --- a/src/DockContainerWidget.cpp +++ b/src/DockContainerWidget.cpp @@ -1360,6 +1360,7 @@ CDockContainerWidget::~CDockContainerWidget() CDockAreaWidget* CDockContainerWidget::addDockWidget(DockWidgetArea area, CDockWidget* Dockwidget, CDockAreaWidget* DockAreaWidget) { + auto TopLevelDockWidget = topLevelDockWidget(); CDockAreaWidget* OldDockArea = Dockwidget->dockAreaWidget(); if (OldDockArea) { @@ -1367,14 +1368,28 @@ CDockAreaWidget* CDockContainerWidget::addDockWidget(DockWidgetArea area, CDockW } Dockwidget->setDockManager(d->DockManager); + CDockAreaWidget* DockArea; if (DockAreaWidget) { - return d->addDockWidgetToDockArea(area, Dockwidget, DockAreaWidget); + DockArea = d->addDockWidgetToDockArea(area, Dockwidget, DockAreaWidget); } else { - return d->addDockWidgetToContainer(area, Dockwidget); + DockArea = d->addDockWidgetToContainer(area, Dockwidget); } + + if (TopLevelDockWidget) + { + auto NewTopLevelDockWidget = topLevelDockWidget(); + // If the container contained only one visible dock widget, the we need + // to emit a top level event for this widget because it is not the one and + // only visible docked widget anymore + if (!NewTopLevelDockWidget) + { + CDockWidget::emitTopLevelEventForWidget(TopLevelDockWidget, false); + } + } + return DockArea; }