From c4872c6b102e2de0b426544da6d2e5c3f98cb70d Mon Sep 17 00:00:00 2001 From: Uwe Kindler Date: Fri, 7 Feb 2020 14:29:02 +0100 Subject: [PATCH] Added showcase for custom title bar widget to demo application --- demo/MainWindow.cpp | 28 ++++++++- demo/demo.qrc | 1 + demo/images/plus.svg | 123 +++++++++++++++++++++++++++++++++++++++ src/DockAreaTitleBar.cpp | 2 +- src/DockAreaWidget.cpp | 7 +++ src/DockAreaWidget.h | 6 ++ 6 files changed, 165 insertions(+), 2 deletions(-) create mode 100644 demo/images/plus.svg diff --git a/demo/MainWindow.cpp b/demo/MainWindow.cpp index 922530a..518e76f 100644 --- a/demo/MainWindow.cpp +++ b/demo/MainWindow.cpp @@ -57,6 +57,8 @@ #include #include #include +#include + #ifdef Q_OS_WIN #include @@ -68,6 +70,8 @@ #include "DockManager.h" #include "DockWidget.h" #include "DockAreaWidget.h" +#include "DockAreaTitleBar.h" +#include "DockAreaTabBar.h" #include "FloatingDockContainer.h" @@ -315,10 +319,32 @@ void MainWindowPrivate::createContent() FileSystemWidget->setFeature(ads::CDockWidget::DockWidgetFloatable, false); appendFeaturStringToWindowTitle(FileSystemWidget); auto TopDockArea = DockManager->addDockWidget(ads::TopDockWidgetArea, FileSystemWidget); + + // We create a calender widget and clear all flags to prevent the dock area + // from closing DockWidget = createCalendarDockWidget(ViewMenu); DockWidget->setFeature(ads::CDockWidget::DockWidgetClosable, false); + DockWidget->setFeature(ads::CDockWidget::DockWidgetMovable, false); + DockWidget->setFeature(ads::CDockWidget::DockWidgetFloatable, false); DockWidget->setTabToolTip(QString("Tab ToolTip\nHodie est dies magna")); - DockManager->addDockWidget(ads::CenterDockWidgetArea, DockWidget, TopDockArea); + auto DockArea = DockManager->addDockWidget(ads::CenterDockWidgetArea, DockWidget, TopDockArea); + + // Now we add a custom button to the dock area title bar that will create + // new editor widgets when clicked + auto CustomButton = new QToolButton(DockArea); + CustomButton->setToolTip(QObject::tr("Create Editor")); + CustomButton->setIcon(svgIcon(":/adsdemo/images/plus.svg")); + CustomButton->setAutoRaise(true); + auto TitleBar = DockArea->titleBar(); + int Index = TitleBar->indexOf(TitleBar->tabBar()); + TitleBar->insertWidget(Index + 1, CustomButton); + QObject::connect(CustomButton, &QToolButton::clicked, [=]() + { + auto DockWidget = createEditorWidget(ui.menuView); + DockWidget->setFeature(ads::CDockWidget::DockWidgetDeleteOnClose, true); + DockManager->addDockWidgetTabToArea(DockWidget, DockArea); + _this->connect(DockWidget, SIGNAL(closeRequested()), SLOT(onEditorCloseRequested())); + }); // Test dock area docking auto RighDockArea = DockManager->addDockWidget(ads::RightDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), TopDockArea); diff --git a/demo/demo.qrc b/demo/demo.qrc index 4995d65..7bc93db 100644 --- a/demo/demo.qrc +++ b/demo/demo.qrc @@ -11,5 +11,6 @@ images/grid_on.svg images/custom-menu-button.svg app.css + images/plus.svg diff --git a/demo/images/plus.svg b/demo/images/plus.svg new file mode 100644 index 0000000..33e9a27 --- /dev/null +++ b/demo/images/plus.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + Jemis Mali + + + + + image/svg+xml + + + + + + diff --git a/src/DockAreaTitleBar.cpp b/src/DockAreaTitleBar.cpp index 3bfdc3c..a7a7baa 100644 --- a/src/DockAreaTitleBar.cpp +++ b/src/DockAreaTitleBar.cpp @@ -460,7 +460,7 @@ void CDockAreaTitleBar::updateDockWidgetActionsButtons() return; } - int InsertIndex = 2; + int InsertIndex = indexOf(d->TabsMenuButton); for (auto Action : Actions) { auto Button = new CTitleBarButton(true, this); diff --git a/src/DockAreaWidget.cpp b/src/DockAreaWidget.cpp index ff86395..354102d 100644 --- a/src/DockAreaWidget.cpp +++ b/src/DockAreaWidget.cpp @@ -856,6 +856,13 @@ void CDockAreaWidget::closeOtherAreas() { dockContainer()->closeOtherAreas(this); } + + +//============================================================================ +CDockAreaTitleBar* CDockAreaWidget::titleBar() const +{ + return d->TitleBar; +} } // namespace ads //--------------------------------------------------------------------------- diff --git a/src/DockAreaWidget.h b/src/DockAreaWidget.h index 42ca5c8..ebbbe01 100644 --- a/src/DockAreaWidget.h +++ b/src/DockAreaWidget.h @@ -44,6 +44,7 @@ struct DockAreaWidgetPrivate; class CDockManager; class CDockContainerWidget; class DockContainerWidgetPrivate; +class CDockAreaTitleBar; /** @@ -264,6 +265,11 @@ public: */ DockWidgetAreas allowedAreas() const; + /** + * Returns the title bar of this dock area + */ + CDockAreaTitleBar* titleBar() const; + public slots: /** * This activates the tab for the given tab index.