From 074892591d87450aa5cb06844fb602743ccc6416 Mon Sep 17 00:00:00 2001 From: David Back Date: Mon, 4 Jun 2018 11:10:29 -0700 Subject: [PATCH 1/2] fix auto-selecting subdir and not showing Choose when no row selected --- interface/resources/qml/dialogs/FileDialog.qml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/interface/resources/qml/dialogs/FileDialog.qml b/interface/resources/qml/dialogs/FileDialog.qml index 49bfe78434..6651af0db3 100644 --- a/interface/resources/qml/dialogs/FileDialog.qml +++ b/interface/resources/qml/dialogs/FileDialog.qml @@ -332,6 +332,7 @@ ModalWindow { } onFolderChanged: { + d.clearSelection(); fileTableModel.update(); // Update once the data from the folder change is available. } @@ -451,7 +452,7 @@ ModalWindow { rows = 0, i; - var newFilesModel = filesModelBuilder.createObject(root); + filesModel = filesModelBuilder.createObject(root); comparisonFunction = sortOrder === Qt.AscendingOrder ? function(a, b) { return a < b; } @@ -473,7 +474,7 @@ ModalWindow { while (lower < upper) { middle = Math.floor((lower + upper) / 2); var lessThan; - if (comparisonFunction(sortValue, newFilesModel.get(middle)[sortField])) { + if (comparisonFunction(sortValue, filesModel.get(middle)[sortField])) { lessThan = true; upper = middle; } else { @@ -482,7 +483,7 @@ ModalWindow { } } - newFilesModel.insert(lower, { + filesModel.insert(lower, { fileName: fileName, fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")), fileSize: model.getItem(i, "fileSize"), @@ -493,9 +494,6 @@ ModalWindow { rows++; } - filesModel = newFilesModel; - - d.clearSelection(); } } From 6b7d9586d1862b857bf89e79500d7e00e9bd5416 Mon Sep 17 00:00:00 2001 From: David Back Date: Mon, 4 Jun 2018 15:56:10 -0700 Subject: [PATCH 2/2] apply fixes to other file dialogs and fix tablet dialog buttons --- .../qml/dialogs/+android/FileDialog.qml | 10 ++-- .../qml/dialogs/TabletFileDialog.qml | 12 ++-- .../tablet/tabletWindows/TabletFileDialog.qml | 60 ++++++++++++------- 3 files changed, 46 insertions(+), 36 deletions(-) diff --git a/interface/resources/qml/dialogs/+android/FileDialog.qml b/interface/resources/qml/dialogs/+android/FileDialog.qml index 86e6e1ef6c..be6524d2b8 100644 --- a/interface/resources/qml/dialogs/+android/FileDialog.qml +++ b/interface/resources/qml/dialogs/+android/FileDialog.qml @@ -331,6 +331,7 @@ ModalWindow { } onFolderChanged: { + d.clearSelection(); fileTableModel.update(); // Update once the data from the folder change is available. } @@ -450,7 +451,7 @@ ModalWindow { rows = 0, i; - var newFilesModel = filesModelBuilder.createObject(root); + filesModel = filesModelBuilder.createObject(root); comparisonFunction = sortOrder === Qt.AscendingOrder ? function(a, b) { return a < b; } @@ -472,7 +473,7 @@ ModalWindow { while (lower < upper) { middle = Math.floor((lower + upper) / 2); var lessThan; - if (comparisonFunction(sortValue, newFilesModel.get(middle)[sortField])) { + if (comparisonFunction(sortValue, filesModel.get(middle)[sortField])) { lessThan = true; upper = middle; } else { @@ -481,7 +482,7 @@ ModalWindow { } } - newFilesModel.insert(lower, { + filesModel.insert(lower, { fileName: fileName, fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")), fileSize: model.getItem(i, "fileSize"), @@ -492,9 +493,6 @@ ModalWindow { rows++; } - filesModel = newFilesModel; - - d.clearSelection(); } } diff --git a/interface/resources/qml/dialogs/TabletFileDialog.qml b/interface/resources/qml/dialogs/TabletFileDialog.qml index e7c93e6d8e..4de0460796 100644 --- a/interface/resources/qml/dialogs/TabletFileDialog.qml +++ b/interface/resources/qml/dialogs/TabletFileDialog.qml @@ -295,7 +295,8 @@ TabletModalWindow { } onFolderChanged: { - fileTableModel.update() + d.clearSelection(); + fileTableModel.update(); } function getItem(index, field) { @@ -413,7 +414,7 @@ TabletModalWindow { rows = 0, i; - var newFilesModel = filesModelBuilder.createObject(root); + filesModel = filesModelBuilder.createObject(root); comparisonFunction = sortOrder === Qt.AscendingOrder ? function(a, b) { return a < b; } @@ -435,7 +436,7 @@ TabletModalWindow { while (lower < upper) { middle = Math.floor((lower + upper) / 2); var lessThan; - if (comparisonFunction(sortValue, newFilesModel.get(middle)[sortField])) { + if (comparisonFunction(sortValue, filesModel.get(middle)[sortField])) { lessThan = true; upper = middle; } else { @@ -444,7 +445,7 @@ TabletModalWindow { } } - newFilesModel.insert(lower, { + filesModel.insert(lower, { fileName: fileName, fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")), fileSize: model.getItem(i, "fileSize"), @@ -455,9 +456,6 @@ TabletModalWindow { rows++; } - filesModel = newFilesModel; - - d.clearSelection(); } } diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/TabletFileDialog.qml b/interface/resources/qml/hifi/tablet/tabletWindows/TabletFileDialog.qml index f3f98f24e5..871d1c92a9 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/TabletFileDialog.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/TabletFileDialog.qml @@ -8,12 +8,12 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -import QtQuick 2.5 -import QtQuick.Controls 1.4 +import QtQuick 2.7 import Qt.labs.folderlistmodel 2.1 import Qt.labs.settings 1.0 -import QtQuick.Controls.Styles 1.4 import QtQuick.Dialogs 1.2 as OriginalDialogs +import QtQuick.Controls 1.4 as QQC1 +import QtQuick.Controls 2.3 import ".." import "../../../controls-uit" @@ -30,6 +30,8 @@ Rectangle { color: hifi.colors.baseGray; + property var filesModel: ListModel { } + Settings { category: "FileDialog" property alias width: root.width @@ -149,7 +151,7 @@ Rectangle { ComboBox { id: pathSelector - anchors { + anchors { top: parent.top topMargin: hifi.dimensions.contentMargin.y left: navControls.right @@ -247,7 +249,9 @@ Rectangle { } currentSelectionUrl = helper.pathToUrl(fileTableView.model.get(row).filePath); - currentSelectionIsFolder = fileTableView.model.isFolder(row); + currentSelectionIsFolder = fileTableView.model !== filesModel ? + fileTableView.model.isFolder(row) : + fileTableModel.isFolder(row); if (root.selectDirectory || !currentSelectionIsFolder) { currentSelection.text = capitalizeDrive(helper.urlToPath(currentSelectionUrl)); } else { @@ -287,6 +291,7 @@ Rectangle { } onFolderChanged: { + d.clearSelection(); fileTableModel.update(); // Update once the data from the folder change is available. } @@ -327,7 +332,12 @@ Rectangle { } } - ListModel { + Component { + id: filesModelBuilder + ListModel { } + } + + QtObject { id: fileTableModel // FolderListModel has a couple of problems: @@ -379,7 +389,11 @@ Rectangle { if (row === -1) { return false; } - return get(row).fileIsDir; + return filesModel.get(row).fileIsDir; + } + + function get(row) { + return filesModel.get(row) } function update() { @@ -397,7 +411,7 @@ Rectangle { rows = 0, i; - clear(); + filesModel = filesModelBuilder.createObject(root); comparisonFunction = sortOrder === Qt.AscendingOrder ? function(a, b) { return a < b; } @@ -419,7 +433,7 @@ Rectangle { while (lower < upper) { middle = Math.floor((lower + upper) / 2); var lessThan; - if (comparisonFunction(sortValue, get(middle)[sortField])) { + if (comparisonFunction(sortValue, filesModel.get(middle)[sortField])) { lessThan = true; upper = middle; } else { @@ -428,7 +442,7 @@ Rectangle { } } - insert(lower, { + filesModel.insert(lower, { fileName: fileName, fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")), fileSize: model.getItem(i, "fileSize"), @@ -439,8 +453,6 @@ Rectangle { rows++; } - - d.clearSelection(); } } @@ -465,12 +477,12 @@ Rectangle { sortIndicatorOrder: Qt.AscendingOrder sortIndicatorVisible: true - model: fileTableModel + model: filesModel function updateSort() { - model.sortOrder = sortIndicatorOrder; - model.sortColumn = sortIndicatorColumn; - model.update(); + fileTableModel.sortOrder = sortIndicatorOrder; + fileTableModel.sortColumn = sortIndicatorColumn; + fileTableModel.update(); } onSortIndicatorColumnChanged: { updateSort(); } @@ -522,7 +534,7 @@ Rectangle { } } - TableViewColumn { + QQC1.TableViewColumn { id: fileNameColumn role: "fileName" title: "Name" @@ -530,7 +542,7 @@ Rectangle { movable: false resizable: true } - TableViewColumn { + QQC1.TableViewColumn { id: fileMofifiedColumn role: "fileModified" title: "Date" @@ -539,7 +551,7 @@ Rectangle { resizable: true visible: !selectDirectory } - TableViewColumn { + QQC1.TableViewColumn { role: "fileSize" title: "Size" width: fileTableView.width - fileNameColumn.width - fileMofifiedColumn.width @@ -554,11 +566,12 @@ Rectangle { } function navigateToCurrentRow() { + var currentModel = fileTableView.model !== filesModel ? fileTableView.model : fileTableModel var row = fileTableView.currentRow - var isFolder = model.isFolder(row); - var file = model.get(row).filePath; + var isFolder = currentModel.isFolder(row); + var file = currentModel.get(row).filePath; if (isFolder) { - fileTableView.model.folder = helper.pathToUrl(file); + currentModel.folder = helper.pathToUrl(file); } else { okAction.trigger(); } @@ -573,7 +586,8 @@ Rectangle { var newPrefix = prefix + event.text.toLowerCase(); var matchedIndex = -1; for (var i = 0; i < model.count; ++i) { - var name = model.get(i).fileName.toLowerCase(); + var name = model !== filesModel ? model.get(i).fileName.toLowerCase() : + filesModel.get(i).fileName.toLowerCase(); if (0 === name.indexOf(newPrefix)) { matchedIndex = i; break;