qtquick: Don't overload Q_INVOKABLES
Apparently QML doesn't support it very well. Fixes #291
This commit is contained in:
@@ -109,6 +109,13 @@ ApplicationWindow {
|
||||
color: "black"
|
||||
}
|
||||
}
|
||||
KDDW.DockWidget {
|
||||
id: dock7
|
||||
uniqueName: "dock7"
|
||||
Rectangle {
|
||||
color: "green"
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
// Add dock4 to the Bottom location
|
||||
@@ -122,6 +129,10 @@ ApplicationWindow {
|
||||
// See MainWindowInstantiator_p.h for the API
|
||||
addDockWidget(dock6, KDDW.KDDockWidgets.Location_OnLeft, null,
|
||||
Qt.size(500, 100), KDDW.KDDockWidgets.StartHidden);
|
||||
|
||||
|
||||
// dock7 will be tabbed with dock7:
|
||||
dock5.addDockWidgetAsTab(dock7);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
#include "kddockwidgets/controllers/DockWidget.h"
|
||||
#include "ViewFactory_qtquick.h"
|
||||
#include "Config.h"
|
||||
#include "Platform_qtquick.h"
|
||||
#include "controllers/DockWidget.h"
|
||||
|
||||
using namespace KDDockWidgets;
|
||||
|
||||
@@ -91,41 +93,31 @@ void DockWidgetInstantiator::setFloating(bool is)
|
||||
m_isFloating = is;
|
||||
}
|
||||
|
||||
void DockWidgetInstantiator::addDockWidgetAsTab(DockWidgetInstantiator *other,
|
||||
void DockWidgetInstantiator::addDockWidgetAsTab(QQuickItem *other,
|
||||
InitialVisibilityOption option)
|
||||
{
|
||||
if (m_dockWidget)
|
||||
m_dockWidget->addDockWidgetAsTab(other ? other->controller() : nullptr, option);
|
||||
if (!other || !m_dockWidget)
|
||||
return;
|
||||
|
||||
Controllers::DockWidget *otherDockWidget = Platform_qtquick::dockWidgetForItem(other);
|
||||
m_dockWidget->addDockWidgetAsTab(otherDockWidget, option);
|
||||
}
|
||||
|
||||
void DockWidgetInstantiator::addDockWidgetAsTab(Controllers::DockWidget *other,
|
||||
InitialVisibilityOption option)
|
||||
{
|
||||
if (m_dockWidget)
|
||||
m_dockWidget->addDockWidgetAsTab(other, option);
|
||||
}
|
||||
|
||||
void DockWidgetInstantiator::addDockWidgetToContainingWindow(Controllers::DockWidget *other,
|
||||
void DockWidgetInstantiator::addDockWidgetToContainingWindow(QQuickItem *other,
|
||||
Location location,
|
||||
Controllers::DockWidget *relativeTo,
|
||||
QQuickItem *relativeTo,
|
||||
QSize initialSize,
|
||||
InitialVisibilityOption option)
|
||||
{
|
||||
if (m_dockWidget)
|
||||
m_dockWidget->addDockWidgetToContainingWindow(other, location, relativeTo,
|
||||
InitialOption(option, initialSize));
|
||||
}
|
||||
if (!other || !m_dockWidget)
|
||||
return;
|
||||
|
||||
void DockWidgetInstantiator::addDockWidgetToContainingWindow(DockWidgetInstantiator *other,
|
||||
Location location,
|
||||
DockWidgetInstantiator *relativeTo,
|
||||
QSize initialSize,
|
||||
InitialVisibilityOption option)
|
||||
{
|
||||
if (m_dockWidget)
|
||||
m_dockWidget->addDockWidgetToContainingWindow(
|
||||
other ? other->controller() : nullptr, location,
|
||||
relativeTo ? relativeTo->controller() : nullptr, InitialOption(option, initialSize));
|
||||
Controllers::DockWidget *otherDockWidget = Platform_qtquick::dockWidgetForItem(other);
|
||||
Controllers::DockWidget *relativeToDockWidget = Platform_qtquick::dockWidgetForItem(relativeTo);
|
||||
|
||||
m_dockWidget->addDockWidgetToContainingWindow(
|
||||
otherDockWidget, location,
|
||||
relativeToDockWidget, InitialOption(option, initialSize));
|
||||
}
|
||||
|
||||
void DockWidgetInstantiator::setAsCurrentTab()
|
||||
|
||||
@@ -60,20 +60,12 @@ public:
|
||||
bool isFloating() const;
|
||||
void setFloating(bool);
|
||||
|
||||
Q_INVOKABLE void addDockWidgetAsTab(KDDockWidgets::DockWidgetInstantiator *other,
|
||||
KDDockWidgets::InitialVisibilityOption = {});
|
||||
Q_INVOKABLE void addDockWidgetAsTab(KDDockWidgets::Controllers::DockWidget *other,
|
||||
Q_INVOKABLE void addDockWidgetAsTab(QQuickItem *other,
|
||||
KDDockWidgets::InitialVisibilityOption = {});
|
||||
|
||||
Q_INVOKABLE void addDockWidgetToContainingWindow(KDDockWidgets::Controllers::DockWidget *other,
|
||||
Q_INVOKABLE void addDockWidgetToContainingWindow(QQuickItem *other,
|
||||
KDDockWidgets::Location location,
|
||||
KDDockWidgets::Controllers::DockWidget *relativeTo = nullptr,
|
||||
QSize initialSize = {},
|
||||
KDDockWidgets::InitialVisibilityOption = {});
|
||||
|
||||
Q_INVOKABLE void addDockWidgetToContainingWindow(KDDockWidgets::DockWidgetInstantiator *other,
|
||||
KDDockWidgets::Location location,
|
||||
KDDockWidgets::DockWidgetInstantiator *relativeTo = nullptr,
|
||||
QQuickItem *relativeTo = nullptr,
|
||||
QSize initialSize = {},
|
||||
KDDockWidgets::InitialVisibilityOption = {});
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "DockWidgetInstantiator.h"
|
||||
|
||||
#include "DockRegistry.h"
|
||||
#include "Platform_qtquick.h"
|
||||
|
||||
using namespace KDDockWidgets;
|
||||
|
||||
@@ -62,24 +63,18 @@ bool MainWindowInstantiator::isMDI() const
|
||||
return m_mainWindow && m_mainWindow->isMDI();
|
||||
}
|
||||
|
||||
void MainWindowInstantiator::addDockWidget(Controllers::DockWidget *dockWidget, Location location,
|
||||
Controllers::DockWidget *relativeTo, QSize initialSize,
|
||||
void MainWindowInstantiator::addDockWidget(QQuickItem *dockWidget, Location location,
|
||||
QQuickItem *relativeTo, QSize initialSize,
|
||||
InitialVisibilityOption option)
|
||||
{
|
||||
if (!m_mainWindow) {
|
||||
qWarning() << Q_FUNC_INFO << "No MainWindow created yet";
|
||||
if (!dockWidget || !m_mainWindow)
|
||||
return;
|
||||
}
|
||||
|
||||
m_mainWindow->addDockWidget(dockWidget, location, relativeTo, { option, initialSize });
|
||||
}
|
||||
Controllers::DockWidget *dw = Platform_qtquick::dockWidgetForItem(dockWidget);
|
||||
Controllers::DockWidget *relativeToDw = Platform_qtquick::dockWidgetForItem(relativeTo);
|
||||
|
||||
void MainWindowInstantiator::addDockWidget(DockWidgetInstantiator *dockWidget, Location location,
|
||||
DockWidgetInstantiator *relativeTo, QSize initialSize,
|
||||
InitialVisibilityOption option)
|
||||
{
|
||||
addDockWidget(dockWidget ? dockWidget->controller() : nullptr, location,
|
||||
relativeTo ? relativeTo->controller() : nullptr, initialSize, option);
|
||||
m_mainWindow->addDockWidget(dw, location,
|
||||
relativeToDw, { option, initialSize });
|
||||
}
|
||||
|
||||
void MainWindowInstantiator::layoutEqually()
|
||||
|
||||
@@ -53,14 +53,9 @@ public:
|
||||
bool isMDI() const;
|
||||
|
||||
/// @brief See KDDockWidgets::MainWindowBase::addDockWidget()
|
||||
Q_INVOKABLE void addDockWidget(KDDockWidgets::Controllers::DockWidget *dockWidget,
|
||||
Q_INVOKABLE void addDockWidget(QQuickItem *dockWidget,
|
||||
KDDockWidgets::Location location,
|
||||
KDDockWidgets::Controllers::DockWidget *relativeTo = nullptr,
|
||||
QSize initialSize = {}, KDDockWidgets::InitialVisibilityOption = {});
|
||||
|
||||
Q_INVOKABLE void addDockWidget(KDDockWidgets::DockWidgetInstantiator *dockWidget,
|
||||
KDDockWidgets::Location location,
|
||||
KDDockWidgets::DockWidgetInstantiator *relativeTo = nullptr,
|
||||
QQuickItem *relativeTo = nullptr,
|
||||
QSize initialSize = {}, KDDockWidgets::InitialVisibilityOption = {});
|
||||
|
||||
Q_INVOKABLE void layoutEqually();
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
#include "private/Platform_p.h"
|
||||
#include "ViewFactory_qtquick.h"
|
||||
|
||||
#include "views/DockWidget_qtquick.h"
|
||||
#include "DockWidgetInstantiator.h"
|
||||
|
||||
#include <QQmlEngine>
|
||||
#include <QQuickStyle>
|
||||
#include <QQuickWindow>
|
||||
@@ -219,3 +222,18 @@ void Platform_qtquick::ungrabMouse()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Controllers::DockWidget *Platform_qtquick::dockWidgetForItem(QQuickItem *item)
|
||||
{
|
||||
if (!item)
|
||||
return nullptr;
|
||||
|
||||
if (auto dwView = qobject_cast<Views::DockWidget_qtquick *>(item))
|
||||
return dwView->dockWidget();
|
||||
|
||||
if (auto dwi = qobject_cast<DockWidgetInstantiator *>(item))
|
||||
if (auto view = dwi->dockWidget())
|
||||
return view->dockWidget();
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -15,12 +15,17 @@
|
||||
#include "kddockwidgets/Platform_qt.h"
|
||||
|
||||
class QQmlEngine;
|
||||
class QQuickItem;
|
||||
|
||||
namespace KDDockWidgets {
|
||||
|
||||
class QtQuickHelpers;
|
||||
class ViewFactory_qtquick;
|
||||
|
||||
namespace Controllers {
|
||||
class DockWidget;
|
||||
}
|
||||
|
||||
/// @brief implements functions specific to a particular platform
|
||||
/// A platform can be for example qtwidgets, qtquick, etc.
|
||||
class DOCKS_EXPORT Platform_qtquick : public Platform_qt
|
||||
@@ -45,6 +50,8 @@ public:
|
||||
void ungrabMouse() override;
|
||||
static Platform_qtquick *instance();
|
||||
|
||||
static Controllers::DockWidget *dockWidgetForItem(QQuickItem *);
|
||||
|
||||
#ifdef DOCKS_DEVELOPER_MODE
|
||||
explicit Platform_qtquick(int &argc, char **argv);
|
||||
void tests_initPlatform_impl() override;
|
||||
|
||||
Reference in New Issue
Block a user