mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-05-29 15:40:11 +02:00
Sort files case-insensitively, directories first
This commit is contained in:
parent
862a88cf29
commit
585467094c
1 changed files with 55 additions and 9 deletions
|
@ -238,6 +238,8 @@ ModalWindow {
|
|||
// drive information when viewing at the computer level.
|
||||
|
||||
property var folder
|
||||
property int sortOrder: Qt.AscendingOrder
|
||||
property int sortColumn: 0
|
||||
|
||||
onFolderChanged: folderListModel.folder = folder;
|
||||
|
||||
|
@ -249,16 +251,61 @@ ModalWindow {
|
|||
}
|
||||
|
||||
function update() {
|
||||
var i;
|
||||
var dataFields = ["fileName", "fileModified", "fileSize"],
|
||||
sortFields = ["fileNameSort", "fileModified", "fileSize"],
|
||||
dataField = dataFields[sortColumn],
|
||||
sortField = sortFields[sortColumn],
|
||||
sortValue,
|
||||
fileName,
|
||||
fileIsDir,
|
||||
comparisonFunction,
|
||||
lower,
|
||||
middle,
|
||||
upper,
|
||||
rows = 0,
|
||||
i;
|
||||
clear();
|
||||
|
||||
comparisonFunction = sortOrder === Qt.AscendingOrder
|
||||
? function(a, b) { return a < b; }
|
||||
: function(a, b) { return a > b; }
|
||||
|
||||
for (i = 0; i < folderListModel.count; i++) {
|
||||
append({
|
||||
fileName: folderListModel.get(i, "fileName"),
|
||||
fileModified: folderListModel.get(i, "fileModified"),
|
||||
fileName = folderListModel.get(i, "fileName");
|
||||
fileIsDir = folderListModel.get(i, "fileIsDir");
|
||||
|
||||
sortValue = folderListModel.get(i, dataField);
|
||||
|
||||
if (dataField === "fileName") {
|
||||
// Directories first by prefixing a "*".
|
||||
// Case-insensitive.
|
||||
sortValue = (fileIsDir ? "*" : "") + sortValue.toLowerCase();
|
||||
}
|
||||
|
||||
lower = 0;
|
||||
upper = rows;
|
||||
while (lower < upper) {
|
||||
middle = Math.floor((lower + upper) / 2);
|
||||
var lessThan;
|
||||
if (comparisonFunction(sortValue, get(middle)[sortField])) {
|
||||
lessThan = true;
|
||||
upper = middle;
|
||||
} else {
|
||||
lessThan = false;
|
||||
lower = middle + 1;
|
||||
}
|
||||
}
|
||||
|
||||
insert(lower, {
|
||||
fileName: fileName,
|
||||
fileModified: (fileIsDir ? new Date(0) : folderListModel.get(i, "fileModified")),
|
||||
fileSize: folderListModel.get(i, "fileSize"),
|
||||
filePath: folderListModel.get(i, "filePath"),
|
||||
fileIsDir: folderListModel.get(i, "fileIsDir")
|
||||
fileIsDir: fileIsDir,
|
||||
fileNameSort: (fileIsDir ? "*" : "") + fileName.toLowerCase()
|
||||
});
|
||||
|
||||
rows++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -287,10 +334,9 @@ ModalWindow {
|
|||
model: fileTableModel
|
||||
|
||||
function updateSort() {
|
||||
model.sortReversed = sortIndicatorColumn == 0
|
||||
? (sortIndicatorOrder == Qt.DescendingOrder)
|
||||
: (sortIndicatorOrder == Qt.AscendingOrder); // Date and size fields have opposite sense
|
||||
model.sortField = sortIndicatorColumn + 1;
|
||||
model.sortOrder = sortIndicatorOrder;
|
||||
model.sortColumn = sortIndicatorColumn;
|
||||
model.update();
|
||||
}
|
||||
|
||||
onSortIndicatorColumnChanged: { updateSort(); }
|
||||
|
|
Loading…
Reference in a new issue