QmlDesigner.Navigator: Fix reordering in case of invisble nodes

If the model contains nodes that are invisible in the navigator
(e.g. QtObject) updateItemRowOrder() does not work correctly.

To avoid complexity we update the subtree in this case.

Change-Id: Ia40ce061e9188ef9ad6ca54ce3444432b878ddf6
Reviewed-by: Tim Jenssen <tim.jenssen@digia.com>
This commit is contained in:
Thomas Hartmann
2014-09-08 10:37:22 +02:00
parent d31b3dcef3
commit 99aae36e7a
3 changed files with 7 additions and 30 deletions

View File

@@ -360,33 +360,6 @@ static void findTargetItem(const NodeListProperty &listProperty,
}
}
static void moveItemRow(QStandardItem *targetItem ,
int currentRowNumber,
int newRowNumber)
{
if (targetItem && currentRowNumber != newRowNumber) {//### Items without a parent should not exist
QList<QStandardItem*> items = targetItem->takeRow(currentRowNumber);
targetItem->insertRow(newRowNumber, items);
}
}
/**
Updates the sibling position of the item, depending on the position in the model.
*/
void NavigatorTreeModel::updateItemRowOrder(const NodeListProperty &listProperty, const ModelNode &modelNode, int /*oldIndex*/)
{
if (isInTree(modelNode)) {
ItemRow currentItemRow = itemRowForNode(modelNode);
int currentRowNumber = currentItemRow.idItem->row();
int newRowNumber = listProperty.indexOf(modelNode);
QStandardItem *targetItem = 0;
findTargetItem(listProperty, currentItemRow, this, &newRowNumber, &targetItem);
moveItemRow(targetItem, currentRowNumber, newRowNumber);
}
}
static void handleWrongId(QStandardItem *item, const ModelNode &modelNode, const QString &errorTitle, const QString &errorMessage, NavigatorTreeModel *treeModel)
{
QMessageBox::warning(Core::ICore::dialogParent(), errorTitle, errorMessage);

View File

@@ -113,7 +113,6 @@ public:
void addSubTree(const ModelNode &node);
void removeSubTree(const ModelNode &node);
void updateItemRow(const ModelNode &node);
void updateItemRowOrder(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex);
void setId(const QModelIndex &index, const QString &id);
void setVisible(const QModelIndex &index, bool visible);

View File

@@ -296,8 +296,13 @@ void NavigatorView::instancesToken(const QString &/*tokenName*/, int /*tokenNumb
void NavigatorView::nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &node, int oldIndex)
{
if (m_treeModel->isInTree(node))
m_treeModel->updateItemRowOrder(listProperty, node, oldIndex);
if (m_treeModel->isInTree(node)) {
m_treeModel->removeSubTree(listProperty.parentModelNode());
if (node.isInHierarchy())
m_treeModel->addSubTree(listProperty.parentModelNode());
}
}
void NavigatorView::changeToComponent(const QModelIndex &index)