summaryrefslogtreecommitdiff
path: root/Sidebar.qml
diff options
context:
space:
mode:
authorTimotej Lazar <timotej.lazar@araneo.si>2021-09-05 21:16:46 +0200
committerTimotej Lazar <timotej.lazar@araneo.si>2021-09-16 20:33:33 +0200
commit8d44150598a4e04a751b7df0d8c91ea29099e10e (patch)
tree7ff80ba2ea06bd8fa7b1bd0b61298cf86c0f3b85 /Sidebar.qml
parentcb76fedcbc8e419e2b945baa56ac3f986a9e79a3 (diff)
Implement filter
Add a proxy model class with filter logic, and use it as the model for events ListView.
Diffstat (limited to 'Sidebar.qml')
-rw-r--r--Sidebar.qml38
1 files changed, 33 insertions, 5 deletions
diff --git a/Sidebar.qml b/Sidebar.qml
index f66e5a6..059079c 100644
--- a/Sidebar.qml
+++ b/Sidebar.qml
@@ -20,6 +20,11 @@ Page {
onRowsRemoved: modified = true
}
+ EventFilter {
+ id: eventFilter
+ sourceModel: eventList
+ }
+
FileDialog {
id: videoDialog
title: qsTr('Open video')
@@ -122,7 +127,24 @@ Page {
// Events list.
ColumnLayout {
spacing: 0
- Label { text: qsTr('Events') }
+
+ RowLayout {
+ Label {
+ text: qsTr('Events')
+ Layout.fillWidth: true
+ }
+ Label { text: qsTr('🔍') }
+ TapHandler { onTapped: filter.visible = !filter.visible }
+ }
+
+ TextField {
+ id: filter
+ Layout.fillWidth: true
+ placeholderText: qsTr('Filter…')
+ visible: false
+ onTextChanged: eventFilter.setFilter(text)
+ }
+
Frame {
padding: 1
Layout.fillWidth: true
@@ -133,7 +155,7 @@ Page {
anchors.fill: parent
focus: true
- model: eventList
+ model: eventFilter
tags: eventList.tags
onEditingChanged: video.pause(editing)
@@ -168,7 +190,7 @@ Page {
break
case Qt.Key_Delete:
editing = false
- eventList.removeRows(currentIndex)
+ eventFilter.remove(currentIndex)
break
case Qt.Key_Tab:
case Qt.Key_Backtab:
@@ -212,9 +234,15 @@ Page {
model: eventList.tagsOrder.map(tag => eventList.tags[tag])
enabled: video.loaded && !events.editing
onClicked: {
- events.currentIndex = eventList.insert(video.time)
+ const index = eventList.insert(tag, video.time)
+ // Reset filter if new event doesn’t match.
+ var row = eventFilter.mapFromSource(eventList.index(index, 0)).row
+ if (eventFilter.mapFromSource(eventList.index(index, 0)).row === -1) {
+ filter.text = ''
+ row = index
+ }
+ events.currentIndex = row
const event = events.currentItem
- event.model.tag = tag
if (event.fields.length > 0)
events.editing = true
}