fix browse asset filtering

added support for list of filters using formatting consistent with other implementations, e.g: (*.png *.wav)
This commit is contained in:
Triplelexx 2018-04-24 23:03:56 +01:00
parent ae0af3ab62
commit 99ad51189c

View file

@ -19,14 +19,14 @@ import "../fileDialog"
Item {
// Set from OffscreenUi::assetDialog()
property alias dir: assetTableModel.folder
property alias filter: selectionType.filtersString // FIXME: Currently only supports simple filters, "*.xxx".
property alias filter: selectionType.filtersString
property int options // Not used.
property bool selectDirectory: false
// Not implemented.
//property bool saveDialog: false;
//property bool multiSelect: false;
// property bool saveDialog: false;
// property bool multiSelect: false;
property bool singleClickNavigate: false
@ -84,7 +84,7 @@ Item {
size: 28
width: height
enabled: destination !== ""
//onClicked: d.navigateHome();
// onClicked: d.navigateHome();
onClicked: assetTableModel.folder = destination;
}
}
@ -227,7 +227,9 @@ Item {
function onGetAllMappings(error, map) {
var mappings,
fileTypeFilter,
fileTypeFilters = [],
filterListStart,
filterListEnd,
index,
path,
fileName,
@ -248,7 +250,14 @@ Item {
if (error === "") {
mappings = Object.keys(map);
fileTypeFilter = filter.replace("*", "").toLowerCase();
filter = filter.replace(/\s/g, '');
filterListStart = filter.indexOf("(");
filterListEnd = filter.indexOf(")");
if (filterListStart !== -1 && filterListEnd !== -1) {
fileTypeFilters = filter.substring(filterListStart + 2, filterListEnd).toLowerCase().split("*");
} else if (filter !== "") {
fileTypeFilters[0] = filter.replace("*", "").toLowerCase();
}
for (i = 0, length = mappings.length; i < length; i++) {
index = mappings[i].lastIndexOf("/");
@ -259,7 +268,24 @@ Item {
fileIsDir = false;
isValid = false;
if (fileType.toLowerCase() === fileTypeFilter) {
if (fileTypeFilters.length > 1) {
if (fileTypeFilters.indexOf(fileType.toLowerCase()) !== -1) {
if (path === folder) {
isValid = !selectDirectory;
} else if (path.length > folder.length) {
subDirectory = path.slice(folder.length);
index = subDirectory.indexOf("/");
if (index === subDirectory.lastIndexOf("/")) {
fileName = subDirectory.slice(0, index);
if (subDirectories.indexOf(fileName) === -1) {
fileIsDir = true;
isValid = true;
subDirectories.push(fileName);
}
}
}
}
} else if (fileType.toLowerCase() === fileTypeFilters[0] || fileTypeFilters.length === 0) {
if (path === folder) {
isValid = !selectDirectory;
} else if (path.length > folder.length) {