moment/src/gui/ModelStore.qml

56 lines
1.5 KiB
QML
Raw Normal View History

// Copyright Mirage authors & contributors <https://github.com/mirukana/mirage>
// SPDX-License-Identifier: LGPL-3.0-or-later
pragma Singleton
import QtQuick 2.12
import "PythonBridge"
QtObject {
property QtObject privates: QtObject {
readonly property var store: ({})
readonly property PythonBridge py: PythonBridge {}
readonly property Component model: Component {
ListModel {
property var modelId
property var idToItems: ({})
// Used by HFilterModel
signal fieldsChanged(int index, var changes)
function findIndex(id, default_=null) {
2020-03-10 20:38:28 +11:00
for (let i = 0; i < count; i++)
if (get(i).id === id) return i
return default_
2020-03-10 20:38:28 +11:00
}
function find(id, default_=null) {
return idToItems[id] || default_
}
}
}
signal ensureModelExists(var modelId)
onEnsureModelExists:
py.callCoro("models.ensure_exists_from_qml", [modelId])
}
function get(...modelId) {
if (modelId.length === 1) modelId = modelId[0]
if (! privates.store[modelId]) {
2020-05-21 15:26:12 +10:00
// Using a signal somehow avoids a binding loop
privates.ensureModelExists(modelId)
privates.store[modelId] =
privates.model.createObject(this, {modelId})
}
return privates.store[modelId]
}
}