diff --git a/src/View.cpp b/src/View.cpp index b3118611..82d2f9f3 100644 --- a/src/View.cpp +++ b/src/View.cpp @@ -168,4 +168,9 @@ Controller *View::controller() const QSize View::hardcodedMinimumSize() { return Layouting::Item::hardcodedMinimumSize; -} \ No newline at end of file +} + +bool View::is(Type t) const +{ + return m_type == t; +} diff --git a/src/View.h b/src/View.h index c99da53f..536a343e 100644 --- a/src/View.h +++ b/src/View.h @@ -218,6 +218,11 @@ public: return max; } + /// @brief Returns whether the view is of the specified type + /// Virtual so it can be overridden by ViewWrapper. When we're wrapping an existing GUI element + /// only the specific frontend can know what's the actual type + virtual bool is(Type) const; + protected: virtual void free_impl(); diff --git a/src/views_qtwidgets/Separator_qtwidgets.h b/src/views_qtwidgets/Separator_qtwidgets.h index 10041d9f..ccba04fb 100644 --- a/src/views_qtwidgets/Separator_qtwidgets.h +++ b/src/views_qtwidgets/Separator_qtwidgets.h @@ -24,6 +24,7 @@ namespace KDDockWidgets::Views { class DOCKS_EXPORT Separator_qtwidgets : public View_qtwidgets { + Q_OBJECT public: explicit Separator_qtwidgets(Controllers::Separator *controller, QWidget *parent = nullptr); diff --git a/src/views_qtwidgets/ViewWrapper_qtwidgets.cpp b/src/views_qtwidgets/ViewWrapper_qtwidgets.cpp index 1a5311e9..cc5a8846 100644 --- a/src/views_qtwidgets/ViewWrapper_qtwidgets.cpp +++ b/src/views_qtwidgets/ViewWrapper_qtwidgets.cpp @@ -10,6 +10,15 @@ */ #include "ViewWrapper_qtwidgets.h" +#include "views_qtwidgets/DockWidget_qtwidgets.h" +#include "views_qtwidgets/FloatingWindow_qtwidgets.h" +#include "views_qtwidgets/Frame_qtwidgets.h" +#include "views_qtwidgets/MainWindow_qtwidgets.h" +#include "views_qtwidgets/Separator_qtwidgets.h" +#include "views_qtwidgets/SideBar_qtwidgets.h" +#include "views_qtwidgets/Stack_qtwidgets.h" +#include "views_qtwidgets/TabBar_qtwidgets.h" +#include "views_qtwidgets/TitleBar_qtwidgets.h" #include @@ -95,3 +104,42 @@ void ViewWrapper_qtwidgets::setSize(int x, int y) { m_widget->resize(x, y); } + +bool ViewWrapper_qtwidgets::is(Type t) const +{ + if (t == Type::ViewWrapper) + return true; + + switch (t) { + + case Type::Frame: + return qobject_cast(m_widget); + case Type::TitleBar: + return qobject_cast(m_widget); + case Type::TabBar: + return qobject_cast(m_widget); + case Type::Stack: + return qobject_cast(m_widget); + case Type::FloatingWindow: + return qobject_cast(m_widget); + case Type::Separator: + return qobject_cast(m_widget); + case Type::DockWidget: + return qobject_cast(m_widget); + case Type::SideBar: + return qobject_cast(m_widget); + case Type::MainWindow: + return qobject_cast(m_widget); + case Type::Layout: + return qobject_cast(m_widget); + case Type::LayoutItem: + case Type::DropIndicatorOverlayInterface: + qWarning() << Q_FUNC_INFO << "These are framework internals that are not wrapped"; + return false; + case Type::ViewWrapper: + return true; + } + + qWarning() << Q_FUNC_INFO << "Unknown type" << static_cast(t); + return false; +} diff --git a/src/views_qtwidgets/ViewWrapper_qtwidgets.h b/src/views_qtwidgets/ViewWrapper_qtwidgets.h index 34589e4e..fcca1257 100644 --- a/src/views_qtwidgets/ViewWrapper_qtwidgets.h +++ b/src/views_qtwidgets/ViewWrapper_qtwidgets.h @@ -40,6 +40,7 @@ public: bool isMaximized() const override; QSize maximumSize() const override; void setSize(int width, int height) override; + bool is(Type) const override; private: QWidget *const m_widget;