diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp index 4cf4a250c0ff445379b4096e53691a9187e8a8f0..959ed213b582847ca909cdcf02eda640a45252d2 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp @@ -40,7 +40,8 @@ namespace QmlDesigner { NavigatorTreeModel::NavigatorTreeModel(QObject *parent) - : QStandardItemModel(parent) + : QStandardItemModel(parent), + m_blockItemChangedSignal(false) { invisibleRootItem()->setFlags(Qt::NoItemFlags); @@ -205,9 +206,13 @@ NavigatorTreeModel::ItemRow NavigatorTreeModel::createItemRow(const ModelNode &n void NavigatorTreeModel::updateItemRow(const ModelNode &node, ItemRow items) { + bool blockSignal = blockItemChangedSignal(true); + items.idItem->setText(node.id()); items.typeItem->setText(node.simplifiedTypeName()); items.visibilityItem->setCheckState(node.auxiliaryData("invisible").toBool() ? Qt::Unchecked : Qt::Checked); + + blockItemChangedSignal(blockSignal); } /** @@ -217,6 +222,7 @@ void NavigatorTreeModel::updateItemRow(const ModelNode &node) { if (!containsNode(node)) return; + updateItemRow(node, itemRowForNode(node)); } @@ -227,6 +233,7 @@ void NavigatorTreeModel::updateItemRowOrder(const ModelNode &node) { if (!containsNode(node)) return; + ItemRow itemRow = itemRowForNode(node); int currentRow = itemRow.idItem->row(); int newRow = currentRow; @@ -243,6 +250,9 @@ void NavigatorTreeModel::updateItemRowOrder(const ModelNode &node) void NavigatorTreeModel::handleChangedItem(QStandardItem *item) { + if (m_blockItemChangedSignal) + return; + uint nodeHash = item->data(Qt::UserRole).toUInt(); Q_ASSERT(nodeHash && containsNodeHash(nodeHash)); ModelNode node = nodeForHash(nodeHash); @@ -394,5 +404,14 @@ QList<ModelNode> NavigatorTreeModel::modelNodeChildren(const ModelNode &parentNo return children; } +// along the lines of QObject::blockSignals +bool NavigatorTreeModel::blockItemChangedSignal(bool block) +{ + bool oldValue = m_blockItemChangedSignal; + m_blockItemChangedSignal = block; + return oldValue; +} + + } diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h index d4212ffd997c4cb39fab40470dde1c51d479f882..f03614a1bfe45ee18b00e20d11068a02481bf37c 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h +++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h @@ -103,11 +103,14 @@ private: QList<ModelNode> modelNodeChildren(const ModelNode &parentNode); -private: + bool blockItemChangedSignal(bool block); +private: QHash<ModelNode, ItemRow> m_nodeItemHash; QHash<uint, ModelNode> m_nodeHash; QWeakPointer<AbstractView> m_view; + + bool m_blockItemChangedSignal; }; } // namespace QmlDesigner