Implement filter
Add a proxy model class with filter logic, and use it as the model for events ListView.
This commit is contained in:
parent
cb76fedcbc
commit
8d44150598
6 changed files with 144 additions and 12 deletions
38
Sidebar.qml
38
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
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue