From 3e17c1007a106df9751284491da1df1bb19ca1b0 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 23 Sep 2019 18:14:45 -0700 Subject: [PATCH] understanding the delegateModelGroup mechanism... --- .../cache/cash/ResourceCacheInspector.qml | 156 ++++++++++++------ 1 file changed, 103 insertions(+), 53 deletions(-) diff --git a/scripts/developer/utilities/cache/cash/ResourceCacheInspector.qml b/scripts/developer/utilities/cache/cash/ResourceCacheInspector.qml index a597ca3ec1..71dc2f7d24 100644 --- a/scripts/developer/utilities/cache/cash/ResourceCacheInspector.qml +++ b/scripts/developer/utilities/cache/cash/ResourceCacheInspector.qml @@ -71,9 +71,8 @@ Item { } } - property var itemFields: ['name', 'root', 'base', 'path', 'index'] - property var itemFieldsVisibility: {'name': true, 'root': false, 'base':false, 'path':false, 'index':false} - + property var itemFields: ['index', 'name', 'scheme', 'host', 'pathDir', 'url'] + Column { id: header @@ -120,7 +119,7 @@ Item { } } - RowLayout { + Item { anchors.left: parent.left anchors.right: parent.right height: orderSelector.height @@ -128,29 +127,25 @@ Item { Prop.PropComboBox { anchors.left: parent.left id: orderSelector - model: [ "name", "base", "root" ] + model: itemFields property var selectedIndex: currentIndex + + property var isSchemeVisible: (currentIndex == 2) + property var isHostVisible: (currentIndex == 3) + property var isPathDirVisible: (currentIndex == 4) + property var isURLVisible: (currentIndex == 5) } - Prop.PropCheckBox { - id: showName - text: 'name' - checked: itemFieldsVisibility['name'] - } - Prop.PropCheckBox { - id: showRoot - text: 'root' - checked: itemFieldsVisibility['root'] - } - Prop.PropCheckBox { - id: showBase - text: 'base' - checked: itemFieldsVisibility['base'] - } + /* Prop.PropCheckBox { + anchors.left: orderSelector.right + id: listQRC + checked: true + text: "list qrc" + }*/ + } } - Component { id: resouceItemDelegate MouseArea { @@ -175,50 +170,70 @@ Item { width: 30 } Prop.PropSplitter { - visible: showRoot.checked + visible: orderSelector.isSchemeVisible size:8 } Prop.PropLabel { - visible: showRoot.checked - text: model.root + visible: orderSelector.isSchemeVisible + text: model.scheme width: 30 } Prop.PropSplitter { - visible: showBase.checked + visible: orderSelector.isHostVisible size:8 } Prop.PropLabel { - visible: showBase.checked - text: model.base - width: 60 + visible: orderSelector.isHostVisible + text: model.host + width: 150 } Prop.PropSplitter { - visible: showName.checked + visible: orderSelector.isPathDirVisible size:8 } Prop.PropLabel { - visible: showName.checked + visible: orderSelector.isPathDirVisible + text: model.pathDir + } + Prop.PropSplitter { + size:8 + } + Prop.PropLabel { + visible: !orderSelector.isURLVisible text: model.name } + Prop.PropLabel { + visible: orderSelector.isURLVisible + text: model.url + } } } } } + + // ['index', 'name', 'scheme', 'host', 'pathDir', 'url'] DelegateModel { id: visualModel model: ListModel {} + property var filterQRC: function(item) { return item.scheme == "qrc" } property var lessThan: [ + function(left, right) { return left.index < right.index }, function(left, right) { return left.name < right.name }, - function(left, right) { return left.base < right.base }, - function(left, right) { return left.root < right.root } + function(left, right) { return left.scheme < right.scheme }, + function(left, right) { return left.host < right.host }, + function(left, right) { return left.pathDir < right.pathDir }, + function(left, right) { return left.url < right.url } ] property int sortOrder: orderSelector.selectedIndex onSortOrderChanged: items.setGroups(0, items.count, "unsorted") + property bool listQRCChecked: listQRC.checked + onListQRCCheckedChanged: items.setGroups(0, items.count, "unsorted") + function insertPosition(lessThan, item) { var lower = 0 var upper = items.count @@ -237,26 +252,35 @@ Item { function sort(lessThan) { while (unsortedItems.count > 0) { var item = unsortedItems.get(0) + // var doHide = (!listQRCChecked && filterQRC(item.model)) + var index = insertPosition(lessThan, item) item.groups = "items" - items.move(item.itemsIndex, index) + // if (doHide) { + // item.inItems = false; + // } else { + // item.inItems = true; + items.move(item.itemsIndex, index) + // } } } items.includeByDefault: false - groups: DelegateModelGroup { - id: unsortedItems - name: "unsorted" + groups: + DelegateModelGroup { + id: unsortedItems + name: "unsorted" - includeByDefault: true - onChanged: { - if (visualModel.sortOrder == visualModel.lessThan.length) - setGroups(0, count, "items") - else - visualModel.sort(visualModel.lessThan[visualModel.sortOrder]) + includeByDefault: true + onChanged: { + if (visualModel.sortOrder == visualModel.lessThan.length) + setGroups(0, count, "items") + else + visualModel.sort(visualModel.lessThan[visualModel.sortOrder]) + } } - } + delegate: resouceItemDelegate @@ -264,16 +288,42 @@ Item { property alias resourceItemsModel: visualModel.model property var currentItemsList: new Array(); - function packItemEntry(item) { - var entry = { "name": "", "root": "", "path": "", "base": "", "url": item} + function packItemEntry(item, index) { + var entry = { "index": index, "name": "", "scheme": "", "host": "", "pathDir": "", "url": item} if (item.length > 0) { - var rootPos = item.search("://") - entry.root = item.substring(0, rootPos) - if (rootPos >= 0) rootPos += 3 - entry.path = item.substring(rootPos, item.length) - var splitted = entry.path.split('/') - entry.name = splitted[splitted.length - 1] - entry.base = splitted[0] + // Detect scheme: + var schemePos = item.search(":") + entry.scheme = item.substring(0, schemePos) + if (schemePos < 0) schemePos = 0 + else schemePos += 1 + + // path pos is probably after schemePos + var pathPos = schemePos + + // try to detect //userinfo@host:port + var token = item.substr(schemePos, 2); + if (token.search("//") == 0) { + pathPos += 2 + } + item = item.substring(pathPos, item.length) + // item is now everything after scheme:[//] + var splitted = item.split('/') + + // odd ball, the rest of the url has no other'/' ? + // in theory this means it s just the host info ? + // we are assuming that path ALWAYS starts with a slash + entry.host = splitted[0] + + if (splitted.length > 1) { + entry.name = splitted[splitted.length - 1] + + // if splitted is longer than 2 then there should be a path dir + if (splitted.length > 2) { + for (var i = 1; i < splitted.length - 1; i++) { + entry.pathDir += '/' + splitted[i] + } + } + } } return entry } @@ -285,7 +335,7 @@ Item { for (var i in itemList) { var item = itemList[i] currentItemsList.push(item) - resourceItemsModel.append(packItemEntry(item)) + resourceItemsModel.append(packItemEntry(item, currentItemsList.length -1)) } }