aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2023-11-17 13:53:32 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2023-11-17 17:20:37 +0100
commit55dfd50975935efbe67ea8cdb77ac01e4640db88 (patch)
tree9c6f179381edcadb2b1d51b6d0f439f71a44ee78
parent0e457477d54b068abc89cf124daedefe0436dd89 (diff)
Add ChildListModel
The JsonListModel now checks for child models and sets the jsonObject. ChildListModels expose a single model by name. TestJsonListModel { property alias allModels: models id: models source: Qt.resolvedUrl("models.json") property ChildListModel bicycle: ChildListModel { modelName: "bicycle" } } Change-Id: I19fc904ef3e8ef914d27b050a028b66b85a6e1eb Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r--src/imports/utils/CMakeLists.txt2
-rw-r--r--src/imports/utils/ChildListModel.qml61
-rw-r--r--src/imports/utils/JsonListModel.qml40
3 files changed, 92 insertions, 11 deletions
diff --git a/src/imports/utils/CMakeLists.txt b/src/imports/utils/CMakeLists.txt
index 912fe1b..3772a3b 100644
--- a/src/imports/utils/CMakeLists.txt
+++ b/src/imports/utils/CMakeLists.txt
@@ -13,7 +13,7 @@ qt_internal_add_qml_module(QuickStudioUtils
quickstudiocsvtablemodel.cpp quickstudiocsvtablemodel_p.h
quickstudiofilereader.cpp quickstudiofilereader_p.h
QML_FILES
- JsonListModel.qml JsonBackend.qml
+ JsonListModel.qml JsonBackend.qml ChildListModel.qml
PUBLIC_LIBRARIES
Qt::Qml
Qt::Quick
diff --git a/src/imports/utils/ChildListModel.qml b/src/imports/utils/ChildListModel.qml
new file mode 100644
index 0000000..2375933
--- /dev/null
+++ b/src/imports/utils/ChildListModel.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2023 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Quick Dialogs module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Studio.Utils
+
+ListModel {
+ id: listModel
+
+ property string modelName
+ property var jsonObject: null
+
+ dynamicRoles: true
+
+// qmllint disable compiler
+
+ onJsonObjectChanged: {
+ listModel.clear()
+ var objectArray = listModel.jsonObject
+ if (modelName.modelName !== "")
+ objectArray = objectArray[listModel.modelName]
+ for (var key in objectArray) {
+ var jo = objectArray[key]
+ listModel.append(jo)
+ }
+ }
+// qmllint enable compiler
+}
diff --git a/src/imports/utils/JsonListModel.qml b/src/imports/utils/JsonListModel.qml
index 3360525..f2bdd53 100644
--- a/src/imports/utils/JsonListModel.qml
+++ b/src/imports/utils/JsonListModel.qml
@@ -36,38 +36,58 @@
import QtQuick
import QtQuick.Studio.Utils
+//import "jsonpath.js" as JSONPath
ListModel {
id: listModel
+
property url source
+ property var jsonObject
+ dynamicRoles: true
property FileReader fileReader: FileReader {
id: fileReader
filePath: listModel.source
onContentChanged: listModel.updateJSON()
- property string query
}
+
// qmllint disable compiler
- function updateJSON() {
+ onJsonObjectChanged: {
listModel.clear()
- if (fileReader.content === "")
- return
+ var objectArray = listModel.jsonObject
- var objectArray = parseJSONString(fileReader.content, fileReader.query)
for (var key in objectArray) {
var jo = objectArray[key]
listModel.append(jo)
}
}
- function parseJSONString(jsonString, jsonPathQuery) {
+ function updateJSON() {
+ if (fileReader.content === "")
+ return
+
+ var objectArray = parseJSONString(fileReader.content)
+ listModel.jsonObject = objectArray
+ invalidateChildModels()
+ }
+
+ function parseJSONString(jsonString, object) {
var objectArray = JSON.parse(jsonString)
- if (jsonPathQuery !== "")
- objectArray = JSONPath.jsonPath(objectArray, jsonPathQuery)
- else
- console.error("JSON parsing failed")
return objectArray
}
+
+ function invalidateChildModels() {
+ for(var property in listModel) {
+ if (listModel[property].jsonObject !== undefined) {
+ listModel[property].jsonObject = listModel.jsonObject
+ }
+ }
+
+ }
+
+ Component.onCompleted: {
+ invalidateChildModels()
+ }
// qmllint enable compiler
}