Merge pull request #13292 from dback2/fileChooser

File Dialog Fixes
This commit is contained in:
David Back 2018-06-07 09:38:56 -07:00 committed by GitHub
commit ae5d056ca0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 42 deletions

View file

@ -331,6 +331,7 @@ ModalWindow {
} }
onFolderChanged: { onFolderChanged: {
d.clearSelection();
fileTableModel.update(); // Update once the data from the folder change is available. fileTableModel.update(); // Update once the data from the folder change is available.
} }
@ -450,7 +451,7 @@ ModalWindow {
rows = 0, rows = 0,
i; i;
var newFilesModel = filesModelBuilder.createObject(root); filesModel = filesModelBuilder.createObject(root);
comparisonFunction = sortOrder === Qt.AscendingOrder comparisonFunction = sortOrder === Qt.AscendingOrder
? function(a, b) { return a < b; } ? function(a, b) { return a < b; }
@ -472,7 +473,7 @@ ModalWindow {
while (lower < upper) { while (lower < upper) {
middle = Math.floor((lower + upper) / 2); middle = Math.floor((lower + upper) / 2);
var lessThan; var lessThan;
if (comparisonFunction(sortValue, newFilesModel.get(middle)[sortField])) { if (comparisonFunction(sortValue, filesModel.get(middle)[sortField])) {
lessThan = true; lessThan = true;
upper = middle; upper = middle;
} else { } else {
@ -481,7 +482,7 @@ ModalWindow {
} }
} }
newFilesModel.insert(lower, { filesModel.insert(lower, {
fileName: fileName, fileName: fileName,
fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")), fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")),
fileSize: model.getItem(i, "fileSize"), fileSize: model.getItem(i, "fileSize"),
@ -492,9 +493,6 @@ ModalWindow {
rows++; rows++;
} }
filesModel = newFilesModel;
d.clearSelection();
} }
} }

View file

@ -332,6 +332,7 @@ ModalWindow {
} }
onFolderChanged: { onFolderChanged: {
d.clearSelection();
fileTableModel.update(); // Update once the data from the folder change is available. fileTableModel.update(); // Update once the data from the folder change is available.
} }
@ -451,7 +452,7 @@ ModalWindow {
rows = 0, rows = 0,
i; i;
var newFilesModel = filesModelBuilder.createObject(root); filesModel = filesModelBuilder.createObject(root);
comparisonFunction = sortOrder === Qt.AscendingOrder comparisonFunction = sortOrder === Qt.AscendingOrder
? function(a, b) { return a < b; } ? function(a, b) { return a < b; }
@ -473,7 +474,7 @@ ModalWindow {
while (lower < upper) { while (lower < upper) {
middle = Math.floor((lower + upper) / 2); middle = Math.floor((lower + upper) / 2);
var lessThan; var lessThan;
if (comparisonFunction(sortValue, newFilesModel.get(middle)[sortField])) { if (comparisonFunction(sortValue, filesModel.get(middle)[sortField])) {
lessThan = true; lessThan = true;
upper = middle; upper = middle;
} else { } else {
@ -482,7 +483,7 @@ ModalWindow {
} }
} }
newFilesModel.insert(lower, { filesModel.insert(lower, {
fileName: fileName, fileName: fileName,
fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")), fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")),
fileSize: model.getItem(i, "fileSize"), fileSize: model.getItem(i, "fileSize"),
@ -493,9 +494,6 @@ ModalWindow {
rows++; rows++;
} }
filesModel = newFilesModel;
d.clearSelection();
} }
} }

View file

@ -295,7 +295,8 @@ TabletModalWindow {
} }
onFolderChanged: { onFolderChanged: {
fileTableModel.update() d.clearSelection();
fileTableModel.update();
} }
function getItem(index, field) { function getItem(index, field) {
@ -413,7 +414,7 @@ TabletModalWindow {
rows = 0, rows = 0,
i; i;
var newFilesModel = filesModelBuilder.createObject(root); filesModel = filesModelBuilder.createObject(root);
comparisonFunction = sortOrder === Qt.AscendingOrder comparisonFunction = sortOrder === Qt.AscendingOrder
? function(a, b) { return a < b; } ? function(a, b) { return a < b; }
@ -435,7 +436,7 @@ TabletModalWindow {
while (lower < upper) { while (lower < upper) {
middle = Math.floor((lower + upper) / 2); middle = Math.floor((lower + upper) / 2);
var lessThan; var lessThan;
if (comparisonFunction(sortValue, newFilesModel.get(middle)[sortField])) { if (comparisonFunction(sortValue, filesModel.get(middle)[sortField])) {
lessThan = true; lessThan = true;
upper = middle; upper = middle;
} else { } else {
@ -444,7 +445,7 @@ TabletModalWindow {
} }
} }
newFilesModel.insert(lower, { filesModel.insert(lower, {
fileName: fileName, fileName: fileName,
fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")), fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")),
fileSize: model.getItem(i, "fileSize"), fileSize: model.getItem(i, "fileSize"),
@ -455,9 +456,6 @@ TabletModalWindow {
rows++; rows++;
} }
filesModel = newFilesModel;
d.clearSelection();
} }
} }

View file

@ -8,12 +8,12 @@
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// //
import QtQuick 2.5 import QtQuick 2.7
import QtQuick.Controls 1.4
import Qt.labs.folderlistmodel 2.1 import Qt.labs.folderlistmodel 2.1
import Qt.labs.settings 1.0 import Qt.labs.settings 1.0
import QtQuick.Controls.Styles 1.4
import QtQuick.Dialogs 1.2 as OriginalDialogs import QtQuick.Dialogs 1.2 as OriginalDialogs
import QtQuick.Controls 1.4 as QQC1
import QtQuick.Controls 2.3
import ".." import ".."
import "../../../controls-uit" import "../../../controls-uit"
@ -30,6 +30,8 @@ Rectangle {
color: hifi.colors.baseGray; color: hifi.colors.baseGray;
property var filesModel: ListModel { }
Settings { Settings {
category: "FileDialog" category: "FileDialog"
property alias width: root.width property alias width: root.width
@ -149,7 +151,7 @@ Rectangle {
ComboBox { ComboBox {
id: pathSelector id: pathSelector
anchors { anchors {
top: parent.top top: parent.top
topMargin: hifi.dimensions.contentMargin.y topMargin: hifi.dimensions.contentMargin.y
left: navControls.right left: navControls.right
@ -247,7 +249,9 @@ Rectangle {
} }
currentSelectionUrl = helper.pathToUrl(fileTableView.model.get(row).filePath); 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) { if (root.selectDirectory || !currentSelectionIsFolder) {
currentSelection.text = capitalizeDrive(helper.urlToPath(currentSelectionUrl)); currentSelection.text = capitalizeDrive(helper.urlToPath(currentSelectionUrl));
} else { } else {
@ -287,6 +291,7 @@ Rectangle {
} }
onFolderChanged: { onFolderChanged: {
d.clearSelection();
fileTableModel.update(); // Update once the data from the folder change is available. 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 id: fileTableModel
// FolderListModel has a couple of problems: // FolderListModel has a couple of problems:
@ -379,7 +389,11 @@ Rectangle {
if (row === -1) { if (row === -1) {
return false; return false;
} }
return get(row).fileIsDir; return filesModel.get(row).fileIsDir;
}
function get(row) {
return filesModel.get(row)
} }
function update() { function update() {
@ -397,7 +411,7 @@ Rectangle {
rows = 0, rows = 0,
i; i;
clear(); filesModel = filesModelBuilder.createObject(root);
comparisonFunction = sortOrder === Qt.AscendingOrder comparisonFunction = sortOrder === Qt.AscendingOrder
? function(a, b) { return a < b; } ? function(a, b) { return a < b; }
@ -419,7 +433,7 @@ Rectangle {
while (lower < upper) { while (lower < upper) {
middle = Math.floor((lower + upper) / 2); middle = Math.floor((lower + upper) / 2);
var lessThan; var lessThan;
if (comparisonFunction(sortValue, get(middle)[sortField])) { if (comparisonFunction(sortValue, filesModel.get(middle)[sortField])) {
lessThan = true; lessThan = true;
upper = middle; upper = middle;
} else { } else {
@ -428,7 +442,7 @@ Rectangle {
} }
} }
insert(lower, { filesModel.insert(lower, {
fileName: fileName, fileName: fileName,
fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")), fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")),
fileSize: model.getItem(i, "fileSize"), fileSize: model.getItem(i, "fileSize"),
@ -439,8 +453,6 @@ Rectangle {
rows++; rows++;
} }
d.clearSelection();
} }
} }
@ -465,12 +477,12 @@ Rectangle {
sortIndicatorOrder: Qt.AscendingOrder sortIndicatorOrder: Qt.AscendingOrder
sortIndicatorVisible: true sortIndicatorVisible: true
model: fileTableModel model: filesModel
function updateSort() { function updateSort() {
model.sortOrder = sortIndicatorOrder; fileTableModel.sortOrder = sortIndicatorOrder;
model.sortColumn = sortIndicatorColumn; fileTableModel.sortColumn = sortIndicatorColumn;
model.update(); fileTableModel.update();
} }
onSortIndicatorColumnChanged: { updateSort(); } onSortIndicatorColumnChanged: { updateSort(); }
@ -522,7 +534,7 @@ Rectangle {
} }
} }
TableViewColumn { QQC1.TableViewColumn {
id: fileNameColumn id: fileNameColumn
role: "fileName" role: "fileName"
title: "Name" title: "Name"
@ -530,7 +542,7 @@ Rectangle {
movable: false movable: false
resizable: true resizable: true
} }
TableViewColumn { QQC1.TableViewColumn {
id: fileMofifiedColumn id: fileMofifiedColumn
role: "fileModified" role: "fileModified"
title: "Date" title: "Date"
@ -539,7 +551,7 @@ Rectangle {
resizable: true resizable: true
visible: !selectDirectory visible: !selectDirectory
} }
TableViewColumn { QQC1.TableViewColumn {
role: "fileSize" role: "fileSize"
title: "Size" title: "Size"
width: fileTableView.width - fileNameColumn.width - fileMofifiedColumn.width width: fileTableView.width - fileNameColumn.width - fileMofifiedColumn.width
@ -554,11 +566,12 @@ Rectangle {
} }
function navigateToCurrentRow() { function navigateToCurrentRow() {
var currentModel = fileTableView.model !== filesModel ? fileTableView.model : fileTableModel
var row = fileTableView.currentRow var row = fileTableView.currentRow
var isFolder = model.isFolder(row); var isFolder = currentModel.isFolder(row);
var file = model.get(row).filePath; var file = currentModel.get(row).filePath;
if (isFolder) { if (isFolder) {
fileTableView.model.folder = helper.pathToUrl(file); currentModel.folder = helper.pathToUrl(file);
} else { } else {
okAction.trigger(); okAction.trigger();
} }
@ -573,7 +586,8 @@ Rectangle {
var newPrefix = prefix + event.text.toLowerCase(); var newPrefix = prefix + event.text.toLowerCase();
var matchedIndex = -1; var matchedIndex = -1;
for (var i = 0; i < model.count; ++i) { 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)) { if (0 === name.indexOf(newPrefix)) {
matchedIndex = i; matchedIndex = i;
break; break;