diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp index 8e223cc8e499cc77e112723b57ef67e48c46bd11..38e4576cd1ba2d6c512f57e988289732f444e5ce 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp @@ -110,6 +110,126 @@ void FormEditorGraphicsView::mouseReleaseEvent(QMouseEvent *event) } } +void FormEditorGraphicsView::drawForeground(QPainter *painter, const QRectF &/*rect*/ ) +{ + if (!m_feedbackNode.isValid()) + return; + + painter->save(); + + if (m_beginX != m_feedbackNode.instanceValue("x")) + painter->setPen(Qt::green); + else + painter->setPen(Qt::black); + + painter->drawText(mapToScene(QPoint(2.0, 12.0)), QString("x: \t\t%1").arg(m_feedbackNode.instanceValue("x").toString())); + + + if (m_beginY != m_feedbackNode.instanceValue("y")) + painter->setPen(Qt::green); + else + painter->setPen(Qt::black); + + painter->drawText(mapToScene(QPoint(2.0, 24.0)), QString("y: \t\t%1").arg(m_feedbackNode.instanceValue("y").toString())); + + + if (m_beginWidth != m_feedbackNode.instanceValue("width")) + painter->setPen(Qt::green); + else + painter->setPen(Qt::black); + + painter->drawText(mapToScene(QPoint(2.0, 36.0)), QString("width: \t\t%1").arg(m_feedbackNode.instanceValue("width").toString())); + + + if (m_beginHeight != m_feedbackNode.instanceValue("height")) + painter->setPen(Qt::green); + else + painter->setPen(Qt::black); + + painter->drawText(mapToScene(QPoint(2.0, 48.0)), QString("height:\t\t%1").arg(m_feedbackNode.instanceValue("height").toString())); + + if (m_parentNode == m_feedbackNode.instanceParent()) { + + if (m_feedbackNode.canReparent()) { + painter->setPen(Qt::black); + painter->drawText(mapToScene(QPoint(2.0, 60.0)), QString("Can reparent.")); + } else { + painter->setPen(Qt::red); + painter->drawText(mapToScene(QPoint(2.0, 60.0)), QString("Cannot reparent.")); + } + } else { + painter->setPen(Qt::yellow); + if (m_feedbackNode.instanceParent().id().isEmpty()) + painter->drawText(mapToScene(QPoint(2.0, 60.0)), QString("Parent has changed.")); + else + painter->drawText(mapToScene(QPoint(2.0, 60.0)), QString("Parent has changed to %1.").arg(m_feedbackNode.instanceParent().id())); + } + + + if (m_beginTopMargin != m_feedbackNode.instanceValue("anchors.leftMargin")) + painter->setPen(Qt::green); + else + painter->setPen(Qt::black); + + painter->drawText(mapToScene(QPoint(2.0, 72.0)), QString("leftMargin: \t\t%1").arg(m_feedbackNode.instanceValue("anchors.leftMargin").toString())); + + if (m_beginRightMargin != m_feedbackNode.instanceValue("anchors.rightMargin")) + painter->setPen(Qt::green); + else + painter->setPen(Qt::black); + + painter->drawText(mapToScene(QPoint(2.0, 84.0)), QString("rightMargin: \t\t%1").arg(m_feedbackNode.instanceValue("anchors.rightMargin").toString())); + + + + if (m_beginTopMargin != m_feedbackNode.instanceValue("anchors.topMargin")) + painter->setPen(Qt::green); + else + painter->setPen(Qt::black); + + painter->drawText(mapToScene(QPoint(2.0, 96.0)), QString("topMargin: \t\t%1").arg(m_feedbackNode.instanceValue("anchors.topMargin").toString())); + + + if (m_beginBottomMargin != m_feedbackNode.instanceValue("anchors.bottomMargin")) + painter->setPen(Qt::green); + else + painter->setPen(Qt::black); + + painter->drawText(mapToScene(QPoint(2.0, 108.0)), QString("bottomMargin: \t%1").arg(m_feedbackNode.instanceValue("anchors.bottomMargin").toString())); + + painter->restore(); +} + +void FormEditorGraphicsView::setFeedbackNode(const QmlItemNode &node) +{ + if (node == m_feedbackNode) + return; + + m_feedbackNode = node; + + if (m_feedbackNode.isValid()) { + m_beginX = m_feedbackNode.instanceValue("x"); + m_beginY = m_feedbackNode.instanceValue("y"); + m_beginWidth = m_feedbackNode.instanceValue("width"); + m_beginHeight = m_feedbackNode.instanceValue("height"); + m_parentNode = m_feedbackNode.instanceParent(); + m_beginLeftMargin = m_feedbackNode.instanceValue("anchors.leftMargin"); + m_beginRightMargin = m_feedbackNode.instanceValue("anchors.rightMargin"); + m_beginTopMargin = m_feedbackNode.instanceValue("anchors.topMargin"); + m_beginBottomMargin = m_feedbackNode.instanceValue("anchors.bottomMargin"); + } else { + m_beginX = QVariant(); + m_beginY = QVariant(); + m_beginWidth = QVariant(); + m_beginHeight = QVariant(); + m_parentNode = QmlObjectNode(); + m_beginLeftMargin = QVariant(); + m_beginRightMargin = QVariant(); + m_beginTopMargin = QVariant(); + m_beginBottomMargin = QVariant(); + } +} + void FormEditorGraphicsView::drawBackground(QPainter *painter, const QRectF &rect) { painter->save(); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h index 1caf1ac24bbf249cac1136da6a873b3f09d743a0..bb0706b4bfb7e9ff59b800269a9c8dffc15ea1eb 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h @@ -31,6 +31,7 @@ #define FORMEDITORGRAPHICSVIEW_H #include <QGraphicsView> +#include <qmlitemnode.h> namespace QmlDesigner { @@ -40,12 +41,25 @@ Q_OBJECT public: explicit FormEditorGraphicsView(QWidget *parent = 0); + void setFeedbackNode(const QmlItemNode &node); protected: + void drawForeground(QPainter *painter, const QRectF &rect ); void drawBackground(QPainter *painter, const QRectF &rect); void wheelEvent(QWheelEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); +private: + QmlItemNode m_feedbackNode; + QmlObjectNode m_parentNode; + QVariant m_beginX; + QVariant m_beginY; + QVariant m_beginWidth; + QVariant m_beginHeight; + QVariant m_beginLeftMargin; + QVariant m_beginRightMargin; + QVariant m_beginTopMargin; + QVariant m_beginBottomMargin; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index 02ae0dc29c76f3cee0e97b5e74d3a18096cf0d0a..b012e6f32004970265ad05495e354c4e6fa09a07 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -251,6 +251,11 @@ void FormEditorView::selectedNodesChanged(const QList<ModelNode> &selectedNodeLi item->update(); } + if (selectedNodeList.count() == 1) + m_formEditorWidget->setFeedbackNode(QmlItemNode(selectedNodeList.first())); + else + m_formEditorWidget->setFeedbackNode(QmlItemNode()); + m_scene->update(); } @@ -482,6 +487,8 @@ void FormEditorView::transformChanged(const QmlObjectNode &qmlObjectNode) m_scene->synchronizeTransformation(itemNode); m_currentTool->formEditorItemsChanged(QList<FormEditorItem*>() << m_scene->itemForQmlItemNode(itemNode)); } + + scene()->update(); } void FormEditorView::parentChanged(const QmlObjectNode &qmlObjectNode) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp index e7bb9953374c42c6708927e0e1092821c68a518f..e8ded838265b30ee33bfcbe1cc5417d7f9a3b530 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp @@ -284,6 +284,11 @@ double FormEditorWidget::margins() const return m_snappingMarginAction->currentValue().toDouble(); } +void FormEditorWidget::setFeedbackNode(const QmlItemNode &node) +{ + m_graphicsView->setFeedbackNode(node); +} + } diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h index 20cda56723aefc9cd9001394e9f5d8442c002a48..688ef5839385b9b12a790b37d5e3af6d2be3b8aa 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h @@ -42,6 +42,8 @@ class FormEditorScene; class FormEditorGraphicsView; class ToolBox; class NumberSeriesAction; +class QmlItemNode; + class FormEditorWidget : public QWidget { @@ -63,6 +65,8 @@ public: double spacing() const; double margins() const; + void setFeedbackNode(const QmlItemNode &node); + protected: void enterEvent(QEvent *event);