diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstance.h b/src/plugins/qmldesigner/designercore/include/nodeinstance.h index 12aa17e2aba62caa4822a8676a80f7004886addf..7ccf54cfb8b991146c98c78422be8dd0f8081060 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstance.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstance.h @@ -133,7 +133,8 @@ public: QVariant resetVariant(const QString &name) const; bool hasAnchor(const QString &name) const; - bool isAnchoredBy() const; + bool isAnchoredBySibling() const; + bool isAnchoredByChildren() const; QPair<QString, NodeInstance> anchor(const QString &name) const; int penWidth() const; diff --git a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h index 7293ed01425d28972e6879fb2deab8b49cd367c1..e197067c07cd782cd9dabcab7f5269797e5f125a 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h +++ b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h @@ -66,7 +66,8 @@ public: bool hasShowContent() const; bool canReparent() const; - bool instanceIsAnchoredBy() const; + bool instanceIsAnchoredBySibling() const; + bool instanceIsAnchoredByChildren() const; QRectF instanceBoundingRect() const; QTransform instanceTransform() const; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp index 1229488d437c045e70179791d32c3135e14c2b93..7d88a7260108d4f77cc0e4516458d219a5346eb3 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp @@ -470,9 +470,14 @@ int NodeInstance::penWidth() const return m_nodeInstance->penWidth(); } -bool NodeInstance::isAnchoredBy() const +bool NodeInstance::isAnchoredBySibling() const { - return m_nodeInstance->isAnchoredBy(); + return m_nodeInstance->isAnchoredBySibling(); +} + +bool NodeInstance::isAnchoredByChildren() const +{ + return m_nodeInstance->isAnchoredByChildren(); } QPair<QString, NodeInstance> NodeInstance::anchor(const QString &name) const diff --git a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp index f976003262b134994f1de41680ec8a81615636df..8fddbee8a57592021ed661591e646c5d7fe4ec0a 100644 --- a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp @@ -306,7 +306,12 @@ bool ObjectNodeInstance::hasAnchor(const QString &/*name*/) const return false; } -bool ObjectNodeInstance::isAnchoredBy() const +bool ObjectNodeInstance::isAnchoredBySibling() const +{ + return false; +} + +bool ObjectNodeInstance::isAnchoredByChildren() const { return false; } diff --git a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h index 05ce41fb6e126f9b400bf393f7c6be7c1bcf69f1..4bb43e330e3c41921dbe1acc25cfd38d7bf25858 100644 --- a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h +++ b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h @@ -133,7 +133,8 @@ public: virtual bool hasAnchor(const QString &name) const; virtual QPair<QString, NodeInstance> anchor(const QString &name) const; - virtual bool isAnchoredBy() const; + virtual bool isAnchoredBySibling() const; + virtual bool isAnchoredByChildren() const; virtual double rotation() const; virtual double scale() const; diff --git a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp index 707592bde00acf05bcbb332294dd53b308c52de2..860c1b72de3e22484121cb74f767f84821b8526c 100644 --- a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp @@ -591,8 +591,8 @@ bool isAnchoredTo(QDeclarativeItem *fromItem, QDeclarativeItem *toItem) bool areChildrenAnchoredTo(QDeclarativeItem *fromItem, QDeclarativeItem *toItem) { - foreach(QObject *childObject, fromItem->children()) { - QDeclarativeItem *childItem = qobject_cast<QDeclarativeItem*>(childObject); + foreach(QGraphicsItem *childGraphicsItem, fromItem->childItems()) { + QDeclarativeItem *childItem = qobject_cast<QDeclarativeItem*>(childGraphicsItem->toGraphicsObject()); if (childItem) { if (isAnchoredTo(childItem, toItem)) return true; @@ -605,14 +605,11 @@ bool areChildrenAnchoredTo(QDeclarativeItem *fromItem, QDeclarativeItem *toItem) return false; } -bool QmlGraphicsItemNodeInstance::isAnchoredBy() const +bool QmlGraphicsItemNodeInstance::isAnchoredBySibling() const { - if (areChildrenAnchoredTo(qmlGraphicsItem(), qmlGraphicsItem())) // search in children for a anchor to this item - return true; - - if (qmlGraphicsItem()->parent()) { - foreach(QObject *siblingObject, qmlGraphicsItem()->parent()->children()) { // search in siblings for a anchor to this item - QDeclarativeItem *siblingItem = qobject_cast<QDeclarativeItem*>(siblingObject); + if (qmlGraphicsItem()->parentItem()) { + foreach(QGraphicsItem *siblingGraphicsItem, qmlGraphicsItem()->parentItem()->childItems()) { // search in siblings for a anchor to this item + QDeclarativeItem *siblingItem = qobject_cast<QDeclarativeItem*>(siblingGraphicsItem->toGraphicsObject()); if (siblingItem) { if (isAnchoredTo(siblingItem, qmlGraphicsItem())) return true; @@ -626,6 +623,14 @@ bool QmlGraphicsItemNodeInstance::isAnchoredBy() const return false; } +bool QmlGraphicsItemNodeInstance::isAnchoredByChildren() const +{ + if (areChildrenAnchoredTo(qmlGraphicsItem(), qmlGraphicsItem())) // search in children for a anchor to this item + return true; + + return false; +} + QDeclarativeItem *QmlGraphicsItemNodeInstance::qmlGraphicsItem() const { if (object() == 0) diff --git a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h index 67aa6813516d2c4cb45200ab3186ad78a42f752f..43eeb4a6ba6dcb4a5ca099f1859e34e5e9fe1918 100644 --- a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h +++ b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h @@ -64,7 +64,9 @@ public: bool hasAnchor(const QString &name) const; QPair<QString, NodeInstance> anchor(const QString &name) const; - bool isAnchoredBy() const; + bool isAnchoredBySibling() const; + bool isAnchoredByChildren() const; + protected: QmlGraphicsItemNodeInstance(QDeclarativeItem *item, bool hasContent); QDeclarativeItem *qmlGraphicsItem() const; diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index 2d60b2a25df1e2125d48d9a1fb052a3c007f8cad..cafa7754ce6d299e25b6bfd963e2e0bcf9d736da 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -188,12 +188,17 @@ bool QmlItemNode::hasShowContent() const bool QmlItemNode::canReparent() const { - return QmlObjectNode::canReparent() && !anchors().instanceHasAnchors() && !instanceIsAnchoredBy(); + return QmlObjectNode::canReparent() && !anchors().instanceHasAnchors() && !instanceIsAnchoredBySibling(); } -bool QmlItemNode::instanceIsAnchoredBy() const +bool QmlItemNode::instanceIsAnchoredBySibling() const { - return nodeInstance().isAnchoredBy(); + return nodeInstance().isAnchoredBySibling(); +} + +bool QmlItemNode::instanceIsAnchoredByChildren() const +{ + return nodeInstance().isAnchoredByChildren(); } QRectF QmlItemNode::instanceBoundingRect() const