diff --git a/src/FrameworkWidgetFactory.cpp b/src/FrameworkWidgetFactory.cpp index 746dea85..c3ce6756 100644 --- a/src/FrameworkWidgetFactory.cpp +++ b/src/FrameworkWidgetFactory.cpp @@ -23,10 +23,12 @@ # include "widgets/FrameWidget_p.h" # include "widgets/TitleBarWidget_p.h" # include "widgets/TabBarWidget_p.h" +# include "widgets/SideBarWidget_p.h" # include "widgets/TabWidgetWidget_p.h" # include "multisplitter/Separator_qwidget.h" # include "widgets/FloatingWindowWidget_p.h" # include "indicators/SegmentedIndicators_p.h" + # include #else # include "quick/FrameQuick_p.h" @@ -102,6 +104,11 @@ QWidgetOrQuick *DefaultWidgetFactory::createRubberBand(QWidgetOrQuick *parent) c return new QRubberBand(QRubberBand::Rectangle, parent); } +SideBar *DefaultWidgetFactory::createSideBar(SideBarLocation loc, MainWindowBase *parent) const +{ + return new SideBarWidget(loc, parent); +} + #else Frame *DefaultWidgetFactory::createFrame(QWidgetOrQuick *parent, FrameOptions options) const diff --git a/src/FrameworkWidgetFactory.h b/src/FrameworkWidgetFactory.h index 87ebc01a..477517e9 100644 --- a/src/FrameworkWidgetFactory.h +++ b/src/FrameworkWidgetFactory.h @@ -37,6 +37,7 @@ class TabWidget; class TitleBar; class Frame; class DropArea; +class SideBar; class TabBar; /** @@ -121,6 +122,12 @@ public: ///@brief Called internally by the framework to create a RubberBand to show as drop zone ///Returns a rubber band virtual QWidgetOrQuick *createRubberBand(QWidgetOrQuick *parent) const = 0; + + ///@brief Called internally by the framework to create a SideBar + ///@param loc The side-bar location without the main window. Just forward into your SideBar sub-class ctor. + ///@param parent The MainWindow. Just forward into your SideBar sub-class ctor. + virtual SideBar *createSideBar(SideBarLocation loc, MainWindowBase *parent) const = 0; + private: Q_DISABLE_COPY(FrameworkWidgetFactory) }; @@ -142,6 +149,7 @@ public: FloatingWindow *createFloatingWindow(Frame *frame, MainWindowBase *parent = nullptr) const override; DropIndicatorOverlayInterface *createDropIndicatorOverlay(DropArea*) const override; QWidgetOrQuick *createRubberBand(QWidgetOrQuick *parent) const override; + SideBar *createSideBar(SideBarLocation loc, MainWindowBase *parent) const override; static DropIndicatorType s_dropIndicatorType; private: diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 24ffde58..01971cd7 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -21,8 +21,9 @@ #include "DropArea_p.h" #include "Frame_p.h" #include "Logging_p.h" -#include "private/widgets/SideBarWidget_p.h" +#include "SideBar_p.h" #include "DropAreaWithCentralFrame_p.h" +#include "FrameworkWidgetFactory.h" #include #include @@ -40,7 +41,7 @@ public: if (m_supportsAutoHide) { for (auto location : { SideBarLocation::North, SideBarLocation::East, SideBarLocation::West, SideBarLocation::South}) { - m_sideBars.insert(location, new SideBarWidget(location, mainWindow)); + m_sideBars.insert(location, Config::self().frameworkWidgetFactory()->createSideBar(location, mainWindow) ); } } }