diff options
author | Tim Jenssen <tim.jenssen@qt.io> | 2022-07-11 14:10:13 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2022-07-12 09:20:04 +0000 |
commit | d6c10e775d7535a177e069d4b86ed1330b0666dc (patch) | |
tree | d13c60151d145c13d77eca1aee8d04116dbd327a /share/qtcreator/qml | |
parent | a74582a9d399d83386757ac160ce1090f97a490a (diff) |
qmlpuppet: remove qmlprivategate DesignerSupport < Qt 5.6
Task-number: QTCREATORBUG-26600
Change-Id: I629c8cd1f497ed2dd354ff461aa890a77bdc2a01
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'share/qtcreator/qml')
23 files changed, 381 insertions, 2071 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.cpp index 76deb3a3b3..ed9be0d3d5 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.cpp @@ -24,9 +24,11 @@ ****************************************************************************/ #include "iconrenderer.h" + #include "../editor3d/selectionboxgeometry.h" #include "../editor3d/generalhelper.h" +#include <private/qquickdesignersupport_p.h> #include <QtQml/qqmlcomponent.h> #include <QtQml/qqmlengine.h> #include <QtQml/qqmlproperty.h> @@ -63,7 +65,7 @@ IconRenderer::IconRenderer(int size, const QString &filePath, const QString &sou void IconRenderer::setupRender() { - DesignerSupport::activateDesignerMode(); + QQuickDesignerSupport::activateDesignerMode(); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) DesignerSupport::activateDesignerWindowManager(); #endif diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.h index 6488024930..f7917ba41f 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.h @@ -28,11 +28,10 @@ #include <QtCore/qobject.h> #include <QtCore/qstring.h> -#include <designersupportdelegate.h> - QT_BEGIN_NAMESPACE class QQuickWindow; class QQuickItem; +class QQuickDesignerSupport; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) class QQuickRenderControl; class QRhi; @@ -66,7 +65,7 @@ private: QQuickWindow *m_window = nullptr; QQuickItem *m_contentItem = nullptr; QQuickItem *m_containerItem = nullptr; - DesignerSupport m_designerSupport; + std::unique_ptr<QQuickDesignerSupport> m_designerSupport; bool m_is3D = false; int m_focusStep = 0; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp index ad46fc86c3..53e42b0a71 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp @@ -80,7 +80,6 @@ #define NANOTRACE_SCOPE(cat, name) #endif -#include <designersupportdelegate.h> #include <QAbstractAnimation> #include <QDebug> #include <QDir> diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.cpp index 8bd21d9e9f..563b3a4702 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.cpp @@ -28,7 +28,7 @@ #include "qmlpropertychangesnodeinstance.h" #include <qmlprivategate.h> -#include <designersupportdelegate.h> +#include <private/qquickdesignersupport_p.h> namespace QmlDesigner { namespace Internal { @@ -62,7 +62,7 @@ void setAllNodesDirtyRecursive([[maybe_unused]] QQuickItem *parentItem) const QList<QQuickItem *> children = parentItem->childItems(); for (QQuickItem *childItem : children) setAllNodesDirtyRecursive(childItem); - DesignerSupport::addDirty(parentItem, QQuickDesignerSupport::Content); + QQuickDesignerSupport::addDirty(parentItem, QQuickDesignerSupport::Content); #endif } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5captureimagenodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5captureimagenodeinstanceserver.cpp index dccfb19d57..b6ac90a002 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5captureimagenodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5captureimagenodeinstanceserver.cpp @@ -34,6 +34,8 @@ #include <QQuickItem> #include <QQuickView> +#include <private/qquickdesignersupport_p.h> + namespace QmlDesigner { namespace { @@ -77,7 +79,7 @@ void Qt5CaptureImageNodeInstanceServer::collectItemChangesAndSendChangeCommands( if (QQuickItem *qitem = rooNodeInstance.rootQuickItem()) qitem->setClip(true); - DesignerSupport::polishItems(quickWindow()); + QQuickDesignerSupport::polishItems(quickWindow()); QImage image = renderImage(rooNodeInstance, m_minimumSize, m_maximumSize); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5capturepreviewnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5capturepreviewnodeinstanceserver.cpp index 53c82ccc8b..1c29cfb102 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5capturepreviewnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5capturepreviewnodeinstanceserver.cpp @@ -33,6 +33,8 @@ #include <QImage> #include <QQuickView> +#include <private/qquickdesignersupport_p.h> + namespace QmlDesigner { namespace { @@ -92,7 +94,7 @@ void Qt5CapturePreviewNodeInstanceServer::collectItemChangesAndSendChangeCommand if (!inFunction) { inFunction = true; - DesignerSupport::polishItems(quickWindow()); + QQuickDesignerSupport::polishItems(quickWindow()); QVector<CapturedDataCommand::StateData> stateDatas; stateDatas.push_back(collectStateData(rootNodeInstance(), nodeInstances(), 0)); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 12fba4d048..7d6c39e6f1 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -75,7 +75,7 @@ #include "../editor3d/linegeometry.h" #include "../editor3d/icongizmoimageprovider.h" -#include <designersupportdelegate.h> +#include <private/qquickdesignersupport_p.h> #include <qmlprivategate.h> #include <quickitemnodeinstance.h> @@ -195,7 +195,7 @@ void Qt5InformationNodeInstanceServer::createAuxiliaryQuickView(const QUrl &url, #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) viewData.window = new QQuickView(quickView()->engine(), quickView()); viewData.window->setFormat(quickView()->format()); - DesignerSupport::createOpenGLContext(static_cast<QQuickView *>(viewData.window.data())); + QQuickDesignerSupport::createOpenGLContext(static_cast<QQuickView *>(viewData.window.data())); #else viewData.renderControl = new QQuickRenderControl; viewData.window = new QQuickWindow(viewData.renderControl); @@ -211,7 +211,7 @@ void Qt5InformationNodeInstanceServer::createAuxiliaryQuickView(const QUrl &url, } #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - DesignerSupport::setRootItem(static_cast<QQuickView *>(viewData.window.data()), viewData.rootItem); + QQuickDesignerSupport::setRootItem(static_cast<QQuickView *>(viewData.window.data()), viewData.rootItem); #else viewData.window->contentItem()->setSize(viewData.rootItem->size()); viewData.window->setGeometry(0, 0, viewData.rootItem->width(), viewData.rootItem->height()); @@ -957,7 +957,7 @@ void Qt5InformationNodeInstanceServer::updateNodesRecursive(QQuickItem *item) if (item->flags() & QQuickItem::ItemHasContents) item->update(); } else { - DesignerSupport::updateDirtyNode(item); + QQuickDesignerSupport::updateDirtyNode(item); } } @@ -1394,18 +1394,18 @@ void Qt5InformationNodeInstanceServer::token(const TokenCommand &command) bool Qt5InformationNodeInstanceServer::isDirtyRecursiveForNonInstanceItems(QQuickItem *item) const { - static DesignerSupport::DirtyType informationsDirty = DesignerSupport::DirtyType(DesignerSupport::TransformUpdateMask - | DesignerSupport::ContentUpdateMask - | DesignerSupport::Visible - | DesignerSupport::ZValue - | DesignerSupport::OpacityValue); + static QQuickDesignerSupport::DirtyType informationsDirty = QQuickDesignerSupport::DirtyType(QQuickDesignerSupport::TransformUpdateMask + | QQuickDesignerSupport::ContentUpdateMask + | QQuickDesignerSupport::Visible + | QQuickDesignerSupport::ZValue + | QQuickDesignerSupport::OpacityValue); - if (DesignerSupport::isDirty(item, informationsDirty)) + if (QQuickDesignerSupport::isDirty(item, informationsDirty)) return true; foreach (QQuickItem *childItem, item->childItems()) { if (!hasInstanceForObject(childItem)) { - if (DesignerSupport::isDirty(childItem, informationsDirty)) + if (QQuickDesignerSupport::isDirty(childItem, informationsDirty)) return true; else if (isDirtyRecursiveForNonInstanceItems(childItem)) return true; @@ -1417,7 +1417,7 @@ bool Qt5InformationNodeInstanceServer::isDirtyRecursiveForNonInstanceItems(QQuic bool Qt5InformationNodeInstanceServer::isDirtyRecursiveForParentInstances(QQuickItem *item) const { - if (DesignerSupport::isDirty(item, DesignerSupport::TransformUpdateMask)) + if (QQuickDesignerSupport::isDirty(item, QQuickDesignerSupport::TransformUpdateMask)) return true; QQuickItem *parentItem = item->parentItem(); @@ -1883,7 +1883,7 @@ void Qt5InformationNodeInstanceServer::collectItemChangesAndSendChangeCommands() if (!inFunction) { inFunction = true; - DesignerSupport::polishItems(quickWindow()); + QQuickDesignerSupport::polishItems(quickWindow()); QSet<ServerNodeInstance> informationChangedInstanceSet; QVector<InstancePropertyPair> propertyChangedList; @@ -1898,7 +1898,7 @@ void Qt5InformationNodeInstanceServer::collectItemChangesAndSendChangeCommands() else if (isDirtyRecursiveForParentInstances(item)) informationChangedInstanceSet.insert(instance); - if (DesignerSupport::isDirty(item, DesignerSupport::ParentChanged)) { + if (QQuickDesignerSupport::isDirty(item, QQuickDesignerSupport::ParentChanged)) { m_parentChangedSet.insert(instance); informationChangedInstanceSet.insert(instance); } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.cpp index 8b1221a4f4..2dd18c58d8 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.cpp @@ -36,8 +36,6 @@ #include "qt5testnodeinstanceserver.h" #include "quickitemnodeinstance.h" -#include <designersupportdelegate.h> - #if defined(Q_OS_UNIX) #include <unistd.h> #elif defined(Q_OS_WIN) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp index 18ba701ecc..9f2bb28d4a 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp @@ -33,7 +33,7 @@ #include <QQuickView> #include <QQuickWindow> -#include <designersupportdelegate.h> +#include <private/qquickdesignersupport_p.h> #include <addimportcontainer.h> #include <createscenecommand.h> #include <reparentinstancescommand.h> @@ -69,7 +69,7 @@ Qt5NodeInstanceServer::Qt5NodeInstanceServer(NodeInstanceClientInterface *nodeIn : NodeInstanceServer(nodeInstanceClient) { if (!ViewConfig::isParticleViewMode()) - DesignerSupport::activateDesignerMode(); + QQuickDesignerSupport::activateDesignerMode(); } Qt5NodeInstanceServer::~Qt5NodeInstanceServer() @@ -106,7 +106,7 @@ void Qt5NodeInstanceServer::initializeView() QSurfaceFormat::setDefaultFormat(surfaceFormat); view->setFormat(surfaceFormat); - DesignerSupport::createOpenGLContext(view); + QQuickDesignerSupport::createOpenGLContext(view); m_qmlEngine = view->engine(); #else m_viewData.renderControl = new QQuickRenderControl; @@ -138,7 +138,7 @@ void Qt5NodeInstanceServer::setRootItem(QQuickItem *item) { m_viewData.rootItem = item; #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - DesignerSupport::setRootItem(quickView(), item); + QQuickDesignerSupport::setRootItem(quickView(), item); #else quickWindow()->setGeometry(0, 0, item->width(), item->height()); // Insert an extra item above the root to adjust root item position to 0,0 to make entire @@ -163,13 +163,13 @@ void Qt5NodeInstanceServer::resizeCanvasToRootItem() m_viewData.contentItem->setPosition(-m_viewData.rootItem->position()); #endif quickWindow()->resize(rootNodeInstance().boundingRect().size().toSize()); - DesignerSupport::addDirty(rootNodeInstance().rootQuickItem(), QQuickDesignerSupport::Size); + QQuickDesignerSupport::addDirty(rootNodeInstance().rootQuickItem(), QQuickDesignerSupport::Size); } void Qt5NodeInstanceServer::resetAllItems() { foreach (QQuickItem *item, allItems()) - DesignerSupport::resetDirty(item); + QQuickDesignerSupport::resetDirty(item); } void Qt5NodeInstanceServer::setupScene(const CreateSceneCommand &command) @@ -524,12 +524,12 @@ QImage Qt5NodeInstanceServer::grabItem([[maybe_unused]] QQuickItem *item) void Qt5NodeInstanceServer::refreshBindings() { - DesignerSupport::refreshExpressions(context()); + QQuickDesignerSupport::refreshExpressions(context()); } -DesignerSupport *Qt5NodeInstanceServer::designerSupport() +QQuickDesignerSupport *Qt5NodeInstanceServer::designerSupport() { - return &m_designerSupport; + return m_designerSupport.get(); } void Qt5NodeInstanceServer::createScene(const CreateSceneCommand &command) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h index 4c6dd2c743..6558e4f74c 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h @@ -29,11 +29,11 @@ #include <QtQuick/qquickwindow.h> #include "nodeinstanceserver.h" -#include <designersupportdelegate.h> QT_BEGIN_NAMESPACE class QQuickItem; class QQmlEngine; +class QQuickDesignerSupport; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) class QQuickRenderControl; class QRhi; @@ -62,7 +62,7 @@ public: QQmlEngine *engine() const override; void refreshBindings() override; - DesignerSupport *designerSupport(); + QQuickDesignerSupport *designerSupport(); void createScene(const CreateSceneCommand &command) override; void clearScene(const ClearSceneCommand &command) override; @@ -102,7 +102,7 @@ protected: private: RenderViewData m_viewData; - DesignerSupport m_designerSupport; + std::unique_ptr<QQuickDesignerSupport> m_designerSupport; QQmlEngine *m_qmlEngine = nullptr; }; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp index f61ba1a342..e2889350f1 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp @@ -33,7 +33,7 @@ #include <QQuickView> #include <QQuickItem> -#include <designersupportdelegate.h> +#include <private/qquickdesignersupport_p.h> namespace QmlDesigner { @@ -72,7 +72,7 @@ void Qt5PreviewNodeInstanceServer::collectItemChangesAndSendChangeCommands() if (!inFunction && nodeInstanceClient()->bytesToWrite() < 10000) { inFunction = true; - DesignerSupport::polishItems(quickWindow()); + QQuickDesignerSupport::polishItems(quickWindow()); QVector<ImageContainer> imageContainerVector; imageContainerVector.append(ImageContainer(0, renderPreviewImage(), -1)); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp index 59e7a4aa82..5ec06bf033 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp @@ -58,7 +58,7 @@ #include "dummycontextobject.h" -#include <designersupportdelegate.h> +#include <private/qquickdesignersupport_p.h> namespace QmlDesigner { @@ -74,33 +74,33 @@ void Qt5RenderNodeInstanceServer::collectItemChangesAndSendChangeCommands() if (!inFunction) { inFunction = true; - DesignerSupport::polishItems(quickWindow()); + QQuickDesignerSupport::polishItems(quickWindow()); if (quickWindow() && nodeInstanceClient()->bytesToWrite() < 10000) { bool windowDirty = false; foreach (QQuickItem *item, allItems()) { if (item) { if (Internal::QuickItemNodeInstance::unifiedRenderPath()) { - if (DesignerSupport::isDirty(item, DesignerSupport::AllMask)) { + if (QQuickDesignerSupport::isDirty(item, QQuickDesignerSupport::AllMask)) { windowDirty = true; break; } } else { if (hasInstanceForObject(item)) { - if (DesignerSupport::isDirty(item, DesignerSupport::ContentUpdateMask)) + if (QQuickDesignerSupport::isDirty(item, QQuickDesignerSupport::ContentUpdateMask)) m_dirtyInstanceSet.insert(instanceForObject(item)); if (QQuickItem *effectParent = parentEffectItem(item)) { - if ((DesignerSupport::isDirty( + if ((QQuickDesignerSupport::isDirty( item, - DesignerSupport::DirtyType( - DesignerSupport::TransformUpdateMask - | DesignerSupport::Visible - | DesignerSupport::ContentUpdateMask))) + QQuickDesignerSupport::DirtyType( + QQuickDesignerSupport::TransformUpdateMask + | QQuickDesignerSupport::Visible + | QQuickDesignerSupport::ContentUpdateMask))) && hasInstanceForObject(effectParent)) { m_dirtyInstanceSet.insert(instanceForObject(effectParent)); } } - } else if (DesignerSupport::isDirty(item, DesignerSupport::AllMask)) { + } else if (QQuickDesignerSupport::isDirty(item, QQuickDesignerSupport::AllMask)) { ServerNodeInstance ancestorInstance = findNodeInstanceForItem( item->parentItem()); if (ancestorInstance.isValid()) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5testnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5testnodeinstanceserver.cpp index 9edb567d5b..f6f8149162 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5testnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5testnodeinstanceserver.cpp @@ -25,9 +25,6 @@ #include "qt5testnodeinstanceserver.h" -#include <QQuickItem> -#include <QQuickView> - #include "servernodeinstance.h" #include "childrenchangeeventfilter.h" #include "propertyabstractcontainer.h" @@ -60,7 +57,10 @@ #include "dummycontextobject.h" -#include <designersupportdelegate.h> +#include <QQuickItem> +#include <QQuickView> + +#include <private/qquickdesignersupport_p.h> namespace QmlDesigner { @@ -257,7 +257,7 @@ void Qt5TestNodeInstanceServer::removeSharedMemory(const RemoveSharedMemoryComma void QmlDesigner::Qt5TestNodeInstanceServer::collectItemChangesAndSendChangeCommands() { - DesignerSupport::polishItems(quickWindow()); + QQuickDesignerSupport::polishItems(quickWindow()); QSet<ServerNodeInstance> informationChangedInstanceSet; QVector<InstancePropertyPair> propertyChangedList; @@ -272,7 +272,7 @@ void QmlDesigner::Qt5TestNodeInstanceServer::collectItemChangesAndSendChangeComm informationChangedInstanceSet.insert(instance); - if (DesignerSupport::isDirty(item, DesignerSupport::ParentChanged)) { + if (QQuickDesignerSupport::isDirty(item, QQuickDesignerSupport::ParentChanged)) { parentChangedSet.insert(instance); informationChangedInstanceSet.insert(instance); } @@ -342,18 +342,18 @@ void Qt5TestNodeInstanceServer::sendChildrenChangedCommand(const QList<ServerNod bool Qt5TestNodeInstanceServer::isDirtyRecursiveForNonInstanceItems(QQuickItem *item) const { - static DesignerSupport::DirtyType informationsDirty = DesignerSupport::DirtyType(DesignerSupport::TransformUpdateMask - | DesignerSupport::ContentUpdateMask - | DesignerSupport::Visible - | DesignerSupport::ZValue - | DesignerSupport::OpacityValue); + static QQuickDesignerSupport::DirtyType informationsDirty = QQuickDesignerSupport::DirtyType(QQuickDesignerSupport::TransformUpdateMask + | QQuickDesignerSupport::ContentUpdateMask + | QQuickDesignerSupport::Visible + | QQuickDesignerSupport::ZValue + | QQuickDesignerSupport::OpacityValue); - if (DesignerSupport::isDirty(item, informationsDirty)) + if (QQuickDesignerSupport::isDirty(item, informationsDirty)) return true; foreach (QQuickItem *childItem, item->childItems()) { if (!hasInstanceForObject(childItem)) { - if (DesignerSupport::isDirty(childItem, informationsDirty)) + if (QQuickDesignerSupport::isDirty(childItem, informationsDirty)) return true; else if (isDirtyRecursiveForNonInstanceItems(childItem)) return true; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp index 60d9060325..76fb43a598 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp @@ -31,6 +31,8 @@ #include <QtQuick/private/qquickitem_p.h> #include <QtQuick/private/qquickshadereffectsource_p.h> +#include <private/qquickdesignersupport_p.h> + #include <QQmlProperty> #include <QQmlExpression> #include <QQuickView> @@ -86,7 +88,7 @@ static QTransform transformForItem(QQuickItem *item, NodeInstanceServer *nodeIns if (isContentItem(item, nodeInstanceServer)) return QTransform(); - QTransform toParentTransform = DesignerSupport::parentTransform(item); + QTransform toParentTransform = QQuickDesignerSupport::parentTransform(item); if (item->parentItem() && !nodeInstanceServer->hasInstanceForObject(item->parentItem())) { return transformForItem(item->parentItem(), nodeInstanceServer) * toParentTransform; @@ -97,7 +99,7 @@ static QTransform transformForItem(QQuickItem *item, NodeInstanceServer *nodeIns QTransform QuickItemNodeInstance::transform() const { if (quickItem()->parentItem()) - return DesignerSupport::parentTransform(quickItem()); + return QQuickDesignerSupport::parentTransform(quickItem()); return QTransform(); } @@ -262,7 +264,7 @@ QStringList QuickItemNodeInstance::allStates() const { QStringList list; - QList<QObject*> stateList = DesignerSupport::statesForItem(quickItem()); + QList<QObject*> stateList = QQuickDesignerSupport::statesForItem(quickItem()); for (QObject *state : stateList) { QQmlProperty property(state, "name"); if (property.isValid()) @@ -277,7 +279,7 @@ void QuickItemNodeInstance::updateDirtyNode([[maybe_unused]] QQuickItem *item) #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) if (s_unifiedRenderPath) return; - DesignerSupport::updateDirtyNode(item); + QQuickDesignerSupport::updateDirtyNode(item); #endif } @@ -319,7 +321,7 @@ void QuickItemNodeInstance::setHiddenInEditor(bool hide) QRectF QuickItemNodeInstance::contentItemBoundingBox() const { if (contentItem()) { - QTransform contentItemTransform = DesignerSupport::parentTransform(contentItem()); + QTransform contentItemTransform = QQuickDesignerSupport::parentTransform(contentItem()); return contentItemTransform.mapRect(contentItem()->boundingRect()); } @@ -367,7 +369,7 @@ static QTransform contentTransformForItem(QQuickItem *item, NodeInstanceServer * { QTransform contentTransform; if (item->parentItem() && !nodeInstanceServer->hasInstanceForObject(item->parentItem())) { - contentTransform = DesignerSupport::parentTransform(item->parentItem()); + contentTransform = QQuickDesignerSupport::parentTransform(item->parentItem()); return contentTransformForItem(item->parentItem(), nodeInstanceServer) * contentTransform; } @@ -381,7 +383,7 @@ QTransform QuickItemNodeInstance::contentTransform() const QTransform QuickItemNodeInstance::sceneTransform() const { - return DesignerSupport::windowTransform(quickItem()); + return QQuickDesignerSupport::windowTransform(quickItem()); } double QuickItemNodeInstance::opacity() const @@ -418,7 +420,7 @@ QSizeF QuickItemNodeInstance::size() const { double width; - if (DesignerSupport::isValidHeight(quickItem())) { // isValidHeight is QQuickItemPrivate::get(item)->widthValid + if (QQuickDesignerSupport::isValidHeight(quickItem())) { // isValidHeight is QQuickItemPrivate::get(item)->widthValid width = quickItem()->width(); } else { width = quickItem()->implicitWidth(); @@ -426,7 +428,7 @@ QSizeF QuickItemNodeInstance::size() const double height; - if (DesignerSupport::isValidWidth(quickItem())) { // isValidWidth is QQuickItemPrivate::get(item)->heightValid + if (QQuickDesignerSupport::isValidWidth(quickItem())) { // isValidWidth is QQuickItemPrivate::get(item)->heightValid height = quickItem()->height(); } else { height = quickItem()->implicitHeight(); @@ -438,7 +440,7 @@ QSizeF QuickItemNodeInstance::size() const static QTransform contentItemTransformForItem(QQuickItem *item, NodeInstanceServer *nodeInstanceServer) { - QTransform toParentTransform = DesignerSupport::parentTransform(item); + QTransform toParentTransform = QQuickDesignerSupport::parentTransform(item); if (item->parentItem() && !nodeInstanceServer->hasInstanceForObject(item->parentItem())) { return transformForItem(item->parentItem(), nodeInstanceServer) * toParentTransform; @@ -457,7 +459,7 @@ QTransform QuickItemNodeInstance::contentItemTransform() const int QuickItemNodeInstance::penWidth() const { - return DesignerSupport::borderWidth(quickItem()); + return QQuickDesignerSupport::borderWidth(quickItem()); } double QuickItemNodeInstance::x() const @@ -576,7 +578,7 @@ bool QuickItemNodeInstance::isRenderable() const QList<ServerNodeInstance> QuickItemNodeInstance::stateInstances() const { QList<ServerNodeInstance> instanceList; - QList<QObject*> stateList = DesignerSupport::statesForItem(quickItem()); + QList<QObject*> stateList = QQuickDesignerSupport::statesForItem(quickItem()); foreach (QObject *state, stateList) { if (state && nodeInstanceServer()->hasInstanceForObject(state)) @@ -604,7 +606,7 @@ void QuickItemNodeInstance::setHasContent(bool hasContent) m_hasContent = hasContent; } -DesignerSupport *QuickItemNodeInstance::designerSupport() const +QQuickDesignerSupport *QuickItemNodeInstance::designerSupport() const { return qt5NodeInstanceServer()->designerSupport(); } @@ -623,7 +625,7 @@ void QuickItemNodeInstance::updateDirtyNodesRecursive(QQuickItem *parentItem) co QmlPrivateGate::disableNativeTextRendering(parentItem); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - DesignerSupport::updateDirtyNode(parentItem); + QQuickDesignerSupport::updateDirtyNode(parentItem); #endif } @@ -642,7 +644,7 @@ void QuickItemNodeInstance::setAllNodesDirtyRecursive([[maybe_unused]] QQuickIte const QList<QQuickItem *> children = parentItem->childItems(); for (QQuickItem *childItem : children) setAllNodesDirtyRecursive(childItem); - DesignerSupport::addDirty(parentItem, QQuickDesignerSupport::Content); + QQuickDesignerSupport::addDirty(parentItem, QQuickDesignerSupport::Content); #endif } @@ -930,7 +932,7 @@ void QuickItemNodeInstance::resetProperty(const PropertyName &name) if (name == "layer.enabled" || name == "layer.effect") setAllNodesDirtyRecursive(quickItem()); - DesignerSupport::resetAnchor(quickItem(), QString::fromUtf8(name)); + QQuickDesignerSupport::resetAnchor(quickItem(), QString::fromUtf8(name)); if (name == "anchors.fill") { resetHorizontal(); @@ -964,12 +966,12 @@ void QuickItemNodeInstance::resetProperty(const PropertyName &name) bool QuickItemNodeInstance::isAnchoredByChildren() const { - return DesignerSupport::areChildrenAnchoredTo(quickItem(), quickItem()); + return QQuickDesignerSupport::areChildrenAnchoredTo(quickItem(), quickItem()); } bool QuickItemNodeInstance::hasAnchor(const PropertyName &name) const { - return DesignerSupport::hasAnchor(quickItem(), QString::fromUtf8(name)); + return QQuickDesignerSupport::hasAnchor(quickItem(), QString::fromUtf8(name)); } static bool isValidAnchorName(const PropertyName &name) @@ -989,11 +991,11 @@ static bool isValidAnchorName(const PropertyName &name) QPair<PropertyName, ServerNodeInstance> QuickItemNodeInstance::anchor(const PropertyName &name) const { - if (!isValidAnchorName(name) || !DesignerSupport::hasAnchor(quickItem(), QString::fromUtf8(name))) + if (!isValidAnchorName(name) || !QQuickDesignerSupport::hasAnchor(quickItem(), QString::fromUtf8(name))) return ObjectNodeInstance::anchor(name); QPair<QString, QObject*> nameObjectPair = - DesignerSupport::anchorLineTarget(quickItem(), QString::fromUtf8(name), context()); + QQuickDesignerSupport::anchorLineTarget(quickItem(), QString::fromUtf8(name), context()); QObject *targetObject = nameObjectPair.second; PropertyName targetName = nameObjectPair.first.toUtf8(); @@ -1013,7 +1015,7 @@ bool QuickItemNodeInstance::isAnchoredBySibling() const if (quickItem()->parentItem()) { foreach (QQuickItem *siblingItem, quickItem()->parentItem()->childItems()) { // search in siblings for a anchor to this item if (siblingItem) { - if (DesignerSupport::isAnchoredTo(siblingItem, quickItem())) + if (QQuickDesignerSupport::isAnchoredTo(siblingItem, quickItem())) return true; } } @@ -1049,13 +1051,13 @@ void QuickItemNodeInstance::markRepeaterParentDirty() const // If a Repeater instance was changed in any way, the parent must be marked dirty to rerender it const QByteArray type("QQuickRepeater"); if (ServerNodeInstance::isSubclassOf(item, type)) - DesignerSupport::addDirty(parentItem, QQuickDesignerSupport::Content); + QQuickDesignerSupport::addDirty(parentItem, QQuickDesignerSupport::Content); // Repeater's parent must also be dirtied when a child of a repeater was changed if (ServerNodeInstance::isSubclassOf(parentItem, type)) { QQuickItem *parentsParent = parentItem->parentItem(); if (parentsParent) - DesignerSupport::addDirty(parentsParent, QQuickDesignerSupport::Content); + QQuickDesignerSupport::addDirty(parentsParent, QQuickDesignerSupport::Content); } } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h index 50cf494e8e..f2ee6f3aac 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h @@ -30,7 +30,10 @@ #include "objectnodeinstance.h" #include <QQuickItem> -#include <designersupportdelegate.h> + +QT_BEGIN_NAMESPACE +class QQuickDesignerSupport; +QT_END_NAMESPACE namespace QmlDesigner { namespace Internal { @@ -115,7 +118,7 @@ protected: void setMovable(bool movable); void setResizable(bool resizable); void setHasContent(bool hasContent); - DesignerSupport *designerSupport() const; + QQuickDesignerSupport *designerSupport() const; Qt5NodeInstanceServer *qt5NodeInstanceServer() const; void updateDirtyNodesRecursive(QQuickItem *parentItem) const; void updateAllDirtyNodesRecursive(QQuickItem *parentItem) const; diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.cpp deleted file mode 100644 index 8562901f6f..0000000000 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.cpp +++ /dev/null @@ -1,292 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "designercustomobjectdata.h" - -#include <qmlprivategate.h> - -#include <QQmlContext> -#include <QQmlEngine> - -#include <private/qqmlbinding_p.h> - -namespace QmlDesigner { - -namespace Internal { - -namespace QmlPrivateGate { - -QHash<QObject *, DesignerCustomObjectData*> m_objectToDataHash; - -DesignerCustomObjectData::DesignerCustomObjectData(QObject *object) - : m_object(object) -{ - if (object) { - populateResetHashes(); - m_objectToDataHash.insert(object, this); - QObject::connect(object, &QObject::destroyed, [=] { - m_objectToDataHash.remove(object); - delete this; - }); - } -} - -void DesignerCustomObjectData::registerData(QObject *object) -{ - new DesignerCustomObjectData(object); -} - -DesignerCustomObjectData *DesignerCustomObjectData::get(QObject *object) -{ - return m_objectToDataHash.value(object); -} - -QVariant DesignerCustomObjectData::getResetValue(QObject *object, const PropertyName &propertyName) -{ - DesignerCustomObjectData* data = get(object); - - if (data) - return data->getResetValue(propertyName); - - return QVariant(); -} - -void DesignerCustomObjectData::doResetProperty(QObject *object, QQmlContext *context, const PropertyName &propertyName) -{ - DesignerCustomObjectData* data = get(object); - - if (data) - data->doResetProperty(context, propertyName); -} - -bool DesignerCustomObjectData::hasValidResetBinding(QObject *object, const PropertyName &propertyName) -{ - DesignerCustomObjectData* data = get(object); - - if (data) - return data->hasValidResetBinding(propertyName); - - return false; -} - -bool DesignerCustomObjectData::hasBindingForProperty(QObject *object, QQmlContext *context, const PropertyName &propertyName, bool *hasChanged) -{ - DesignerCustomObjectData* data = get(object); - - if (data) - return data->hasBindingForProperty(context, propertyName, hasChanged); - - return false; -} - -void DesignerCustomObjectData::setPropertyBinding(QObject *object, QQmlContext *context, const PropertyName &propertyName, const QString &expression) -{ - DesignerCustomObjectData* data = get(object); - - if (data) - data->setPropertyBinding(context, propertyName, expression); -} - -void DesignerCustomObjectData::keepBindingFromGettingDeleted(QObject *object, QQmlContext *context, const PropertyName &propertyName) -{ - DesignerCustomObjectData* data = get(object); - - if (data) - data->keepBindingFromGettingDeleted(context, propertyName); -} - -void DesignerCustomObjectData::populateResetHashes() -{ - PropertyNameList propertyNameList = QmlPrivateGate::propertyNameListForWritableProperties(object()); - - foreach (const PropertyName &propertyName, propertyNameList) { - QQmlProperty property(object(), QString::fromUtf8(propertyName), QQmlEngine::contextForObject(object())); - -#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) - QQmlAbstractBinding::Ptr binding = QQmlAbstractBinding::Ptr(QQmlPropertyPrivate::binding(property)); -#else - QQmlAbstractBinding::Pointer binding = QQmlAbstractBinding::getPointer(QQmlPropertyPrivate::binding(property)); -#endif - - if (binding) { - m_resetBindingHash.insert(propertyName, binding); - } else if (property.isWritable()) { - m_resetValueHash.insert(propertyName, property.read()); - } - } - - m_resetValueHash.insert("Layout.rowSpan", 1); - m_resetValueHash.insert("Layout.columnSpan", 1); - m_resetValueHash.insert("Layout.fillHeight", false); - m_resetValueHash.insert("Layout.fillWidth", false); -} - -QObject *DesignerCustomObjectData::object() const -{ - return m_object; -} - -QVariant DesignerCustomObjectData::getResetValue(const PropertyName &propertyName) const -{ - return m_resetValueHash.value(propertyName); -} - -void DesignerCustomObjectData::doResetProperty(QQmlContext *context, const PropertyName &propertyName) -{ - QQmlProperty property(object(), QString::fromUtf8(propertyName), context); - - if (!property.isValid()) - return; - - QVariant oldValue = property.read(); - if (oldValue.type() == QVariant::Url) { - QUrl url = oldValue.toUrl(); - QString path = url.toLocalFile(); - /* ### TODO - if (QFileInfo(path).exists() && nodeInstanceServer()) - nodeInstanceServer()->removeFilePropertyFromFileSystemWatcher(object(), propertyName, path); - */ - } - - - QQmlAbstractBinding *binding = QQmlPropertyPrivate::binding(property); - if (binding && !(hasValidResetBinding(propertyName) && getResetBinding(propertyName) == binding)) { - binding->setEnabled(false, 0); -#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) - //Refcounting is taking care -#else - binding->destroy(); -#endif - } - - - if (hasValidResetBinding(propertyName)) { - QQmlAbstractBinding *binding = getResetBinding(propertyName); - -#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) - QQmlBinding *qmlBinding = dynamic_cast<QQmlBinding*>(binding); - if (qmlBinding) - qmlBinding->setTarget(property); - QQmlPropertyPrivate::setBinding(binding, QQmlPropertyPrivate::None, QQmlPropertyPrivate::DontRemoveBinding); - if (qmlBinding) - qmlBinding->update(); -#else - QQmlPropertyPrivate::setBinding(property, binding, QQmlPropertyPrivate::DontRemoveBinding); - binding->update(); -#endif - - } else if (property.isResettable()) { - property.reset(); - } else if (property.propertyTypeCategory() == QQmlProperty::List) { - QQmlListReference list = qvariant_cast<QQmlListReference>(property.read()); - - if (!QmlPrivateGate::hasFullImplementedListInterface(list)) { - qWarning() << "Property list interface not fully implemented for Class " << property.property().typeName() << " in property " << property.name() << "!"; - return; - } - - list.clear(); - } else if (property.isWritable()) { - if (property.read() == getResetValue(propertyName)) - return; - - property.write(getResetValue(propertyName)); - } -} - -bool DesignerCustomObjectData::hasValidResetBinding(const PropertyName &propertyName) const -{ - return m_resetBindingHash.contains(propertyName) && m_resetBindingHash.value(propertyName).data(); -} - -QQmlAbstractBinding *DesignerCustomObjectData::getResetBinding(const PropertyName &propertyName) const -{ - return m_resetBindingHash.value(propertyName).data(); -} - -bool DesignerCustomObjectData::hasBindingForProperty(QQmlContext *context, const PropertyName &propertyName, bool *hasChanged) const -{ - if (QmlPrivateGate::isPropertyBlackListed(propertyName)) - return false; - - QQmlProperty property(object(), QString::fromUtf8(propertyName), context); - - bool hasBinding = QQmlPropertyPrivate::binding(property); - - if (hasChanged) { - *hasChanged = hasBinding != m_hasBindingHash.value(propertyName, false); - if (*hasChanged) - m_hasBindingHash.insert(propertyName, hasBinding); - } - - return QQmlPropertyPrivate::binding(property); -} - -void DesignerCustomObjectData::setPropertyBinding(QQmlContext *context, const PropertyName &propertyName, const QString &expression) -{ - QQmlProperty property(object(), QString::fromUtf8(propertyName), context); - - if (!property.isValid()) - return; - - if (property.isProperty()) { - QQmlBinding *binding = new QQmlBinding(expression, object(), context); - binding->setTarget(property); - binding->setNotifyOnValueChanged(true); - -#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) - QQmlPropertyPrivate::setBinding(binding, QQmlPropertyPrivate::None, QQmlPropertyPrivate::DontRemoveBinding); - //Refcounting is taking take care of deletion -#else - QQmlAbstractBinding *oldBinding = QQmlPropertyPrivate::setBinding(property, binding); - if (oldBinding && !hasValidResetBinding(propertyName)) - oldBinding->destroy(); -#endif - binding->update(); - if (binding->hasError()) { - if (property.property().userType() == QVariant::String) - property.write(QVariant(QString("#%1#").arg(expression))); - } - - } else { - qWarning() << Q_FUNC_INFO << ": Cannot set binding for property" << propertyName << ": property is unknown for type"; - } -} - -void DesignerCustomObjectData::keepBindingFromGettingDeleted( - [[maybe_unused]] QQmlContext *context, [[maybe_unused]] const PropertyName &propertyName) -{ -#if (QT_VERSION < QT_VERSION_CHECK(5, 6, 0)) - QQmlProperty property(object(), QString::fromUtf8(propertyName), context); - QQmlPropertyPrivate::setBinding(property, 0, QQmlPropertyPrivate::BypassInterceptor - | QQmlPropertyPrivate::DontRemoveBinding); -#endif -} - - -} // namespace QmlPrivateGate -} // namespace Internal -} // namespace QmlDesigner - diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.h b/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.h deleted file mode 100644 index c7030fe400..0000000000 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.h +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#pragma once - -#include "nodeinstanceglobal.h" - -#include <QHash> -#include <QObject> -#include <QVariant> - -#include <private/qqmlbinding_p.h> - -QT_BEGIN_NAMESPACE -class QQmlContext; -QT_END_NAMESPACE - -namespace QmlDesigner { - -namespace Internal { - -namespace QmlPrivateGate { - -class DesignerCustomObjectData -{ -public: - static void registerData(QObject *object); - static DesignerCustomObjectData *get(QObject *object); - static QVariant getResetValue(QObject *object, const PropertyName &propertyName); - static void doResetProperty(QObject *object, QQmlContext *context, const PropertyName &propertyName); - static bool hasValidResetBinding(QObject *object, const PropertyName &propertyName); - static bool hasBindingForProperty(QObject *object, QQmlContext *context, const PropertyName &propertyName, bool *hasChanged); - static void setPropertyBinding(QObject *object, QQmlContext *context, const PropertyName &propertyName, const QString &expression); - static void keepBindingFromGettingDeleted(QObject *object, QQmlContext *context, const PropertyName &propertyName); - -private: - DesignerCustomObjectData(QObject *object); - void populateResetHashes(); - QObject *object() const; - QVariant getResetValue(const PropertyName &propertyName) const; - void doResetProperty(QQmlContext *context, const PropertyName &propertyName); - bool hasValidResetBinding(const PropertyName &propertyName) const; - QQmlAbstractBinding *getResetBinding(const PropertyName &propertyName) const; - bool hasBindingForProperty(QQmlContext *context, const PropertyName &propertyName, bool *hasChanged) const; - void setPropertyBinding(QQmlContext *context, const PropertyName &propertyName, const QString &expression); - void keepBindingFromGettingDeleted(QQmlContext *context, const PropertyName &propertyName); - - QObject *m_object; - QHash<PropertyName, QVariant> m_resetValueHash; -#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) - QHash<PropertyName, QQmlAbstractBinding::Ptr> m_resetBindingHash; -#else - QHash<PropertyName, QWeakPointer<QQmlAbstractBinding> > m_resetBindingHash; -#endif - mutable QHash<PropertyName, bool> m_hasBindingHash; -}; - -} // namespace QmlPrivateGate -} // namespace Internal -} // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/designersupportdelegate.h b/share/qtcreator/qml/qmlpuppet/qmlprivategate/designersupportdelegate.h deleted file mode 100644 index aaae84b47b..0000000000 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/designersupportdelegate.h +++ /dev/null @@ -1,30 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) -#include <private/qquickdesignersupport_p.h> -#else -#include <designersupport.h> -#endif diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.cpp deleted file mode 100644 index 420234a645..0000000000 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.cpp +++ /dev/null @@ -1,358 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "metaobject.h" - -#include <QSharedPointer> -#include <QMetaProperty> -#include <qnumeric.h> -#include <QDebug> - -#include <private/qqmlengine_p.h> -#include <private/qqmlpropertycache_p.h> - -namespace QmlDesigner { - -namespace Internal { - -namespace QmlPrivateGate { - -static QHash<QDynamicMetaObjectData *, bool> nodeInstanceMetaObjectList; -static void (*notifyPropertyChangeCallBack)(QObject*, const PropertyName &propertyName) = 0; - -struct MetaPropertyData { - inline QPair<QVariant, bool> &getDataRef(int idx) { - while (m_data.count() <= idx) - m_data << QPair<QVariant, bool>(QVariant(), false); - return m_data[idx]; - } - - inline QVariant &getData(int idx) { - QPair<QVariant, bool> &prop = getDataRef(idx); - if (!prop.second) { - prop.first = QVariant(); - prop.second = true; - } - return prop.first; - } - - inline bool hasData(int idx) const { - if (idx >= m_data.count()) - return false; - return m_data[idx].second; - } - - inline int count() { return m_data.count(); } - - QList<QPair<QVariant, bool> > m_data; -}; - -static bool constructedMetaData(const QQmlVMEMetaData* data) -{ - return data->propertyCount == 0 -#if QT_VERSION < QT_VERSION_CHECK(5, 6, 0) - && data->varPropertyCount == 0 -#endif - && data->aliasCount == 0 - && data->signalCount == 0 - && data->methodCount == 0; -} - -static QQmlVMEMetaData* fakeMetaData() -{ - QQmlVMEMetaData* data = new QQmlVMEMetaData; -#if QT_VERSION < QT_VERSION_CHECK(5, 6, 0) - data->varPropertyCount = 0; -#endif - data->propertyCount = 0; - data->aliasCount = 0; - data->signalCount = 0; - data->methodCount = 0; - - return data; -} - -static const QQmlVMEMetaData* vMEMetaDataForObject(QObject *object) -{ - QQmlVMEMetaObject *metaObject = QQmlVMEMetaObject::get(object); - if (metaObject) - return metaObject->metaData; - - return fakeMetaData(); -} - -static QQmlPropertyCache *cacheForObject(QObject *object, QQmlEngine *engine) -{ - QQmlVMEMetaObject *metaObject = QQmlVMEMetaObject::get(object); - if (metaObject) - return metaObject->cache; - - return QQmlEnginePrivate::get(engine)->cache(object); -} - -MetaObject* MetaObject::getNodeInstanceMetaObject(QObject *object, QQmlEngine *engine) -{ - //Avoid setting up multiple MetaObjects on the same QObject - QObjectPrivate *op = QObjectPrivate::get(object); - QDynamicMetaObjectData *parent = op->metaObject; - if (nodeInstanceMetaObjectList.contains(parent)) - return static_cast<MetaObject *>(parent); - - // we just create one and the ownership goes automatically to the object in nodeinstance see init method - return new MetaObject(object, engine); -} - -void MetaObject::init(QObject *object, QQmlEngine *engine) -{ - //Creating QQmlOpenMetaObjectType - m_type = new QQmlOpenMetaObjectType(metaObjectParent(), engine); - m_type->addref(); - //Assigning type to this - copyTypeMetaObject(); - - //Assign this to object - QObjectPrivate *op = QObjectPrivate::get(object); - op->metaObject = this; - - //create cache - cache = m_cache = QQmlEnginePrivate::get(engine)->cache(this); - cache->addref(); - - //If our parent is not a VMEMetaObject we just se the flag to false again - if (constructedMetaData(metaData)) - QQmlData::get(object)->hasVMEMetaObject = false; - - nodeInstanceMetaObjectList.insert(this, true); - hasAssignedMetaObjectData = true; -} - -MetaObject::MetaObject(QObject *object, QQmlEngine *engine) - : QQmlVMEMetaObject(object, cacheForObject(object, engine), vMEMetaDataForObject(object)), - m_context(engine->contextForObject(object)), - m_data(new MetaPropertyData), - m_cache(0) -{ - init(object, engine); - - QQmlData *ddata = QQmlData::get(object, false); - - //Assign cache to object - if (ddata && ddata->propertyCache) { - cache->setParent(ddata->propertyCache); - cache->invalidate(engine, this); - ddata->propertyCache = m_cache; - } - -} - -MetaObject::~MetaObject() -{ - if (cache->count() > 1) // qml is crashing because the property cache is not removed from the engine - cache->release(); - else - m_type->release(); - - nodeInstanceMetaObjectList.remove(this); -} - -void MetaObject::createNewDynamicProperty(const QString &name) -{ - [[maybe_unused]] int id = m_type->createProperty(name.toUtf8()); - copyTypeMetaObject(); - setValue(id, QVariant()); - Q_ASSERT(id >= 0); - - //Updating cache - QQmlPropertyCache *oldParent = m_cache->parent(); - QQmlEnginePrivate::get(m_context->engine())->cache(this)->invalidate(m_context->engine(), this); - m_cache->setParent(oldParent); - - QQmlProperty property(myObject(), name, m_context); - Q_ASSERT(property.isValid()); -} - -void MetaObject::setValue(int id, const QVariant &value) -{ - QPair<QVariant, bool> &prop = m_data->getDataRef(id); - prop.first = propertyWriteValue(id, value); - prop.second = true; - QMetaObject::activate(myObject(), id + m_type->signalOffset(), 0); -} - -QVariant MetaObject::propertyWriteValue(int, const QVariant &value) -{ - return value; -} - -const QAbstractDynamicMetaObject *MetaObject::dynamicMetaObjectParent() const -{ - if (QQmlVMEMetaObject::parent.isT1()) - return QQmlVMEMetaObject::parent.asT1()->toDynamicMetaObject(QQmlVMEMetaObject::object); - else - return 0; -} - -const QMetaObject *MetaObject::metaObjectParent() const -{ - if (QQmlVMEMetaObject::parent.isT1()) - return QQmlVMEMetaObject::parent.asT1()->toDynamicMetaObject(QQmlVMEMetaObject::object); - - return QQmlVMEMetaObject::parent.asT2(); -} - -int MetaObject::propertyOffset() const -{ - return cache->propertyOffset(); -} - -int MetaObject::openMetaCall(QMetaObject::Call call, int id, void **a) -{ - if ((call == QMetaObject::ReadProperty || call == QMetaObject::WriteProperty) - && id >= m_type->propertyOffset()) { - int propId = id - m_type->propertyOffset(); - if (call == QMetaObject::ReadProperty) { - //propertyRead(propId); - *reinterpret_cast<QVariant *>(a[0]) = m_data->getData(propId); - } else if (call == QMetaObject::WriteProperty) { - if (propId <= m_data->count() || m_data->m_data[propId].first != *reinterpret_cast<QVariant *>(a[0])) { - //propertyWrite(propId); - QPair<QVariant, bool> &prop = m_data->getDataRef(propId); - prop.first = propertyWriteValue(propId, *reinterpret_cast<QVariant *>(a[0])); - prop.second = true; - //propertyWritten(propId); - activate(myObject(), m_type->signalOffset() + propId, 0); - } - } - return -1; - } else { - QAbstractDynamicMetaObject *directParent = parent(); - if (directParent) - return directParent->metaCall(call, id, a); - else - return myObject()->qt_metacall(call, id, a); - } -} - -int MetaObject::metaCall(QMetaObject::Call call, int id, void **a) -{ - int metaCallReturnValue = -1; - - const QMetaProperty propertyById = QQmlVMEMetaObject::property(id); - - if (call == QMetaObject::WriteProperty - && propertyById.userType() == QMetaType::QVariant - && reinterpret_cast<QVariant *>(a[0])->type() == QVariant::Double - && qIsNaN(reinterpret_cast<QVariant *>(a[0])->toDouble())) { - return -1; - } - - if (call == QMetaObject::WriteProperty - && propertyById.userType() == QMetaType::Double - && qIsNaN(*reinterpret_cast<double*>(a[0]))) { - return -1; - } - - if (call == QMetaObject::WriteProperty - && propertyById.userType() == QMetaType::Float - && qIsNaN(*reinterpret_cast<float*>(a[0]))) { - return -1; - } - - QVariant oldValue; - - if (call == QMetaObject::WriteProperty && !propertyById.hasNotifySignal()) - { - oldValue = propertyById.read(myObject()); - } - - QAbstractDynamicMetaObject *directParent = parent(); - if (directParent && id < directParent->propertyOffset()) { - metaCallReturnValue = directParent->metaCall(call, id, a); - } else { - openMetaCall(call, id, a); - } - - /* - if ((call == QMetaObject::WriteProperty || call == QMetaObject::ReadProperty) && metaCallReturnValue < 0) { - if (objectNodeInstance - && objectNodeInstance->nodeInstanceServer() - && objectNodeInstance->nodeInstanceServer()->dummyContextObject() - && !(objectNodeInstance && !objectNodeInstance->isRootNodeInstance() - && property(id).name() == QLatin1String("parent"))) { - - QObject *contextDummyObject = objectNodeInstance->nodeInstanceServer()->dummyContextObject(); - int propertyIndex = contextDummyObject->metaObject()->indexOfProperty(propertyById.name()); - if (propertyIndex >= 0) - metaCallReturnValue = contextDummyObject->qt_metacall(call, propertyIndex, a); - } - } - */ - - if (call == QMetaObject::WriteProperty - && !propertyById.hasNotifySignal() - && oldValue != propertyById.read(myObject())) - notifyPropertyChange(id); - - return metaCallReturnValue; -} - -void MetaObject::notifyPropertyChange(int id) -{ - const QMetaProperty propertyById = property(id); - - if (id < propertyOffset()) { - if (notifyPropertyChangeCallBack) - notifyPropertyChangeCallBack(myObject(), propertyById.name()); - } else { - if (notifyPropertyChangeCallBack) - notifyPropertyChangeCallBack(myObject(), name(id - propertyOffset())); - } -} - -int MetaObject::count() const -{ - return m_type->propertyCount(); -} - -QByteArray MetaObject::name(int idx) const -{ - return m_type->propertyName(idx); -} - -void MetaObject::copyTypeMetaObject() -{ - *static_cast<QMetaObject *>(this) = *m_type->metaObject(); -} - -void MetaObject::registerNotifyPropertyChangeCallBack(void (*callback)(QObject *, const PropertyName &)) -{ - notifyPropertyChangeCallBack = callback; -} - -} // namespace QmlPrivateGate - -} // namespace Internal - -} // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.h b/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.h deleted file mode 100644 index ccb2879f15..0000000000 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.h +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#pragma once - -#include <QQmlContext> -#include <QScopedPointer> -#include <private/qqmlopenmetaobject_p.h> -#include <private/qqmlvmemetaobject_p.h> - -#include "nodeinstanceglobal.h" - -namespace QmlDesigner { - -namespace Internal { - -namespace QmlPrivateGate { - -void createNewDynamicProperty(QObject *object, QQmlEngine *engine, const QString &name); -void registerNodeInstanceMetaObject(QObject *object, QQmlEngine *engine); - -struct MetaPropertyData; - -class MetaObject : public QQmlVMEMetaObject -{ -public: - ~MetaObject() override; - - static void registerNotifyPropertyChangeCallBack(void (*callback)(QObject*, const PropertyName &propertyName)); - -protected: - MetaObject(QObject *object, QQmlEngine *engine); - static MetaObject* getNodeInstanceMetaObject(QObject *object, QQmlEngine *engine); - - void createNewDynamicProperty(const QString &name); - int openMetaCall(QMetaObject::Call _c, int _id, void **_a); - using QQmlVMEMetaObject::metaCall; - int metaCall(QMetaObject::Call _c, int _id, void **_a) override; - void notifyPropertyChange(int id); - void setValue(int id, const QVariant &value); - QVariant propertyWriteValue(int, const QVariant &); - - QObject *myObject() const { return QQmlVMEMetaObject::object; } - QAbstractDynamicMetaObject *parent() const { return const_cast<QAbstractDynamicMetaObject *>(dynamicMetaObjectParent()); } - - const QAbstractDynamicMetaObject *dynamicMetaObjectParent() const; - - const QMetaObject *metaObjectParent() const; - - int propertyOffset() const; - - int count() const; - QByteArray name(int) const; - - void copyTypeMetaObject(); - -private: - void init(QObject *, QQmlEngine *engine); - - QPointer<QQmlContext> m_context; - QQmlOpenMetaObjectType *m_type; - QScopedPointer<MetaPropertyData> m_data; - //QAbstractDynamicMetaObject *m_parent; - QQmlPropertyCache *m_cache; - - - friend void createNewDynamicProperty(QObject *object, QQmlEngine *engine, const QString &name); - friend void registerNodeInstanceMetaObject(QObject *object, QQmlEngine *engine); -}; - -} // namespace QmlPrivateGate -} // namespace Internal -} // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp index af83af5dd3..6e2a7a1014 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp @@ -25,15 +25,25 @@ #include "qmlprivategate.h" -#include "metaobject.h" -#include "designercustomobjectdata.h" - #include <objectnodeinstance.h> #include <nodeinstanceserver.h> #include <QQuickItem> #include <QQmlComponent> #include <QFileInfo> +#include <QProcessEnvironment> + +#include <private/qabstractfileengine_p.h> +#include <private/qfsfileengine_p.h> + +#include <private/qquickdesignersupport_p.h> +#include <private/qquickdesignersupportmetainfo_p.h> +#include <private/qquickdesignersupportitems_p.h> +#include <private/qquickdesignersupportproperties_p.h> +#include <private/qquickdesignersupportpropertychanges_p.h> +#include <private/qquickdesignersupportstates_p.h> +#include <private/qqmldata_p.h> +#include <private/qqmlcomponentattached_p.h> #include <private/qabstractanimation_p.h> #include <private/qobject_p.h> @@ -42,18 +52,16 @@ #include <private/qquicktextinput_p.h> #include <private/qquicktextedit_p.h> #include <private/qquicktransition_p.h> +#include <private/qquickloader_p.h> #include <private/qquickanimation_p.h> #include <private/qqmlmetatype_p.h> #include <private/qqmltimer_p.h> -#include <private/qquickstategroup_p.h> -#include <private/qquickpropertychanges_p.h> -#include <private/qquickstateoperations_p.h> - - -#include <designersupportdelegate.h> -#include <cstring> +#ifdef QUICK3D_MODULE +#include <private/qquick3dobject_p.h> +#include <private/qquick3drepeater_p.h> +#endif namespace QmlDesigner { @@ -63,326 +71,171 @@ namespace QmlPrivateGate { bool isPropertyBlackListed(const QmlDesigner::PropertyName &propertyName) { - if (propertyName.contains(".") && propertyName.contains("__")) - return true; - - if (propertyName.count(".") > 1) - return true; - - return false; + return QQuickDesignerSupportProperties::isPropertyBlackListed(propertyName); } -static void addToPropertyNameListIfNotBlackListed(PropertyNameList *propertyNameList, const PropertyName &propertyName) +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)) + +static void addToPropertyNameListIfNotBlackListed( + PropertyNameList *propertyNameList, const QQuickQQuickDesignerSupport::PropertyName &propertyName) { - if (!isPropertyBlackListed(propertyName)) + if (!QQuickDesignerSupportProperties::isPropertyBlackListed(propertyName)) propertyNameList->append(propertyName); } -PropertyNameList allPropertyNames(QObject *object, - const PropertyName &baseName, - QObjectList *inspectedObjects) +PropertyNameList allPropertyNamesInline(QObject *object, + const PropertyName &baseName = {}, + QObjectList *inspectedObjects = nullptr, + int depth = 0) { - PropertyNameList propertyNameList; + QQuickQQuickDesignerSupport::PropertyNameList propertyNameList; QObjectList localObjectList; - if (inspectedObjects == 0) + if (inspectedObjects == nullptr) inspectedObjects = &localObjectList; - - if (inspectedObjects->contains(object)) + if (depth > 2) return propertyNameList; - inspectedObjects->append(object); - + if (!inspectedObjects->contains(object)) + inspectedObjects->append(object); const QMetaObject *metaObject = object->metaObject(); - for (int index = 0; index < metaObject->propertyCount(); ++index) { - QMetaProperty metaProperty = metaObject->property(index); - QQmlProperty declarativeProperty(object, QLatin1String(metaProperty.name())); - if (declarativeProperty.isValid() && declarativeProperty.propertyTypeCategory() == QQmlProperty::Object) { - if (declarativeProperty.name() != "parent") { - QObject *childObject = QQmlMetaType::toQObject(declarativeProperty.read()); - if (childObject) - propertyNameList.append(allPropertyNames(childObject, baseName + PropertyName(metaProperty.name()) + '.', inspectedObjects)); - } - } else if (QQmlValueTypeFactory::valueType(metaProperty.userType())) { - QQmlValueType *valueType = QQmlValueTypeFactory::valueType(metaProperty.userType()); - valueType->setValue(metaProperty.read(object)); - propertyNameList.append(baseName + PropertyName(metaProperty.name())); - propertyNameList.append(allPropertyNames(valueType, baseName + PropertyName(metaProperty.name()) + '.', inspectedObjects)); - } else { - propertyNameList.append(baseName + PropertyName(metaProperty.name())); - } - } - - return propertyNameList; -} - -PropertyNameList propertyNameListForWritableProperties(QObject *object, - const PropertyName &baseName, - QObjectList *inspectedObjects) -{ - PropertyNameList propertyNameList; - - QObjectList localObjectList; - if (inspectedObjects == 0) - inspectedObjects = &localObjectList; - - - if (inspectedObjects->contains(object)) - return propertyNameList; - - inspectedObjects->append(object); + QStringList deferredPropertyNames; + const int namesIndex = metaObject->indexOfClassInfo("DeferredPropertyNames"); + if (namesIndex != -1) { + QMetaClassInfo classInfo = metaObject->classInfo(namesIndex); + deferredPropertyNames = QString::fromUtf8(classInfo.value()).split(QLatin1Char(',')); + } - const QMetaObject *metaObject = object->metaObject(); for (int index = 0; index < metaObject->propertyCount(); ++index) { QMetaProperty metaProperty = metaObject->property(index); - QQmlProperty declarativeProperty(object, QLatin1String(metaProperty.name())); - if (declarativeProperty.isValid() && !declarativeProperty.isWritable() && declarativeProperty.propertyTypeCategory() == QQmlProperty::Object) { - if (declarativeProperty.name() != "parent") { + QQmlProperty declarativeProperty(object, QString::fromUtf8(metaProperty.name())); + if (declarativeProperty.isValid() + && declarativeProperty.propertyTypeCategory() == QQmlProperty::Object) { + if (declarativeProperty.name() != QLatin1String("parent") + && !deferredPropertyNames.contains(declarativeProperty.name())) { QObject *childObject = QQmlMetaType::toQObject(declarativeProperty.read()); if (childObject) - propertyNameList.append(propertyNameListForWritableProperties(childObject, baseName + PropertyName(metaProperty.name()) + '.', inspectedObjects)); + propertyNameList.append( + allPropertyNamesInline(childObject, + baseName + + QQuickQQuickDesignerSupport::PropertyName( + metaProperty.name()) + + '.', + inspectedObjects, + depth + 1)); } - } else if (QQmlValueTypeFactory::valueType(metaProperty.userType())) { - QQmlValueType *valueType = QQmlValueTypeFactory::valueType(metaProperty.userType()); + } else if (QQmlGadgetPtrWrapper *valueType + = QQmlGadgetPtrWrapper::instance(qmlEngine(object), metaProperty.userType())) { valueType->setValue(metaProperty.read(object)); - propertyNameList.append(propertyNameListForWritableProperties(valueType, baseName + PropertyName(metaProperty.name()) + '.', inspectedObjects)); - } - - if (metaProperty.isReadable() && metaProperty.isWritable()) { - addToPropertyNameListIfNotBlackListed(&propertyNameList, baseName + PropertyName(metaProperty.name())); + propertyNameList.append(baseName + + QQuickQQuickDesignerSupport::PropertyName(metaProperty.name())); + propertyNameList.append( + allPropertyNamesInline(valueType, + baseName + + QQuickQQuickDesignerSupport::PropertyName(metaProperty.name()) + + '.', + inspectedObjects, + depth + 1)); + } else { + addToPropertyNameListIfNotBlackListed(&propertyNameList, + baseName + + QQuickQQuickDesignerSupport::PropertyName( + metaProperty.name())); } } return propertyNameList; } +#endif -static void stopAnimation(QObject *object) -{ - if (object == 0) - return; - - QQuickTransition *transition = qobject_cast<QQuickTransition*>(object); - QQuickAbstractAnimation *animation = qobject_cast<QQuickAbstractAnimation*>(object); - QQmlTimer *timer = qobject_cast<QQmlTimer*>(object); - if (transition) { - transition->setFromState(""); - transition->setToState(""); - } else if (animation) { -// QQuickScriptAction *scriptAimation = qobject_cast<QQuickScriptAction*>(animation); -// if (scriptAimation) FIXME -// scriptAimation->setScript(QQmlScriptString()); - animation->setLoops(1); - animation->complete(); - animation->setDisableUserControl(); - } else if (timer) { - timer->blockSignals(true); - } -} - -static void allSubObject(QObject *object, QObjectList &objectList) +PropertyNameList allPropertyNames(QObject *object) { - // don't add null pointer and stop if the object is already in the list - if (!object || objectList.contains(object)) - return; - - objectList.append(object); - - for (int index = QObject::staticMetaObject.propertyOffset(); - index < object->metaObject()->propertyCount(); - index++) { - QMetaProperty metaProperty = object->metaObject()->property(index); - - // search recursive in property objects - if (metaProperty.isReadable() - && metaProperty.isWritable() - && QQmlMetaType::isQObject(metaProperty.userType())) { - if (strcmp(metaProperty.name(), "parent") != 0) { - QObject *propertyObject = QQmlMetaType::toQObject(metaProperty.read(object)); - allSubObject(propertyObject, objectList); - } - - } - - // search recursive in property object lists - if (metaProperty.isReadable() - && QQmlMetaType::isList(metaProperty.userType())) { - QQmlListReference list(object, metaProperty.name()); - if (list.canCount() && list.canAt()) { - for (int i = 0; i < list.count(); i++) { - QObject *propertyObject = list.at(i); - allSubObject(propertyObject, objectList); - - } - } - } - } - - // search recursive in object children list - foreach (QObject *childObject, object->children()) { - allSubObject(childObject, objectList); - } - - // search recursive in quick item childItems list - QQuickItem *quickItem = qobject_cast<QQuickItem*>(object); - if (quickItem) { - foreach (QQuickItem *childItem, quickItem->childItems()) { - allSubObject(childItem, objectList); - } - } +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + return QQuickDesignerSupportProperties::allPropertyNames(object); +#elif QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + return allPropertyNamesInline(object); +#else + return QQuickDesignerSupportProperties::allPropertyNames(object); +#endif } -static QString qmlDesignerRCPath() +PropertyNameList propertyNameListForWritableProperties(QObject *object) { - static const QString qmlDesignerRcPathsString = QString::fromLocal8Bit( - qgetenv("QMLDESIGNER_RC_PATHS")); - return qmlDesignerRcPathsString; + return QQuickDesignerSupportProperties::propertyNameListForWritableProperties(object); } -static void fixResourcePathsForObject(QObject *object) +void tweakObjects(QObject *object) { - static const bool qmlDesignerRcPathsIsEmpty = qmlDesignerRCPath().isEmpty(); - if (qmlDesignerRcPathsIsEmpty) - return; - - PropertyNameList propertyNameList = propertyNameListForWritableProperties(object); - - foreach (const PropertyName &propertyName, propertyNameList) { - QQmlProperty property(object, QString::fromUtf8(propertyName), QQmlEngine::contextForObject(object)); - - const QVariant value = property.read(); - const QVariant fixedValue = fixResourcePaths(value); - if (value != fixedValue) { - property.write(fixedValue); - } - } + QQuickDesignerSupportItems::tweakObjects(object); } -void tweakObjects(QObject *object) +void createNewDynamicProperty(QObject *object, QQmlEngine *engine, const QString &name) { - QObjectList objectList; - allSubObject(object, objectList); - foreach (QObject* childObject, objectList) { - stopAnimation(childObject); - fixResourcePathsForObject(childObject); - } + QQuickDesignerSupportProperties::createNewDynamicProperty(object, engine, name); } -static QObject *createDummyWindow(QQmlEngine *engine) +void registerNodeInstanceMetaObject(QObject *object, QQmlEngine *engine) { - QQmlComponent component(engine, QUrl(QStringLiteral("qrc:/qtquickplugin/mockfiles/Window.qml"))); - return component.create(); + QQuickDesignerSupportProperties::registerNodeInstanceMetaObject(object, engine); } -static bool isWindowMetaObject(const QMetaObject *metaObject) +static bool isMetaObjectofType(const QMetaObject *metaObject, const QByteArray &type) { if (metaObject) { - if (metaObject->className() == QByteArrayLiteral("QWindow")) + if (metaObject->className() == type) return true; - return isWindowMetaObject(metaObject->superClass()); + return isMetaObjectofType(metaObject->superClass(), type); } return false; } -static bool isWindow(QObject *object) { +static bool isQuickStyleItem(QObject *object) +{ if (object) - return isWindowMetaObject(object->metaObject()); + return isMetaObjectofType(object->metaObject(), "QQuickStyleItem"); return false; } -static QQmlType *getQmlType(const QString &typeName, int majorNumber, int minorNumber) -{ - return QQmlMetaType::qmlType(typeName, majorNumber, minorNumber); -} - -static bool isCrashingType(QQmlType *type) +static bool isDelegateModel(QObject *object) { - if (type) { - if (type->qmlTypeName() == QStringLiteral("QtMultimedia/MediaPlayer")) - return true; - - if (type->qmlTypeName() == QStringLiteral("QtMultimedia/Audio")) - return true; - - if (type->qmlTypeName() == QStringLiteral("QtQuick.Controls/MenuItem")) - return true; - - if (type->qmlTypeName() == QStringLiteral("QtQuick.Controls/Menu")) - return true; - - if (type->qmlTypeName() == QStringLiteral("QtQuick/Timer")) - return true; - } + if (object) + return isMetaObjectofType(object->metaObject(), "QQmlDelegateModel"); return false; } -void createNewDynamicProperty(QObject *object, QQmlEngine *engine, const QString &name) -{ - MetaObject::getNodeInstanceMetaObject(object, engine)->createNewDynamicProperty(name); -} - -void registerNodeInstanceMetaObject(QObject *object, QQmlEngine *engine) -{ - // we just create one and the ownership goes automatically to the object in nodeinstance see init method - MetaObject::getNodeInstanceMetaObject(object, engine); -} - +// This is used in share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp QObject *createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QQmlContext *context) { - [[maybe_unused]] ComponentCompleteDisabler disableComponentComplete; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - QObject *object = 0; - QQmlType *type = getQmlType(typeName, majorNumber, minorNumber); - - if (isCrashingType(type)) { - object = new QObject; - } else if (type) { -#if (QT_VERSION >= QT_VERSION_CHECK(5, 2, 0)) // TODO remove hack later if we only support >= 5.2 - if ( type->isComposite()) { - object = createComponent(type->sourceUrl(), context); - } else + QTypeRevision revision = QTypeRevision::zero(); + if (majorNumber > 0) + revision = QTypeRevision::fromVersion(majorNumber, minorNumber); + return QQuickDesignerSupportItems::createPrimitive(typeName, revision, context); +#else + return QQuickDesignerSupportItems::createPrimitive(typeName, majorNumber, minorNumber, context); #endif - { - if (type->typeName() == "QQmlComponent") { - object = new QQmlComponent(context->engine(), 0); - } else { - object = type->create(); - } - } - - if (isWindow(object)) { - delete object; - object = createDummyWindow(context->engine()); - } - - } - - if (!object) { - qWarning() << "QuickDesigner: Cannot create an object of type" - << QString("%1 %2,%3").arg(typeName).arg(majorNumber).arg(minorNumber) - << "- type isn't known to declarative meta type system"; - } - - tweakObjects(object); - - if (object && QQmlEngine::contextForObject(object) == 0) - QQmlEngine::setContextForObject(object, context); - - QQmlEngine::setObjectOwnership(object, QQmlEngine::CppOwnership); +} - return object; +static QString qmlDesignerRCPath() +{ + static const QString qmlDesignerRcPathsString = QString::fromLocal8Bit( + qgetenv("QMLDESIGNER_RC_PATHS")); + return qmlDesignerRcPathsString; } QVariant fixResourcePaths(const QVariant &value) { - if (value.type() == QVariant::Url) { + if (value.type() == QVariant::Url) + { const QUrl url = value.toUrl(); if (url.scheme() == QLatin1String("qrc")) { const QString path = QLatin1String("qrc:") + url.path(); @@ -416,7 +269,7 @@ QVariant fixResourcePaths(const QVariant &value) if (QFileInfo::exists(fixedPath)) { fixedPath.replace(QLatin1String("//"), QLatin1String("/")); fixedPath.replace(QLatin1Char('\\'), QLatin1Char('/')); - return fixedPath; + return QUrl::fromLocalFile(fixedPath); } } } @@ -426,24 +279,9 @@ QVariant fixResourcePaths(const QVariant &value) return value; } - QObject *createComponent(const QUrl &componentUrl, QQmlContext *context) { - [[maybe_unused]] ComponentCompleteDisabler disableComponentComplete; - - QQmlComponent component(context->engine(), componentUrl); - - QObject *object = component.beginCreate(context); - QmlPrivateGate::tweakObjects(object); - component.completeCreate(); - QQmlEngine::setObjectOwnership(object, QQmlEngine::CppOwnership); - - if (component.isError()) { - qWarning() << "Error in:" << Q_FUNC_INFO << componentUrl; - foreach (const QQmlError &error, component.errors()) - qWarning() << error; - } - return object; + return QQuickDesignerSupportItems::createComponent(componentUrl, context); } bool hasFullImplementedListInterface(const QQmlListReference &list) @@ -453,32 +291,90 @@ bool hasFullImplementedListInterface(const QQmlListReference &list) void registerCustomData(QObject *object) { - DesignerCustomObjectData::registerData(object); + QQuickDesignerSupportProperties::registerCustomData(object); } QVariant getResetValue(QObject *object, const PropertyName &propertyName) { - return DesignerCustomObjectData::getResetValue(object, propertyName); + if (propertyName == "Layout.rowSpan") + return 1; + else if (propertyName == "Layout.columnSpan") + return 1; + else if (propertyName == "Layout.fillHeight") + return false; + else if (propertyName == "Layout.fillWidth") + return false; + else + return QQuickDesignerSupportProperties::getResetValue(object, propertyName); +} + +static void setProperty(QObject *object, QQmlContext *context, const PropertyName &propertyName, const QVariant &value) +{ + QQmlProperty property(object, QString::fromUtf8(propertyName), context); + property.write(value); } void doResetProperty(QObject *object, QQmlContext *context, const PropertyName &propertyName) { - DesignerCustomObjectData::doResetProperty(object, context, propertyName); + if (propertyName == "Layout.rowSpan") + setProperty(object, context, propertyName, getResetValue(object, propertyName)); + else if (propertyName == "Layout.columnSpan") + setProperty(object, context, propertyName, getResetValue(object, propertyName)); + else if (propertyName == "Layout.fillHeight") + setProperty(object, context, propertyName, getResetValue(object, propertyName)); + else if (propertyName == "Layout.fillWidth") + setProperty(object, context, propertyName, getResetValue(object, propertyName)); + else + QQuickDesignerSupportProperties::doResetProperty(object, context, propertyName); } bool hasValidResetBinding(QObject *object, const PropertyName &propertyName) { - return DesignerCustomObjectData::hasValidResetBinding(object, propertyName); + if (propertyName == "Layout.rowSpan") + return true; + else if (propertyName == "Layout.columnSpan") + return true; + else if (propertyName == "Layout.fillHeight") + return true; + else if (propertyName == "Layout.fillWidth") + return true; + return QQuickDesignerSupportProperties::hasValidResetBinding(object, propertyName); } bool hasBindingForProperty(QObject *object, QQmlContext *context, const PropertyName &propertyName, bool *hasChanged) { - return DesignerCustomObjectData::hasBindingForProperty(object, context, propertyName, hasChanged); + return QQuickDesignerSupportProperties::hasBindingForProperty(object, context, propertyName, hasChanged); } void setPropertyBinding(QObject *object, QQmlContext *context, const PropertyName &propertyName, const QString &expression) { - DesignerCustomObjectData::setPropertyBinding(object, context, propertyName, expression); + QQuickDesignerSupportProperties::setPropertyBinding(object, context, propertyName, expression); +} + +void emitComponentComplete(QObject *item) +{ + if (!item) + return; + + QQmlData *data = QQmlData::get(item); + if (data && data->context) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QQmlComponentAttached *componentAttached = data->context->componentAttached; +#else + QQmlComponentAttached *componentAttached = data->context->componentAttacheds(); +#endif + while (componentAttached) { + if (componentAttached->parent()) + if (componentAttached->parent() == item) + emit componentAttached->completed(); + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + componentAttached = componentAttached->next; +#else + componentAttached = componentAttached->next(); +#endif + } + } } void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInstanceServer) @@ -486,9 +382,16 @@ void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInsta if (object) { QQuickItem *item = qobject_cast<QQuickItem*>(object); - if (item && DesignerSupport::isComponentComplete(item)) + if (item && QQuickDesignerSupport::isComponentComplete(item)) + return; +#ifdef QUICK3D_MODULE + auto obj3d = qobject_cast<QQuick3DRepeater *>(object); + if (obj3d && QQuick3DObjectPrivate::get(obj3d)->componentComplete) return; +#endif + if (!nodeInstanceServer->hasInstanceForObject(item)) + emitComponentComplete(object); QList<QObject*> childList = object->children(); if (item) { @@ -503,12 +406,21 @@ void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInsta doComponentCompleteRecursive(child, nodeInstanceServer); } - if (item) { - static_cast<QQmlParserStatus*>(item)->componentComplete(); - } else { - QQmlParserStatus *qmlParserStatus = dynamic_cast< QQmlParserStatus*>(object); - if (qmlParserStatus) - qmlParserStatus->componentComplete(); + if (!isQuickStyleItem(object) && !isDelegateModel(object)) { + if (item) { + static_cast<QQmlParserStatus *>(item)->componentComplete(); + } else { + QQmlParserStatus *qmlParserStatus = dynamic_cast<QQmlParserStatus *>(object); + if (qmlParserStatus) { + qmlParserStatus->componentComplete(); + auto *anim = dynamic_cast<QQuickAbstractAnimation *>(object); + if (anim && ViewConfig::isParticleViewMode()) { + nodeInstanceServer->addAnimation(anim); + anim->setEnableUserControl(); + anim->stop(); + } + } + } } } } @@ -516,145 +428,80 @@ void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInsta void keepBindingFromGettingDeleted(QObject *object, QQmlContext *context, const PropertyName &propertyName) { - DesignerCustomObjectData::keepBindingFromGettingDeleted(object, context, propertyName); + QQuickDesignerSupportProperties::keepBindingFromGettingDeleted(object, context, propertyName); } bool objectWasDeleted(QObject *object) { - return QObjectPrivate::get(object)->wasDeleted; + return QQuickDesignerSupportItems::objectWasDeleted(object); } void disableNativeTextRendering(QQuickItem *item) { - QQuickText *text = qobject_cast<QQuickText*>(item); - if (text) - text->setRenderType(QQuickText::QtRendering); - - QQuickTextInput *textInput = qobject_cast<QQuickTextInput*>(item); - if (textInput) - textInput->setRenderType(QQuickTextInput::QtRendering); - - QQuickTextEdit *textEdit = qobject_cast<QQuickTextEdit*>(item); - if (textEdit) - textEdit->setRenderType(QQuickTextEdit::QtRendering); + QQuickDesignerSupportItems::disableNativeTextRendering(item); } void disableTextCursor(QQuickItem *item) { - foreach (QQuickItem *childItem, item->childItems()) - disableTextCursor(childItem); - - QQuickTextInput *textInput = qobject_cast<QQuickTextInput*>(item); - if (textInput) - textInput->setCursorVisible(false); - - QQuickTextEdit *textEdit = qobject_cast<QQuickTextEdit*>(item); - if (textEdit) - textEdit->setCursorVisible(false); + QQuickDesignerSupportItems::disableTextCursor(item); } void disableTransition(QObject *object) { - QQuickTransition *transition = qobject_cast<QQuickTransition*>(object); - Q_ASSERT(transition); - transition->setToState("invalidState"); - transition->setFromState("invalidState"); + QQuickDesignerSupportItems::disableTransition(object); } void disableBehaivour(QObject *object) { - QQuickBehavior* behavior = qobject_cast<QQuickBehavior*>(object); - Q_ASSERT(behavior); - behavior->setEnabled(false); + QQuickDesignerSupportItems::disableBehaivour(object); } void stopUnifiedTimer() { - QUnifiedTimer::instance()->setSlowdownFactor(0.00001); - QUnifiedTimer::instance()->setSlowModeEnabled(true); + QQuickDesignerSupportItems::stopUnifiedTimer(); } bool isPropertyQObject(const QMetaProperty &metaProperty) { - return QQmlMetaType::isQObject(metaProperty.userType()); + return QQuickDesignerSupportProperties::isPropertyQObject(metaProperty); } QObject *readQObjectProperty(const QMetaProperty &metaProperty, QObject *object) { - return QQmlMetaType::toQObject(metaProperty.read(object)); + return QQuickDesignerSupportProperties::readQObjectProperty(metaProperty, object); } namespace States { bool isStateActive(QObject *object, QQmlContext *context) { - QQuickState *stateObject = qobject_cast<QQuickState*>(object); - - if (!stateObject) - return false; - QQuickStateGroup *stateGroup = stateObject->stateGroup(); - - QQmlProperty property(object, "name", context); - - return stateObject && stateGroup && stateGroup->state() == property.read(); + return QQuickDesignerSupportStates::isStateActive(object, context); } void activateState(QObject *object, QQmlContext *context) { - QQuickState *stateObject = qobject_cast<QQuickState*>(object); - - if (!stateObject) - return; - - QQuickStateGroup *stateGroup = stateObject->stateGroup(); - - QQmlProperty property(object, "name", context); - - stateGroup->setState(property.read().toString()); + QQuickDesignerSupportStates::activateState(object, context); } void deactivateState(QObject *object) { - QQuickState *stateObject = qobject_cast<QQuickState*>(object); - - if (!stateObject) - return; - - QQuickStateGroup *stateGroup = stateObject->stateGroup(); - - if (stateGroup) - stateGroup->setState(QString()); + QQuickDesignerSupportStates::deactivateState(object); } bool changeValueInRevertList(QObject *state, QObject *target, const PropertyName &propertyName, const QVariant &value) { - QQuickState *stateObject = qobject_cast<QQuickState*>(state); - - if (!stateObject) - return false; - - return stateObject->changeValueInRevertList(target, QString::fromUtf8(propertyName), value); + return QQuickDesignerSupportStates::changeValueInRevertList(state, target, propertyName, value); } bool updateStateBinding(QObject *state, QObject *target, const PropertyName &propertyName, const QString &expression) { - QQuickState *stateObject = qobject_cast<QQuickState*>(state); - - if (!stateObject) - return false; - - return stateObject->changeValueInRevertList(target, QString::fromUtf8(propertyName), expression); + return QQuickDesignerSupportStates::updateStateBinding(state, target, propertyName, expression); } -bool resetStateProperty(QObject *state, QObject *target, const PropertyName &propertyName, const QVariant & /* resetValue */) +bool resetStateProperty(QObject *state, QObject *target, const PropertyName &propertyName, const QVariant &value) { - QQuickState *stateObject = qobject_cast<QQuickState*>(state); - - if (!stateObject) - return false; - - return stateObject->removeEntryFromRevertList(target, QString::fromUtf8(propertyName)); + return QQuickDesignerSupportStates::resetStateProperty(state, target, propertyName, value); } } //namespace States @@ -663,137 +510,135 @@ namespace PropertyChanges { void detachFromState(QObject *propertyChanges) { - QQuickPropertyChanges *propertyChange = qobject_cast<QQuickPropertyChanges*>(propertyChanges); - - if (!propertyChange) - return; - - propertyChange->detachFromState(); + return QQuickDesignerSupportPropertyChanges::detachFromState(propertyChanges); } void attachToState(QObject *propertyChanges) { - QQuickPropertyChanges *propertyChange = qobject_cast<QQuickPropertyChanges*>(propertyChanges); - - if (!propertyChange) - return; - - propertyChange->attachToState(); + return QQuickDesignerSupportPropertyChanges::attachToState(propertyChanges); } QObject *targetObject(QObject *propertyChanges) { - QQuickPropertyChanges *propertyChange = qobject_cast<QQuickPropertyChanges*>(propertyChanges); - - if (!propertyChange) - return 0; - - return propertyChange->object(); + return QQuickDesignerSupportPropertyChanges::targetObject(propertyChanges); } void removeProperty(QObject *propertyChanges, const PropertyName &propertyName) { - QQuickPropertyChanges *propertyChange = qobject_cast<QQuickPropertyChanges*>(propertyChanges); - - if (!propertyChange) - return; - - propertyChange->removeProperty(QString::fromUtf8(propertyName)); + QQuickDesignerSupportPropertyChanges::removeProperty(propertyChanges, propertyName); } QVariant getProperty(QObject *propertyChanges, const PropertyName &propertyName) { - QQuickPropertyChanges *propertyChange = qobject_cast<QQuickPropertyChanges*>(propertyChanges); - - if (!propertyChange) - return QVariant(); - - return propertyChange->property(QString::fromUtf8(propertyName)); + return QQuickDesignerSupportPropertyChanges::getProperty(propertyChanges, propertyName); } void changeValue(QObject *propertyChanges, const PropertyName &propertyName, const QVariant &value) { - QQuickPropertyChanges *propertyChange = qobject_cast<QQuickPropertyChanges*>(propertyChanges); - - if (!propertyChange) - return; - - propertyChange->changeValue(QString::fromUtf8(propertyName), value); + QQuickDesignerSupportPropertyChanges::changeValue(propertyChanges, propertyName, value); } void changeExpression(QObject *propertyChanges, const PropertyName &propertyName, const QString &expression) { - QQuickPropertyChanges *propertyChange = qobject_cast<QQuickPropertyChanges*>(propertyChanges); - - if (!propertyChange) - return; - - propertyChange->changeExpression(QString::fromUtf8(propertyName), expression); + QQuickDesignerSupportPropertyChanges::changeExpression(propertyChanges, propertyName, expression); } QObject *stateObject(QObject *propertyChanges) { - QQuickPropertyChanges *propertyChange = qobject_cast<QQuickPropertyChanges*>(propertyChanges); - - if (!propertyChange) - return 0; - - return propertyChange->state(); + return QQuickDesignerSupportPropertyChanges::stateObject(propertyChanges); } bool isNormalProperty(const PropertyName &propertyName) { - QMetaObject metaObject = QQuickPropertyChanges::staticMetaObject; - - return (metaObject.indexOfProperty(propertyName) > 0); // 'restoreEntryValues', 'explicit' + return QQuickDesignerSupportPropertyChanges::isNormalProperty(propertyName); } - } // namespace PropertyChanges bool isSubclassOf(QObject *object, const QByteArray &superTypeName) { - if (object == 0) - return false; - - const QMetaObject *metaObject = object->metaObject(); - - while (metaObject) { - QQmlType *qmlType = QQmlMetaType::qmlType(metaObject); - if (qmlType && qmlType->qmlTypeName() == superTypeName) // ignore version numbers - return true; - - if (metaObject->className() == superTypeName) - return true; - - metaObject = metaObject->superClass(); - } - - return false; + return QQuickDesignerSupportMetaInfo::isSubclassOf(object, superTypeName); } void getPropertyCache(QObject *object, QQmlEngine *engine) { - QQmlEnginePrivate::get(engine)->cache(object->metaObject()); +#if QT_VERSION < QT_VERSION_CHECK(6, 4, 0) + QQuickDesignerSupportProperties::getPropertyCache(object, engine); +#else + Q_UNUSED(engine); + QQuickDesignerSupportProperties::getPropertyCache(object); +#endif } void registerNotifyPropertyChangeCallBack(void (*callback)(QObject *, const PropertyName &)) { - MetaObject::registerNotifyPropertyChangeCallBack(callback); + QQuickDesignerSupportMetaInfo::registerNotifyPropertyChangeCallBack(callback); } ComponentCompleteDisabler::ComponentCompleteDisabler() { - DesignerSupport::disableComponentComplete(); + QQuickDesignerSupport::disableComponentComplete(); } ComponentCompleteDisabler::~ComponentCompleteDisabler() { - DesignerSupport::enableComponentComplete(); + QQuickDesignerSupport::enableComponentComplete(); +} + +class QrcEngineHandler : public QAbstractFileEngineHandler +{ +public: + QAbstractFileEngine *create(const QString &fileName) const final; +}; + +QAbstractFileEngine *QrcEngineHandler::create(const QString &fileName) const +{ + if (fileName.startsWith(":/qt-project.org")) + return nullptr; + + if (fileName.startsWith(":/qtquickplugin")) + return nullptr; + + if (fileName.startsWith(":/")) { + const QStringList searchPaths = qmlDesignerRCPath().split(';'); + foreach (const QString &qrcPath, searchPaths) { + const QStringList qrcDefintion = qrcPath.split('='); + if (qrcDefintion.count() == 2) { + QString fixedPath = fileName; + fixedPath.replace(":" + qrcDefintion.first(), qrcDefintion.last() + '/'); + + if (fileName == fixedPath) + return nullptr; + + if (QFileInfo::exists(fixedPath)) { + fixedPath.replace("//", "/"); + fixedPath.replace('\\', '/'); + return new QFSFileEngine(fixedPath); + } + } + } + } + + return nullptr; } +static QrcEngineHandler* s_qrcEngineHandler = nullptr; + +class EngineHandlerDeleter +{ +public: + EngineHandlerDeleter() + {} + ~EngineHandlerDeleter() + { delete s_qrcEngineHandler; } +}; + void registerFixResourcePathsForObjectCallBack() { + static EngineHandlerDeleter deleter; + + if (!s_qrcEngineHandler) + s_qrcEngineHandler = new QrcEngineHandler(); } } // namespace QmlPrivateGate diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.pri b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.pri index a72b032488..896ab52b00 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.pri +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.pri @@ -1,45 +1,7 @@ INCLUDEPATH += $$PWD/ -# in case we are building the puppet inside qtcreator we don't have the qtcreator.pri where this function comes from -defineTest(minQtVersion) { - maj = $$1 - min = $$2 - patch = $$3 - isEqual(QT_MAJOR_VERSION, $$maj) { - isEqual(QT_MINOR_VERSION, $$min) { - isEqual(QT_PATCH_VERSION, $$patch) { - return(true) - } - greaterThan(QT_PATCH_VERSION, $$patch) { - return(true) - } - } - greaterThan(QT_MINOR_VERSION, $$min) { - return(true) - } - } - greaterThan(QT_MAJOR_VERSION, $$maj) { - return(true) - } - return(false) -} - -minQtVersion(5, 6, 0) { HEADERS += \ $$PWD/qmlprivategate.h SOURCES += \ - $$PWD/qmlprivategate_56.cpp - -} else { - -HEADERS += \ - $$PWD/qmlprivategate.h \ - $$PWD/metaobject.h \ - $$PWD/designercustomobjectdata.h - -SOURCES += \ - $$PWD/qmlprivategate.cpp \ - $$PWD/metaobject.cpp \ - $$PWD/designercustomobjectdata.cpp -} + $$PWD/qmlprivategate.cpp diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp deleted file mode 100644 index ba8c365ef8..0000000000 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp +++ /dev/null @@ -1,647 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "qmlprivategate.h" - -#include "designercustomobjectdata.h" - -#include <objectnodeinstance.h> -#include <nodeinstanceserver.h> - -#include <QQuickItem> -#include <QQmlComponent> -#include <QFileInfo> -#include <QProcessEnvironment> - -#include <private/qabstractfileengine_p.h> -#include <private/qfsfileengine_p.h> - -#include <private/qquickdesignersupport_p.h> -#include <private/qquickdesignersupportmetainfo_p.h> -#include <private/qquickdesignersupportitems_p.h> -#include <private/qquickdesignersupportproperties_p.h> -#include <private/qquickdesignersupportpropertychanges_p.h> -#include <private/qquickdesignersupportstates_p.h> -#include <private/qqmldata_p.h> -#include <private/qqmlcomponentattached_p.h> - -#include <private/qabstractanimation_p.h> -#include <private/qobject_p.h> -#include <private/qquickbehavior_p.h> -#include <private/qquicktext_p.h> -#include <private/qquicktextinput_p.h> -#include <private/qquicktextedit_p.h> -#include <private/qquicktransition_p.h> -#include <private/qquickloader_p.h> - -#include <private/qquickanimation_p.h> -#include <private/qqmlmetatype_p.h> -#include <private/qqmltimer_p.h> - -#ifdef QUICK3D_MODULE -#include <private/qquick3dobject_p.h> -#include <private/qquick3drepeater_p.h> -#endif - -namespace QmlDesigner { - -namespace Internal { - -namespace QmlPrivateGate { - -bool isPropertyBlackListed(const QmlDesigner::PropertyName &propertyName) -{ - return QQuickDesignerSupportProperties::isPropertyBlackListed(propertyName); -} - -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)) - -static void addToPropertyNameListIfNotBlackListed( - PropertyNameList *propertyNameList, const QQuickDesignerSupport::PropertyName &propertyName) -{ - if (!QQuickDesignerSupportProperties::isPropertyBlackListed(propertyName)) - propertyNameList->append(propertyName); -} - -PropertyNameList allPropertyNamesInline(QObject *object, - const PropertyName &baseName = {}, - QObjectList *inspectedObjects = nullptr, - int depth = 0) -{ - QQuickDesignerSupport::PropertyNameList propertyNameList; - - QObjectList localObjectList; - - if (inspectedObjects == nullptr) - inspectedObjects = &localObjectList; - - if (depth > 2) - return propertyNameList; - - if (!inspectedObjects->contains(object)) - inspectedObjects->append(object); - - const QMetaObject *metaObject = object->metaObject(); - - QStringList deferredPropertyNames; - const int namesIndex = metaObject->indexOfClassInfo("DeferredPropertyNames"); - if (namesIndex != -1) { - QMetaClassInfo classInfo = metaObject->classInfo(namesIndex); - deferredPropertyNames = QString::fromUtf8(classInfo.value()).split(QLatin1Char(',')); - } - - for (int index = 0; index < metaObject->propertyCount(); ++index) { - QMetaProperty metaProperty = metaObject->property(index); - QQmlProperty declarativeProperty(object, QString::fromUtf8(metaProperty.name())); - if (declarativeProperty.isValid() - && declarativeProperty.propertyTypeCategory() == QQmlProperty::Object) { - if (declarativeProperty.name() != QLatin1String("parent") - && !deferredPropertyNames.contains(declarativeProperty.name())) { - QObject *childObject = QQmlMetaType::toQObject(declarativeProperty.read()); - if (childObject) - propertyNameList.append( - allPropertyNamesInline(childObject, - baseName - + QQuickDesignerSupport::PropertyName( - metaProperty.name()) - + '.', - inspectedObjects, - depth + 1)); - } - } else if (QQmlGadgetPtrWrapper *valueType - = QQmlGadgetPtrWrapper::instance(qmlEngine(object), metaProperty.userType())) { - valueType->setValue(metaProperty.read(object)); - propertyNameList.append(baseName - + QQuickDesignerSupport::PropertyName(metaProperty.name())); - propertyNameList.append( - allPropertyNamesInline(valueType, - baseName - + QQuickDesignerSupport::PropertyName(metaProperty.name()) - + '.', - inspectedObjects, - depth + 1)); - } else { - addToPropertyNameListIfNotBlackListed(&propertyNameList, - baseName - + QQuickDesignerSupport::PropertyName( - metaProperty.name())); - } - } - - return propertyNameList; -} -#endif - -PropertyNameList allPropertyNames(QObject *object) -{ -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - return QQuickDesignerSupportProperties::allPropertyNames(object); -#elif QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - return allPropertyNamesInline(object); -#else - return QQuickDesignerSupportProperties::allPropertyNames(object); -#endif -} - -PropertyNameList propertyNameListForWritableProperties(QObject *object) -{ - return QQuickDesignerSupportProperties::propertyNameListForWritableProperties(object); -} - -void tweakObjects(QObject *object) -{ - QQuickDesignerSupportItems::tweakObjects(object); -} - -void createNewDynamicProperty(QObject *object, QQmlEngine *engine, const QString &name) -{ - QQuickDesignerSupportProperties::createNewDynamicProperty(object, engine, name); -} - -void registerNodeInstanceMetaObject(QObject *object, QQmlEngine *engine) -{ - QQuickDesignerSupportProperties::registerNodeInstanceMetaObject(object, engine); -} - -static bool isMetaObjectofType(const QMetaObject *metaObject, const QByteArray &type) -{ - if (metaObject) { - if (metaObject->className() == type) - return true; - - return isMetaObjectofType(metaObject->superClass(), type); - } - - return false; -} - -static bool isQuickStyleItem(QObject *object) -{ - if (object) - return isMetaObjectofType(object->metaObject(), "QQuickStyleItem"); - - return false; -} - -static bool isDelegateModel(QObject *object) -{ - if (object) - return isMetaObjectofType(object->metaObject(), "QQmlDelegateModel"); - - return false; -} - -// This is used in share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp -QObject *createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QQmlContext *context) -{ -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - - QTypeRevision revision = QTypeRevision::zero(); - if (majorNumber > 0) - revision = QTypeRevision::fromVersion(majorNumber, minorNumber); - return QQuickDesignerSupportItems::createPrimitive(typeName, revision, context); -#else - return QQuickDesignerSupportItems::createPrimitive(typeName, majorNumber, minorNumber, context); -#endif -} - -static QString qmlDesignerRCPath() -{ - static const QString qmlDesignerRcPathsString = QString::fromLocal8Bit( - qgetenv("QMLDESIGNER_RC_PATHS")); - return qmlDesignerRcPathsString; -} - -QVariant fixResourcePaths(const QVariant &value) -{ - if (value.type() == QVariant::Url) - { - const QUrl url = value.toUrl(); - if (url.scheme() == QLatin1String("qrc")) { - const QString path = QLatin1String("qrc:") + url.path(); - if (!qmlDesignerRCPath().isEmpty()) { - const QStringList searchPaths = qmlDesignerRCPath().split(QLatin1Char(';')); - foreach (const QString &qrcPath, searchPaths) { - const QStringList qrcDefintion = qrcPath.split(QLatin1Char('=')); - if (qrcDefintion.count() == 2) { - QString fixedPath = path; - fixedPath.replace(QLatin1String("qrc:") + qrcDefintion.first(), qrcDefintion.last() + QLatin1Char('/')); - if (QFileInfo::exists(fixedPath)) { - fixedPath.replace(QLatin1String("//"), QLatin1String("/")); - fixedPath.replace(QLatin1Char('\\'), QLatin1Char('/')); - return QUrl::fromLocalFile(fixedPath); - } - } - } - } - } - } - if (value.type() == QVariant::String) { - const QString str = value.toString(); - if (str.contains(QLatin1String("qrc:"))) { - if (!qmlDesignerRCPath().isEmpty()) { - const QStringList searchPaths = qmlDesignerRCPath().split(QLatin1Char(';')); - foreach (const QString &qrcPath, searchPaths) { - const QStringList qrcDefintion = qrcPath.split(QLatin1Char('=')); - if (qrcDefintion.count() == 2) { - QString fixedPath = str; - fixedPath.replace(QLatin1String("qrc:") + qrcDefintion.first(), qrcDefintion.last() + QLatin1Char('/')); - if (QFileInfo::exists(fixedPath)) { - fixedPath.replace(QLatin1String("//"), QLatin1String("/")); - fixedPath.replace(QLatin1Char('\\'), QLatin1Char('/')); - return QUrl::fromLocalFile(fixedPath); - } - } - } - } - } - } - return value; -} - -QObject *createComponent(const QUrl &componentUrl, QQmlContext *context) -{ - return QQuickDesignerSupportItems::createComponent(componentUrl, context); -} - -bool hasFullImplementedListInterface(const QQmlListReference &list) -{ - return list.isValid() && list.canCount() && list.canAt() && list.canAppend() && list.canClear(); -} - -void registerCustomData(QObject *object) -{ - QQuickDesignerSupportProperties::registerCustomData(object); -} - -QVariant getResetValue(QObject *object, const PropertyName &propertyName) -{ - if (propertyName == "Layout.rowSpan") - return 1; - else if (propertyName == "Layout.columnSpan") - return 1; - else if (propertyName == "Layout.fillHeight") - return false; - else if (propertyName == "Layout.fillWidth") - return false; - else - return QQuickDesignerSupportProperties::getResetValue(object, propertyName); -} - -static void setProperty(QObject *object, QQmlContext *context, const PropertyName &propertyName, const QVariant &value) -{ - QQmlProperty property(object, QString::fromUtf8(propertyName), context); - property.write(value); -} - -void doResetProperty(QObject *object, QQmlContext *context, const PropertyName &propertyName) -{ - if (propertyName == "Layout.rowSpan") - setProperty(object, context, propertyName, getResetValue(object, propertyName)); - else if (propertyName == "Layout.columnSpan") - setProperty(object, context, propertyName, getResetValue(object, propertyName)); - else if (propertyName == "Layout.fillHeight") - setProperty(object, context, propertyName, getResetValue(object, propertyName)); - else if (propertyName == "Layout.fillWidth") - setProperty(object, context, propertyName, getResetValue(object, propertyName)); - else - QQuickDesignerSupportProperties::doResetProperty(object, context, propertyName); -} - -bool hasValidResetBinding(QObject *object, const PropertyName &propertyName) -{ - if (propertyName == "Layout.rowSpan") - return true; - else if (propertyName == "Layout.columnSpan") - return true; - else if (propertyName == "Layout.fillHeight") - return true; - else if (propertyName == "Layout.fillWidth") - return true; - return QQuickDesignerSupportProperties::hasValidResetBinding(object, propertyName); -} - -bool hasBindingForProperty(QObject *object, QQmlContext *context, const PropertyName &propertyName, bool *hasChanged) -{ - return QQuickDesignerSupportProperties::hasBindingForProperty(object, context, propertyName, hasChanged); -} - -void setPropertyBinding(QObject *object, QQmlContext *context, const PropertyName &propertyName, const QString &expression) -{ - QQuickDesignerSupportProperties::setPropertyBinding(object, context, propertyName, expression); -} - -void emitComponentComplete(QObject *item) -{ - if (!item) - return; - - QQmlData *data = QQmlData::get(item); - if (data && data->context) { -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - QQmlComponentAttached *componentAttached = data->context->componentAttached; -#else - QQmlComponentAttached *componentAttached = data->context->componentAttacheds(); -#endif - while (componentAttached) { - if (componentAttached->parent()) - if (componentAttached->parent() == item) - emit componentAttached->completed(); - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - componentAttached = componentAttached->next; -#else - componentAttached = componentAttached->next(); -#endif - } - } -} - -void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInstanceServer) -{ - if (object) { - QQuickItem *item = qobject_cast<QQuickItem*>(object); - - if (item && DesignerSupport::isComponentComplete(item)) - return; -#ifdef QUICK3D_MODULE - auto obj3d = qobject_cast<QQuick3DRepeater *>(object); - if (obj3d && QQuick3DObjectPrivate::get(obj3d)->componentComplete) - return; -#endif - - if (!nodeInstanceServer->hasInstanceForObject(item)) - emitComponentComplete(object); - QList<QObject*> childList = object->children(); - - if (item) { - foreach (QQuickItem *childItem, item->childItems()) { - if (!childList.contains(childItem)) - childList.append(childItem); - } - } - - foreach (QObject *child, childList) { - if (!nodeInstanceServer->hasInstanceForObject(child)) - doComponentCompleteRecursive(child, nodeInstanceServer); - } - - if (!isQuickStyleItem(object) && !isDelegateModel(object)) { - if (item) { - static_cast<QQmlParserStatus *>(item)->componentComplete(); - } else { - QQmlParserStatus *qmlParserStatus = dynamic_cast<QQmlParserStatus *>(object); - if (qmlParserStatus) { - qmlParserStatus->componentComplete(); - auto *anim = dynamic_cast<QQuickAbstractAnimation *>(object); - if (anim && ViewConfig::isParticleViewMode()) { - nodeInstanceServer->addAnimation(anim); - anim->setEnableUserControl(); - anim->stop(); - } - } - } - } - } -} - - -void keepBindingFromGettingDeleted(QObject *object, QQmlContext *context, const PropertyName &propertyName) -{ - QQuickDesignerSupportProperties::keepBindingFromGettingDeleted(object, context, propertyName); -} - -bool objectWasDeleted(QObject *object) -{ - return QQuickDesignerSupportItems::objectWasDeleted(object); -} - -void disableNativeTextRendering(QQuickItem *item) -{ - QQuickDesignerSupportItems::disableNativeTextRendering(item); -} - -void disableTextCursor(QQuickItem *item) -{ - QQuickDesignerSupportItems::disableTextCursor(item); -} - -void disableTransition(QObject *object) -{ - QQuickDesignerSupportItems::disableTransition(object); -} - -void disableBehaivour(QObject *object) -{ - QQuickDesignerSupportItems::disableBehaivour(object); -} - -void stopUnifiedTimer() -{ - QQuickDesignerSupportItems::stopUnifiedTimer(); -} - -bool isPropertyQObject(const QMetaProperty &metaProperty) -{ - return QQuickDesignerSupportProperties::isPropertyQObject(metaProperty); -} - -QObject *readQObjectProperty(const QMetaProperty &metaProperty, QObject *object) -{ - return QQuickDesignerSupportProperties::readQObjectProperty(metaProperty, object); -} - -namespace States { - -bool isStateActive(QObject *object, QQmlContext *context) -{ - - return QQuickDesignerSupportStates::isStateActive(object, context); -} - -void activateState(QObject *object, QQmlContext *context) -{ - QQuickDesignerSupportStates::activateState(object, context); -} - -void deactivateState(QObject *object) -{ - QQuickDesignerSupportStates::deactivateState(object); -} - -bool changeValueInRevertList(QObject *state, QObject *target, const PropertyName &propertyName, const QVariant &value) -{ - return QQuickDesignerSupportStates::changeValueInRevertList(state, target, propertyName, value); -} - -bool updateStateBinding(QObject *state, QObject *target, const PropertyName &propertyName, const QString &expression) -{ - return QQuickDesignerSupportStates::updateStateBinding(state, target, propertyName, expression); -} - -bool resetStateProperty(QObject *state, QObject *target, const PropertyName &propertyName, const QVariant &value) -{ - return QQuickDesignerSupportStates::resetStateProperty(state, target, propertyName, value); -} - -} //namespace States - -namespace PropertyChanges { - -void detachFromState(QObject *propertyChanges) -{ - return QQuickDesignerSupportPropertyChanges::detachFromState(propertyChanges); -} - -void attachToState(QObject *propertyChanges) -{ - return QQuickDesignerSupportPropertyChanges::attachToState(propertyChanges); -} - -QObject *targetObject(QObject *propertyChanges) -{ - return QQuickDesignerSupportPropertyChanges::targetObject(propertyChanges); -} - -void removeProperty(QObject *propertyChanges, const PropertyName &propertyName) -{ - QQuickDesignerSupportPropertyChanges::removeProperty(propertyChanges, propertyName); -} - -QVariant getProperty(QObject *propertyChanges, const PropertyName &propertyName) -{ - return QQuickDesignerSupportPropertyChanges::getProperty(propertyChanges, propertyName); -} - -void changeValue(QObject *propertyChanges, const PropertyName &propertyName, const QVariant &value) -{ - QQuickDesignerSupportPropertyChanges::changeValue(propertyChanges, propertyName, value); -} - -void changeExpression(QObject *propertyChanges, const PropertyName &propertyName, const QString &expression) -{ - QQuickDesignerSupportPropertyChanges::changeExpression(propertyChanges, propertyName, expression); -} - -QObject *stateObject(QObject *propertyChanges) -{ - return QQuickDesignerSupportPropertyChanges::stateObject(propertyChanges); -} - -bool isNormalProperty(const PropertyName &propertyName) -{ - return QQuickDesignerSupportPropertyChanges::isNormalProperty(propertyName); -} - -} // namespace PropertyChanges - -bool isSubclassOf(QObject *object, const QByteArray &superTypeName) -{ - return QQuickDesignerSupportMetaInfo::isSubclassOf(object, superTypeName); -} - -void getPropertyCache(QObject *object, [[maybe_unused]] QQmlEngine *engine) -{ -#if QT_VERSION < QT_VERSION_CHECK(6, 4, 0) - QQuickDesignerSupportProperties::getPropertyCache(object, engine); -#else - QQuickDesignerSupportProperties::getPropertyCache(object); -#endif -} - -void registerNotifyPropertyChangeCallBack(void (*callback)(QObject *, const PropertyName &)) -{ - QQuickDesignerSupportMetaInfo::registerNotifyPropertyChangeCallBack(callback); -} - -ComponentCompleteDisabler::ComponentCompleteDisabler() -{ - DesignerSupport::disableComponentComplete(); -} - -ComponentCompleteDisabler::~ComponentCompleteDisabler() -{ - DesignerSupport::enableComponentComplete(); -} - -class QrcEngineHandler : public QAbstractFileEngineHandler -{ -public: - QAbstractFileEngine *create(const QString &fileName) const final; -}; - -QAbstractFileEngine *QrcEngineHandler::create(const QString &fileName) const -{ - if (fileName.startsWith(":/qt-project.org")) - return nullptr; - - if (fileName.startsWith(":/qtquickplugin")) - return nullptr; - - if (fileName.startsWith(":/")) { - const QStringList searchPaths = qmlDesignerRCPath().split(';'); - foreach (const QString &qrcPath, searchPaths) { - const QStringList qrcDefintion = qrcPath.split('='); - if (qrcDefintion.count() == 2) { - QString fixedPath = fileName; - fixedPath.replace(":" + qrcDefintion.first(), qrcDefintion.last() + '/'); - - if (fileName == fixedPath) - return nullptr; - - if (QFileInfo::exists(fixedPath)) { - fixedPath.replace("//", "/"); - fixedPath.replace('\\', '/'); - return new QFSFileEngine(fixedPath); - } - } - } - } - - return nullptr; -} - -static QrcEngineHandler* s_qrcEngineHandler = nullptr; - -class EngineHandlerDeleter -{ -public: - EngineHandlerDeleter() - {} - ~EngineHandlerDeleter() - { delete s_qrcEngineHandler; } -}; - -void registerFixResourcePathsForObjectCallBack() -{ - static EngineHandlerDeleter deleter; - - if (!s_qrcEngineHandler) - s_qrcEngineHandler = new QrcEngineHandler(); -} - -} // namespace QmlPrivateGate -} // namespace Internal -} // namespace QmlDesigner |