From 09a1c7d57f349eaaf3779e0d45f844850164d30a Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sun, 12 Sep 2021 19:34:10 +0200 Subject: Events: inline event delegate Also key handling. Again allow space to pause/resume video while editing an event. --- Event.qml | 123 -------------------------------------------------------------- 1 file changed, 123 deletions(-) delete mode 100644 Event.qml (limited to 'Event.qml') diff --git a/Event.qml b/Event.qml deleted file mode 100644 index da5c194..0000000 --- a/Event.qml +++ /dev/null @@ -1,123 +0,0 @@ -// SPDX-License-Identifier: Unlicense - -import QtQuick 2.12 -import QtQuick.Controls 2.13 -import QtQuick.Layouts 1.6 - -import 'util.js' as Util - -// This is the delegate for event list items. -ItemDelegate { - id: control - - required property var model - required property int index - required property int time - - property alias fields: inputs.model // field definitions - property bool editing: false - - clip: true - padding: 2 - - background: Rectangle { - anchors.fill: parent - color: highlighted ? Util.alphize(border.color, 0.1) : - (index % 2 === 0 ? palette.base : palette.alternateBase) - border { - color: editing ? palette.highlight : palette.dark - width: highlighted ? 1 : 0 - } - radius: border.width - } - - // Store current inputs in model. - function store() { - var values = {} - for (var i = 0; i < fields.length; i++) - values[fields[i].name] = inputs.itemAt(i).item.value - model.values = values - } - - onEditingChanged: { - if (editing) - forceActiveFocus() - } - - // Try passing key to each field input in order. - Keys.forwardTo: Array.from({ length: inputs.count }, (_, i) => inputs.itemAt(i).item) - - contentItem: ColumnLayout { - anchors { left: parent.left; right: parent.right; margins: 5 } - - // Event time, tag and summary. - RowLayout { - Label { - text: new Date(model.time).toISOString().substr(12, 9) - font.pixelSize: 10 - Layout.alignment: Qt.AlignBaseline - } - Label { - text: model.tag - font.weight: Font.DemiBold - Layout.alignment: Qt.AlignBaseline - } - Label { - text: { - var str = '' - for (var i = 0; i < inputs.count; i++) { - const field = inputs.model[i] - const value = model.values[field.name] - if (value && field.type !== 'TextArea') - str += (field.type === 'Bool' ? field.name : value) + ' ' - } - return str - } - elide: Text.ElideRight - textFormat: Text.PlainText - Layout.fillWidth: true - Layout.alignment: Qt.AlignBaseline - } - } - - // Inputs for event‐specific fields. - GridLayout { - flow: GridLayout.TopToBottom - rows: inputs.count - - columnSpacing: 10 - visible: editing - - // Labels. - Repeater { - model: inputs.model - delegate: Label { - text: Util.addShortcut(modelData.name, modelData.key) - Layout.alignment: Qt.AlignRight - } - } - - // Inputs. - Repeater { - id: inputs - delegate: Loader { - source: 'qrc:/Fields/' + modelData.type + '.qml' - - Layout.fillHeight: true - Layout.fillWidth: true - - // Set input value to what is in the model each time the control is expanded. - onVisibleChanged: { - if (item && visible) - item.set(control.model.values[modelData.name]) - } - - Binding { - target: item; property: 'model' - value: modelData - } - } - } - } - } -} -- cgit v1.3