diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri index 5cb63be73931f12199a15a14bb54b57cf7be6f42..28a733cf669bb8ffed63df5f0ea4f02349d64059 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri @@ -20,6 +20,7 @@ HEADERS += $$PWD/qmlstatenodeinstance.h HEADERS += $$PWD/qmltransitionnodeinstance.h HEADERS += $$PWD/servernodeinstance.h HEADERS += $$PWD/anchorchangesnodeinstance.h +HEADERS += $$PWD/positionernodeinstance.h SOURCES += $$PWD/qt5nodeinstanceserver.cpp SOURCES += $$PWD/qt5informationnodeinstanceserver.cpp @@ -41,3 +42,4 @@ SOURCES += $$PWD/qmlstatenodeinstance.cpp SOURCES += $$PWD/qmltransitionnodeinstance.cpp SOURCES += $$PWD/servernodeinstance.cpp SOURCES += $$PWD/anchorchangesnodeinstance.cpp +SOURCES += $$PWD/positionernodeinstance.cpp diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.cpp new file mode 100644 index 0000000000000000000000000000000000000000..080d1aa0616fadae98647c3db2a0afc20ae33f60 --- /dev/null +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.cpp @@ -0,0 +1,99 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: http://www.qt-project.org/ +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +**************************************************************************/ + +#include "positionernodeinstance.h" +#include <private/qquickpositioners_p.h> + +namespace QmlDesigner { +namespace Internal { + +PositionerNodeInstance::PositionerNodeInstance(QQuickBasePositioner *item) + : QuickItemNodeInstance(item) +{ +} + +bool PositionerNodeInstance::isPositioner() const +{ + return true; +} + +bool PositionerNodeInstance::isResizable() const +{ + return true; +} + +void PositionerNodeInstance::setPropertyVariant(const QString &name, const QVariant &value) +{ + if (name == "move" || name == "add") + return; + + QuickItemNodeInstance::setPropertyVariant(name, value); +} + +void PositionerNodeInstance::setPropertyBinding(const QString &name, const QString &expression) +{ + if (name == "move" || name == "add") + return; + + QuickItemNodeInstance::setPropertyBinding(name, expression); +} + +PositionerNodeInstance::Pointer PositionerNodeInstance::create(QObject *object) +{ + QQuickBasePositioner *positioner = qobject_cast<QQuickBasePositioner*>(object); + + Q_ASSERT(positioner); + + Pointer instance(new PositionerNodeInstance(positioner)); + + instance->setHasContent(anyItemHasContent(positioner)); + positioner->setFlag(QQuickItem::ItemHasContents, true); + + static_cast<QQmlParserStatus*>(positioner)->classBegin(); + + instance->populateResetHashes(); + + return instance; +} + +QQuickBasePositioner *PositionerNodeInstance::positioner() const +{ + Q_ASSERT(qobject_cast<QQuickBasePositioner*>(object())); + return static_cast<QQuickBasePositioner*>(object()); +} + +void PositionerNodeInstance::refreshPositioner() +{ + bool success = QMetaObject::invokeMethod(positioner(), "prePositioning"); + Q_ASSERT(success); +} + +} +} // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h new file mode 100644 index 0000000000000000000000000000000000000000..e53628abd47de470bef9f66ffef913cc45a9f046 --- /dev/null +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h @@ -0,0 +1,68 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: http://www.qt-project.org/ +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +**************************************************************************/ + +#ifndef POSITIONERNODEINSTANCE_H +#define POSITIONERNODEINSTANCE_H + +#include "quickitemnodeinstance.h" + +QT_BEGIN_NAMESPACE +class QQuickBasePositioner; +QT_END_NAMESPACE + +namespace QmlDesigner { +namespace Internal { + +class PositionerNodeInstance : public QuickItemNodeInstance +{ +public: + typedef QSharedPointer<PositionerNodeInstance> Pointer; + typedef QWeakPointer<PositionerNodeInstance> WeakPointer; + + static Pointer create(QObject *objectToBeWrapped); + + void setPropertyVariant(const QString &name, const QVariant &value); + void setPropertyBinding(const QString &name, const QString &expression); + + bool isPositioner() const; + + bool isResizable() const; + + void refreshPositioner(); + +protected: + PositionerNodeInstance(QQuickBasePositioner *item); + QQuickBasePositioner *positioner() const; +}; + +} // namespace Internal +} // namespace QmlDesigner + +#endif // POSITIONERNODEINSTANCE_H diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp index 634b2741264c1f0d09a1bfa5518a8224e26c46e6..f602fb9788cc3ced779a3c0f6708a53f8f19dcbe 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp @@ -113,7 +113,7 @@ void QuickItemNodeInstance::setHasContent(bool hasContent) } -bool anyItemHasContent(QQuickItem *graphicsItem) +bool QuickItemNodeInstance::anyItemHasContent(QQuickItem *graphicsItem) { if (graphicsItem->flags().testFlag(QQuickItem::ItemHasContents)) return true; @@ -343,6 +343,9 @@ void QuickItemNodeInstance::setPropertyVariant(const QString &name, const QVaria ObjectNodeInstance::setPropertyVariant(name, value); refresh(); + + if (isInPositioner()) + parentInstance()->refreshPositioner(); } void QuickItemNodeInstance::setPropertyBinding(const QString &name, const QString &expression) @@ -468,6 +471,9 @@ void QuickItemNodeInstance::resetProperty(const QString &name) } ObjectNodeInstance::resetProperty(name); + + if (isInPositioner()) + parentInstance()->refreshPositioner(); } void QuickItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty) @@ -494,6 +500,9 @@ void QuickItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParen refresh(); DesignerSupport::updateDirtyNode(quickItem()); + + if (isInPositioner()) + parentInstance()->refreshPositioner(); } static bool isValidAnchorName(const QString &name) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h index c14f85ea20927bc16c09dfd16f9fb8a2fdfefbcf..1331c327fca3b859e161696b0f2ab5fabdbfbeec 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h @@ -117,6 +117,7 @@ protected: void refresh(); QRectF boundingRectWithStepChilds(QQuickItem *parentItem) const; void updateDirtyNodeRecursive(QQuickItem *parentItem) const; + static bool anyItemHasContent(QQuickItem *graphicsItem); private: //variables bool m_hasHeight; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp index 6786e57eb18823a18d3fe0c7cf1bcdc17d17984c..60be2cb677a699c36decbe842ec70db441f5aa05 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp @@ -37,7 +37,7 @@ #include "behaviornodeinstance.h" #include "qmlstatenodeinstance.h" #include "anchorchangesnodeinstance.h" - +#include "positionernodeinstance.h" #include "quickitemnodeinstance.h" @@ -172,15 +172,10 @@ Internal::ObjectNodeInstance::Pointer ServerNodeInstance::createInstance(QObject if (objectToBeWrapped == 0) instance = Internal::DummyNodeInstance::create(); -#if QT_VERSION >= 0x050000 + else if (isSubclassOf(objectToBeWrapped, "QQuickBasePositioner")) + instance = Internal::PositionerNodeInstance::create(objectToBeWrapped); else if (isSubclassOf(objectToBeWrapped, "QQuickItem")) instance = Internal::QuickItemNodeInstance::create(objectToBeWrapped); -#else - else if (isSubclassOf(objectToBeWrapped, "QQmlBasePositioner")) - instance = Internal::PositionerNodeInstance::create(objectToBeWrapped); - else if (isSubclassOf(objectToBeWrapped, "QQmlItem")) - instance = Internal::QmlGraphicsItemNodeInstance::create(objectToBeWrapped); -#endif else if (isSubclassOf(objectToBeWrapped, "QQmlComponent")) instance = Internal::ComponentNodeInstance::create(objectToBeWrapped); else if (objectToBeWrapped->inherits("QQmlAnchorChanges")) diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp index d90e8bbab3e9424762e915cb459735136b604e8a..31df5e4109fe62e1a5272b038c7b280c8df8cd2e 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp @@ -66,7 +66,7 @@ void PositionerNodeInstance::setPropertyBinding(const QString &name, const QStri } PositionerNodeInstance::Pointer PositionerNodeInstance::create(QObject *object) -{ +{ QDeclarativeBasePositioner *positioner = qobject_cast<QDeclarativeBasePositioner*>(object); Q_ASSERT(positioner);