forked from qt-creator/qt-creator
QmlDesigner: Add container item support in node instances
Change-Id: I30e0d11346b8c63188d052b46656e7ede179e55d Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
This commit is contained in:
@@ -887,8 +887,10 @@ static QVector<InformationContainer> createInformationVector(const QList<ServerN
|
||||
informationVector.append(InformationContainer(instance.instanceId(), SceneTransform, instance.sceneTransform()));
|
||||
informationVector.append(InformationContainer(instance.instanceId(), Size, instance.size()));
|
||||
informationVector.append(InformationContainer(instance.instanceId(), BoundingRect, instance.boundingRect()));
|
||||
informationVector.append(InformationContainer(instance.instanceId(), ContentItemBoundingRect, instance.contentItemBoundingRect()));
|
||||
informationVector.append(InformationContainer(instance.instanceId(), Transform, instance.transform()));
|
||||
informationVector.append(InformationContainer(instance.instanceId(), ContentTransform, instance.contentTransform()));
|
||||
informationVector.append(InformationContainer(instance.instanceId(), ContentItemTransform, instance.contentItemTransform()));
|
||||
informationVector.append(InformationContainer(instance.instanceId(), HasContent, instance.hasContent()));
|
||||
informationVector.append(InformationContainer(instance.instanceId(), IsMovable, instance.isMovable()));
|
||||
informationVector.append(InformationContainer(instance.instanceId(), IsResizable, instance.isResizable()));
|
||||
|
||||
@@ -255,6 +255,11 @@ QTransform ObjectNodeInstance::customTransform() const
|
||||
return QTransform();
|
||||
}
|
||||
|
||||
QTransform ObjectNodeInstance::contentItemTransform() const
|
||||
{
|
||||
return QTransform();
|
||||
}
|
||||
|
||||
QTransform ObjectNodeInstance::sceneTransform() const
|
||||
{
|
||||
return QTransform();
|
||||
@@ -1064,6 +1069,11 @@ QObject *ObjectNodeInstance::object() const
|
||||
return 0;
|
||||
}
|
||||
|
||||
QQuickItem *ObjectNodeInstance::contentItem() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool ObjectNodeInstance::hasContent() const
|
||||
{
|
||||
return false;
|
||||
@@ -1210,7 +1220,12 @@ ObjectNodeInstance::Pointer ObjectNodeInstance::parentInstance() const
|
||||
|
||||
QRectF ObjectNodeInstance::boundingRect() const
|
||||
{
|
||||
return QRect();
|
||||
return QRectF();
|
||||
}
|
||||
|
||||
QRectF ObjectNodeInstance::contentItemBoundingBox() const
|
||||
{
|
||||
return QRectF();
|
||||
}
|
||||
|
||||
QPointF ObjectNodeInstance::position() const
|
||||
|
||||
@@ -44,6 +44,7 @@ class QQmlContext;
|
||||
class QQmlEngine;
|
||||
class QQmlProperty;
|
||||
class QQmlAbstractBinding;
|
||||
class QQuickItem;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace QmlDesigner {
|
||||
@@ -104,12 +105,14 @@ public:
|
||||
virtual bool equalGraphicsItem(QGraphicsItem *item) const;
|
||||
|
||||
virtual QRectF boundingRect() const;
|
||||
virtual QRectF contentItemBoundingBox() const;
|
||||
|
||||
virtual QPointF position() const;
|
||||
virtual QSizeF size() const;
|
||||
virtual QTransform transform() const;
|
||||
virtual QTransform contentTransform() const;
|
||||
virtual QTransform customTransform() const;
|
||||
virtual QTransform contentItemTransform() const;
|
||||
virtual QTransform sceneTransform() const;
|
||||
virtual double opacity() const;
|
||||
|
||||
@@ -153,6 +156,7 @@ public:
|
||||
void setResetValue(const PropertyName &propertyName, const QVariant &value);
|
||||
|
||||
QObject *object() const;
|
||||
virtual QQuickItem *contentItem() const;
|
||||
|
||||
virtual bool hasContent() const;
|
||||
virtual bool isResizable() const;
|
||||
|
||||
@@ -56,11 +56,24 @@ QuickItemNodeInstance::~QuickItemNodeInstance()
|
||||
{
|
||||
}
|
||||
|
||||
static bool isContentItem(QQuickItem *item, NodeInstanceServer *nodeInstanceServer)
|
||||
{
|
||||
|
||||
return item->parentItem()
|
||||
&& nodeInstanceServer->hasInstanceForObject(item->parentItem())
|
||||
&& nodeInstanceServer->instanceForObject(item->parentItem()).internalInstance()->contentItem() == item;
|
||||
}
|
||||
|
||||
static QTransform transformForItem(QQuickItem *item, NodeInstanceServer *nodeInstanceServer)
|
||||
{
|
||||
if (isContentItem(item, nodeInstanceServer))
|
||||
return QTransform();
|
||||
|
||||
QTransform toParentTransform = DesignerSupport::parentTransform(item);
|
||||
if (item->parentItem() && !nodeInstanceServer->hasInstanceForObject(item->parentItem()))
|
||||
if (item->parentItem() && !nodeInstanceServer->hasInstanceForObject(item->parentItem())) {
|
||||
|
||||
return transformForItem(item->parentItem(), nodeInstanceServer) * toParentTransform;
|
||||
}
|
||||
|
||||
return toParentTransform;
|
||||
}
|
||||
@@ -109,6 +122,35 @@ QuickItemNodeInstance::Pointer QuickItemNodeInstance::create(QObject *object)
|
||||
return instance;
|
||||
}
|
||||
|
||||
QQuickItem *QuickItemNodeInstance::contentItem() const
|
||||
{
|
||||
return m_contentItem.data();
|
||||
}
|
||||
|
||||
void QuickItemNodeInstance::doComponentComplete()
|
||||
{
|
||||
GraphicalNodeInstance::doComponentComplete();
|
||||
|
||||
QQmlProperty contentItemProperty(quickItem(), "contentItem", engine());
|
||||
if (contentItemProperty.isValid())
|
||||
m_contentItem = contentItemProperty.read().value<QQuickItem*>();
|
||||
}
|
||||
|
||||
QRectF QuickItemNodeInstance::contentItemBoundingBox() const
|
||||
{
|
||||
if (contentItem()) {
|
||||
QTransform contentItemTransform = DesignerSupport::parentTransform(contentItem());
|
||||
return contentItemTransform.mapRect(contentItem()->boundingRect());
|
||||
}
|
||||
|
||||
return QRectF();
|
||||
}
|
||||
|
||||
QTransform QuickItemNodeInstance::contentItemTransform() const
|
||||
{
|
||||
return DesignerSupport::parentTransform(contentItem());
|
||||
}
|
||||
|
||||
|
||||
bool QuickItemNodeInstance::isQuickItem() const
|
||||
{
|
||||
|
||||
@@ -50,7 +50,12 @@ public:
|
||||
|
||||
static Pointer create(QObject *objectToBeWrapped);
|
||||
|
||||
virtual QQuickItem *contentItem() const;
|
||||
|
||||
QRectF contentItemBoundingBox() const Q_DECL_OVERRIDE;
|
||||
|
||||
QTransform transform() const Q_DECL_OVERRIDE;
|
||||
QTransform contentItemTransform() const Q_DECL_OVERRIDE;
|
||||
|
||||
QObject *parent() const Q_DECL_OVERRIDE;
|
||||
|
||||
@@ -61,6 +66,8 @@ public:
|
||||
bool isMovable() const Q_DECL_OVERRIDE;
|
||||
bool isQuickItem() const Q_DECL_OVERRIDE;
|
||||
|
||||
void doComponentComplete();
|
||||
|
||||
protected:
|
||||
QuickItemNodeInstance(QQuickItem*);
|
||||
QQuickItem *quickItem() const;
|
||||
@@ -68,6 +75,7 @@ protected:
|
||||
void setResizable(bool resizable);
|
||||
|
||||
private: //variables
|
||||
QPointer<QQuickItem> m_contentItem;
|
||||
bool m_isResizable;
|
||||
bool m_isMovable;
|
||||
};
|
||||
|
||||
@@ -88,7 +88,6 @@ QuickWindowNodeInstance::Pointer QuickWindowNodeInstance::create(QObject *object
|
||||
QQuickItemPrivate *privateItem = static_cast<QQuickItemPrivate*>(QObjectPrivate::get(quickWindow->contentItem()));
|
||||
|
||||
if (privateItem->window) {
|
||||
qDebug() << "removing from window";
|
||||
if (!privateItem->parentItem)
|
||||
QQuickWindowPrivate::get(privateItem->window)->parentlessItems.remove(quickWindow->contentItem());
|
||||
privateItem->derefWindow();
|
||||
|
||||
@@ -315,6 +315,11 @@ QRectF ServerNodeInstance::boundingRect() const
|
||||
return boundingRect;
|
||||
}
|
||||
|
||||
QRectF ServerNodeInstance::contentItemBoundingRect() const
|
||||
{
|
||||
return m_nodeInstance->contentItemBoundingBox();
|
||||
}
|
||||
|
||||
void ServerNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
|
||||
{
|
||||
m_nodeInstance->setPropertyVariant(name, value);
|
||||
@@ -515,6 +520,11 @@ QTransform ServerNodeInstance::contentTransform() const
|
||||
return m_nodeInstance->contentTransform();
|
||||
}
|
||||
|
||||
QTransform ServerNodeInstance::contentItemTransform() const
|
||||
{
|
||||
return m_nodeInstance->contentItemTransform();
|
||||
}
|
||||
|
||||
double ServerNodeInstance::rotation() const
|
||||
{
|
||||
return m_nodeInstance->rotation();
|
||||
@@ -631,11 +641,6 @@ qint32 ServerNodeInstance::instanceId() const
|
||||
}
|
||||
}
|
||||
|
||||
QObject* ServerNodeInstance::testHandle() const
|
||||
{
|
||||
return internalObject();
|
||||
}
|
||||
|
||||
QList<ServerNodeInstance> ServerNodeInstance::stateInstances() const
|
||||
{
|
||||
return m_nodeInstance->stateInstances();
|
||||
|
||||
@@ -105,12 +105,14 @@ public:
|
||||
bool equalGraphicsItem(QGraphicsItem *item) const;
|
||||
|
||||
QRectF boundingRect() const;
|
||||
QRectF contentItemBoundingRect() const;
|
||||
QPointF position() const;
|
||||
QSizeF size() const;
|
||||
QTransform transform() const;
|
||||
QTransform customTransform() const;
|
||||
QTransform sceneTransform() const;
|
||||
QTransform contentTransform() const;
|
||||
QTransform contentItemTransform() const;
|
||||
double rotation() const;
|
||||
double scale() const;
|
||||
QList<QGraphicsTransform *> transformations() const;
|
||||
@@ -156,7 +158,6 @@ public:
|
||||
QString id() const;
|
||||
qint32 instanceId() const;
|
||||
|
||||
QObject* testHandle() const;
|
||||
QSharedPointer<Internal::ObjectNodeInstance> internalInstance() const;
|
||||
|
||||
QList<ServerNodeInstance> stateInstances() const;
|
||||
|
||||
Reference in New Issue
Block a user