forked from qt-creator/qt-creator
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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user