From 21adfe06ade08b101a0634ff7847ab79d4e747e7 Mon Sep 17 00:00:00 2001 From: Sergio Martins Date: Mon, 24 Jan 2022 18:31:10 +0000 Subject: [PATCH] Add an example for nested docking within MDI --- examples/mdi_with_docking/main.cpp | 20 +++++++++++++++++--- src/DockWidgetBase.h | 1 + 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/examples/mdi_with_docking/main.cpp b/examples/mdi_with_docking/main.cpp index b557df44..87fd8c50 100644 --- a/examples/mdi_with_docking/main.cpp +++ b/examples/mdi_with_docking/main.cpp @@ -17,6 +17,7 @@ #include #include +#include // clazy:excludeall=qstring-allocations @@ -31,6 +32,15 @@ int main(int argc, char **argv) app.setOrganizationName(QStringLiteral("KDAB")); app.setApplicationName(QStringLiteral("App supporting both docking and a MDI area")); + QCommandLineParser parser; + parser.setApplicationDescription("KDDockWidgets MDI mixed with normal docking"); + parser.addHelpOption(); + + QCommandLineOption nestedDocking("n", QCoreApplication::translate("main", "The MDI dock widgets will serve as drop areas, allowing for further nesting")); + parser.addOption(nestedDocking); + + parser.process(app); + // Fusion looks better in general, but feel free to change qApp->setStyle(QStyleFactory::create(QStringLiteral("Fusion"))); @@ -54,15 +64,19 @@ int main(int argc, char **argv) mainWindow.addDockWidget(dock1, KDDockWidgets::Location_OnLeft, nullptr, KDDockWidgets::InitialOption(QSize(300, 0))); mainWindow.addDockWidget(dock2, KDDockWidgets::Location_OnBottom, nullptr, KDDockWidgets::InitialOption(QSize(0, 300))); + KDDockWidgets::DockWidgetBase::Options options = {}; + if (parser.isSet(nestedDocking)) { + options |= KDDockWidgets::DockWidgetBase::Option_MDINestable; + } // 4. Create our MDI widgets, which will go into the MDI area - auto mdiWidget1 = new KDDockWidgets::DockWidget(QStringLiteral("MDI widget1")); + auto mdiWidget1 = new KDDockWidgets::DockWidget(QStringLiteral("MDI widget1"), options); mdiWidget1->setWidget(new MyWidget1()); - auto mdiWidget2 = new KDDockWidgets::DockWidget(QStringLiteral("MDI widget2")); + auto mdiWidget2 = new KDDockWidgets::DockWidget(QStringLiteral("MDI widget2"), options); mdiWidget2->setWidget(new MyWidget2()); - auto mdiWidget3 = new KDDockWidgets::DockWidget(QStringLiteral("MDI widget3")); + auto mdiWidget3 = new KDDockWidgets::DockWidget(QStringLiteral("MDI widget3"), options); mdiWidget3->setWidget(new MyWidget3()); auto mdiArea = new KDDockWidgets::MDIArea(); diff --git a/src/DockWidgetBase.h b/src/DockWidgetBase.h index ba443018..b2f5a28c 100644 --- a/src/DockWidgetBase.h +++ b/src/DockWidgetBase.h @@ -79,6 +79,7 @@ public: Option_DeleteOnClose = 4, ///< Deletes the DockWidget when closed Option_MDINestable = 8 ///< When this dock widget is being shown in a MDI area it will also allow other dock widgets to be dropped to its sides and tabbed /// Usually Each MDI "window" corresponds to one DockWidget, with this option each "window" will have a layout with 1 or more dock widgets + /// Run "kddockwidgets_mdi_with_docking_example -n" to see it in action }; Q_DECLARE_FLAGS(Options, Option) Q_ENUM(Options);