QmlDesigner: Fix renaming a folder in Assets View expands the wrong folder

The previous implementation was saving the _row_ of the TreeView before
performing the rename, and after the rename it was expanding that _row_.
However, when renaming a folder causes it to be moved up or down between
the rows, the saved _row_ number becomes invalid.

The better way is just to use the same mechanism that is being used when
creating a new folder: add the new folder path to a list, and later on
expand rows based on that list.

Task-number: QDS-8896
Change-Id: I6a6bb2faaa7d03ea2af384e5f2b635000577a94c
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Samuel Ghinet
2023-01-26 23:40:01 +02:00
parent 15d92cf1e5
commit 9147c7abe2
4 changed files with 13 additions and 21 deletions

View File

@@ -252,22 +252,15 @@ TreeViewDelegate {
let modelIndex = assetsModel.indexForPath(model.filePath)
function onFolderCreated(path) {
root.assetsView.addCreatedFolder(path)
if (path)
root.assetsView.addCreatedFolder(path)
}
if (root.__isDirectory) {
var row = root.assetsView.rowAtIndex(modelIndex)
var expanded = root.assetsView.isExpanded(row)
var allExpandedState = root.assetsView.computeAllExpandedState()
function onFolderRenamed() {
if (expanded)
root.assetsView.rowToExpand = row
}
root.assetsView.contextMenu.openContextMenuForDir(modelIndex, model.filePath,
model.fileName, allExpandedState, onFolderCreated, onFolderRenamed)
model.fileName, allExpandedState, onFolderCreated)
} else {
let parentDirIndex = assetsModel.parentDirIndex(model.filePath)
let selectedPaths = root.assetsView.selectedPathsAsList()

View File

@@ -16,7 +16,6 @@ StudioControls.Menu {
property string __dirPath: ""
property string __dirName: ""
property var __onFolderCreated: null
property var __onFolderRenamed: null
property var __dirIndex: null
property string __allExpandedState: ""
property var __selectedAssetPathsList: null
@@ -37,12 +36,11 @@ StudioControls.Menu {
}
function openContextMenuForDir(dirModelIndex, dirPath, dirName, allExpandedState,
onFolderCreated, onFolderRenamed)
onFolderCreated)
{
rootView.updateHasMaterialLibrary()
root.__onFolderCreated = onFolderCreated
root.__onFolderRenamed = onFolderRenamed
root.__dirPath = dirPath
root.__dirName = dirName
root.__fileIndex = ""
@@ -159,7 +157,7 @@ StudioControls.Menu {
dirPath: root.__dirPath
dirName: root.__dirName
onAccepted: root.__onFolderRenamed()
onAccepted: root.__onFolderCreated(renameFolderDialog.renamedDirPath)
}
}

View File

@@ -29,7 +29,6 @@ TreeView {
property int rootPathRow: 0
// i.e. first child of the root path
readonly property int firstRow: root.rootPathRow + 1
property int rowToExpand: -1
property var __createdDirectories: []
rowHeightProvider: (row) => {
@@ -170,11 +169,6 @@ TreeView {
if (root.requestedExpandAll)
root.__doExpandAll()
} else {
if (root.rowToExpand > 0) {
root.expand(root.rowToExpand)
root.rowToExpand = -1
}
// on collapsing, set expandAll flag to false.
root.requestedExpandAll = false;
}

View File

@@ -17,6 +17,7 @@ Dialog {
modal: true
property bool renameError: false
property string renamedDirPath: ""
required property string dirPath
required property string dirName
@@ -84,8 +85,10 @@ Dialog {
enabled: folderRename.text !== ""
onClicked: {
var success = assetsModel.renameFolder(root.dirPath, folderRename.text)
if (success)
if (success) {
root.renamedDirPath = root.dirPath.replace(/(.*\/)[^/]+$/, "$1" + folderRename.text)
root.accept()
}
root.renameError = !success
}
@@ -104,4 +107,8 @@ Dialog {
folderRename.forceActiveFocus()
root.renameError = false
}
onRejected: {
root.renamedDirPath = ""
}
}