From aa094ee871c6955bd6c04da66a8602dfa9b29eed Mon Sep 17 00:00:00 2001 From: Marco Bubke <marco.bubke@nokia.com> Date: Tue, 9 Feb 2010 17:28:54 +0100 Subject: [PATCH] Add feedback for overwritten expressions --- .../formeditor/formeditorgraphicsview.cpp | 56 +++++++++++++------ .../formeditor/formeditorgraphicsview.h | 4 ++ .../qmldesigner/core/include/qmlobjectnode.h | 1 + .../qmldesigner/core/model/qmlobjectnode.cpp | 20 +++++++ 4 files changed, 65 insertions(+), 16 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp index bae4ac9609a..b1ff54e491d 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp @@ -141,37 +141,53 @@ void FormEditorGraphicsView::drawForeground(QPainter *painter, const QRectF &/*r painter->restore(); - if (m_beginX != m_feedbackNode.instanceValue("x")) - painter->setPen(changeColor); - else - painter->setPen(Qt::black); + if (m_beginXHasExpression != m_feedbackNode.hasBindingProperty("x")) { + painter->setPen(Qt::red); + } else { + if (m_beginX != m_feedbackNode.instanceValue("x")) + painter->setPen(changeColor); + else + painter->setPen(Qt::black); + } painter->drawText(QPoint(2.0, 12.0), QString("x:")); painter->drawText(QPoint(14.0, 12.0), m_feedbackNode.instanceValue("x").toString()); - if (m_beginY != m_feedbackNode.instanceValue("y")) - painter->setPen(changeColor); - else - painter->setPen(Qt::black); + if (m_beginYHasExpression != m_feedbackNode.hasBindingProperty("y")) { + painter->setPen(Qt::red); + } else { + if (m_beginY != m_feedbackNode.instanceValue("y")) + painter->setPen(changeColor); + else + painter->setPen(Qt::black); + } painter->drawText(QPoint(50.0, 12.0), QString("y:")); painter->drawText(QPoint(60.0, 12.0), m_feedbackNode.instanceValue("y").toString()); - if (m_beginWidth != m_feedbackNode.instanceValue("width")) - painter->setPen(changeColor); - else - painter->setPen(Qt::black); + if (m_beginWidthHasExpression != m_feedbackNode.hasBindingProperty("width")) { + painter->setPen(Qt::red); + } else { + if (m_beginWidth != m_feedbackNode.instanceValue("width")) + painter->setPen(changeColor); + else + painter->setPen(Qt::black); + } painter->drawText(QPoint(2.0, 24.0), QString("w:")); painter->drawText(QPoint(14.0, 24.0), m_feedbackNode.instanceValue("width").toString()); - if (m_beginHeight != m_feedbackNode.instanceValue("height")) - painter->setPen(changeColor); - else - painter->setPen(Qt::black); + if (m_beginHeightHasExpression != m_feedbackNode.hasBindingProperty("height")) { + painter->setPen(Qt::red); + } else { + if (m_beginHeight != m_feedbackNode.instanceValue("height")) + painter->setPen(changeColor); + else + painter->setPen(Qt::black); + } painter->drawText(QPoint(50.0, 24.0), QString("h:")); painter->drawText(QPoint(60.0, 24.0),m_feedbackNode.instanceValue("height").toString()); @@ -245,6 +261,10 @@ void FormEditorGraphicsView::setFeedbackNode(const QmlItemNode &node) m_beginRightMargin = m_feedbackNode.instanceValue("anchors.rightMargin"); m_beginTopMargin = m_feedbackNode.instanceValue("anchors.topMargin"); m_beginBottomMargin = m_feedbackNode.instanceValue("anchors.bottomMargin"); + m_beginXHasExpression = m_feedbackNode.hasBindingProperty("x"); + m_beginYHasExpression = m_feedbackNode.hasBindingProperty("y"); + m_beginWidthHasExpression = m_feedbackNode.hasBindingProperty("width"); + m_beginHeightHasExpression = m_feedbackNode.hasBindingProperty("height"); } else { m_beginX = QVariant(); m_beginY = QVariant(); @@ -255,6 +275,10 @@ void FormEditorGraphicsView::setFeedbackNode(const QmlItemNode &node) m_beginRightMargin = QVariant(); m_beginTopMargin = QVariant(); m_beginBottomMargin = QVariant(); + m_beginXHasExpression = false; + m_beginYHasExpression = false; + m_beginWidthHasExpression = false; + m_beginHeightHasExpression = false; } } diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h index bb0706b4bfb..78763a104ec 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h @@ -60,6 +60,10 @@ private: QVariant m_beginRightMargin; QVariant m_beginTopMargin; QVariant m_beginBottomMargin; + bool m_beginXHasExpression; + bool m_beginYHasExpression; + bool m_beginWidthHasExpression; + bool m_beginHeightHasExpression; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/core/include/qmlobjectnode.h b/src/plugins/qmldesigner/core/include/qmlobjectnode.h index 7dc37f322af..651e37d7a78 100644 --- a/src/plugins/qmldesigner/core/include/qmlobjectnode.h +++ b/src/plugins/qmldesigner/core/include/qmlobjectnode.h @@ -65,6 +65,7 @@ public: QVariant instanceValue(const QString &name) const; bool hasProperty(const QString &name) const; + bool hasBindingProperty(const QString &name) const; bool propertyAffectedByCurrentState(const QString &name) const; QVariant modelValue(const QString &name) const; bool isInBaseState() const; diff --git a/src/plugins/qmldesigner/core/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/core/model/qmlobjectnode.cpp index f2a25cca35c..b78a7f75fe7 100644 --- a/src/plugins/qmldesigner/core/model/qmlobjectnode.cpp +++ b/src/plugins/qmldesigner/core/model/qmlobjectnode.cpp @@ -102,9 +102,29 @@ bool QmlObjectNode::hasProperty(const QString &name) const if (!isValid()) throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); + if (currentState().hasPropertyChanges(modelNode())) { + QmlPropertyChanges propertyChanges = currentState().propertyChanges(modelNode()); + if (propertyChanges.modelNode().hasProperty(name)) + return true; + } + return modelNode().hasProperty(name); } +bool QmlObjectNode::hasBindingProperty(const QString &name) const +{ + if (!isValid()) + throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); + + if (currentState().hasPropertyChanges(modelNode())) { + QmlPropertyChanges propertyChanges = currentState().propertyChanges(modelNode()); + if (propertyChanges.modelNode().hasBindingProperty(name)) + return true; + } + + return modelNode().hasBindingProperty(name); +} + NodeAbstractProperty QmlObjectNode::nodeAbstractProperty(const QString &name) const { return modelNode().nodeAbstractProperty(name); -- GitLab