summary refs log tree commit diff
path: root/resources
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2022-10-06 21:59:59 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2022-10-06 22:02:26 +0200
commitf1c1f18f815d93583f524a89e4c2f5f954b07b43 (patch)
treed52c3f944128da91b586d742e31c3c93cc4ce8d1 /resources
parentBasic thread filtering (diff)
downloadnheko-f1c1f18f815d93583f524a89e4c2f5f954b07b43.tar.xz
Add a slow way to search a room
Diffstat (limited to 'resources')
-rw-r--r--resources/qml/MessageView.qml11
-rw-r--r--resources/qml/TimelineView.qml3
-rw-r--r--resources/qml/TopBar.qml89
3 files changed, 79 insertions, 24 deletions
diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml

index bf336dfb..202c3e3d 100644 --- a/resources/qml/MessageView.qml +++ b/resources/qml/MessageView.qml
@@ -22,6 +22,8 @@ Item { property int availableWidth: width + property string searchString: "" + ScrollBar { id: scrollbar parent: chat.parent @@ -43,9 +45,10 @@ Item { id: filteredTimeline source: room filterByThread: room ? room.thread : "" + filterByContent: chatRoot.searchString } - model: filteredTimeline.filterByThread ? filteredTimeline : room + model: (filteredTimeline.filterByThread || filteredTimeline.filterByContent) ? filteredTimeline : room // reuseItems still has a few bugs, see https://bugreports.qt.io/browse/QTBUG-95105 https://bugreports.qt.io/browse/QTBUG-95107 //onModelChanged: if (room) room.sendReset() //reuseItems: true @@ -403,7 +406,7 @@ Item { required property bool isEditable required property bool isEdited required property bool isStateEvent - required property bool previousMessageIsStateEvent + property bool previousMessageIsStateEvent: chat.model.dataByIndex(index+1, Room.IsStateEvent) required property string replyTo required property string threadId required property string userId @@ -417,9 +420,9 @@ Item { required property int status required property int index required property int relatedEventCacheBuster - required property string previousMessageUserId required property string day - required property string previousMessageDay + property string previousMessageUserId: chat.model.dataByIndex(index+1, Room.UserId) + property string previousMessageDay: chat.model.dataByIndex(index+1, Room.Day) required property string userName property bool scrolledToThis: eventId === room.scrollTarget && (y + height > chat.y + chat.contentY && y < chat.y + chat.height + chat.contentY) diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml
index 7722411e..ab1bbc28 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml
@@ -66,6 +66,8 @@ Item { spacing: 0 TopBar { + id: topBar + showBackButton: timelineView.showBackButton } @@ -102,6 +104,7 @@ Item { MessageView { implicitHeight: msgView.height - typingIndicator.height + searchString: topBar.searchString Layout.fillWidth: true } diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml
index 39365cd1..716a5e10 100644 --- a/resources/qml/TopBar.qml +++ b/resources/qml/TopBar.qml
@@ -25,6 +25,14 @@ Pane { property bool isDirect: room ? room.isDirect : false property string directChatOtherUserId: room ? room.directChatOtherUserId : "" + property string searchString: "" + + onRoomIdChanged: { + searchString = ""; + searchButton.searchActive = false; + searchField.text = "" + } + Layout.fillWidth: true implicitHeight: topLayout.height + Nheko.paddingMedium * 2 z: 3 @@ -177,12 +185,42 @@ Pane { text: roomTopic } - AbstractButton { + ImageButton { + id: pinButton + + property bool pinsShown: !Settings.hiddenPins.includes(roomId) + + visible: !!room && room.pinnedMessages.length > 0 Layout.column: 3 Layout.row: 1 Layout.rowSpan: 2 + Layout.alignment: Qt.AlignVCenter Layout.preferredHeight: Nheko.avatarSize - Nheko.paddingMedium Layout.preferredWidth: Nheko.avatarSize - Nheko.paddingMedium + image: pinsShown ? ":/icons/icons/ui/pin.svg" : ":/icons/icons/ui/pin-off.svg" + ToolTip.visible: hovered + ToolTip.text: qsTr("Show or hide pinned messages") + onClicked: { + var ps = Settings.hiddenPins; + if (pinsShown) { + ps.push(roomId); + } else { + const index = ps.indexOf(roomId); + if (index > -1) { + ps.splice(index, 1); + } + } + Settings.hiddenPins = ps; + } + + } + + AbstractButton { + Layout.column: 4 + Layout.row: 1 + Layout.rowSpan: 2 + Layout.preferredHeight: Nheko.avatarSize - Nheko.paddingMedium + Layout.maximumWidth: Nheko.avatarSize - Nheko.paddingMedium contentItem: EncryptionIndicator { sourceSize.height: parent.Layout.preferredHeight * Screen.devicePixelRatio @@ -216,40 +254,37 @@ Pane { } ImageButton { - id: pinButton + id: searchButton - property bool pinsShown: !Settings.hiddenPins.includes(roomId) + property bool searchActive: false - visible: !!room && room.pinnedMessages.length > 0 - Layout.column: 4 + visible: !!room + Layout.column: 5 Layout.row: 1 Layout.rowSpan: 2 Layout.alignment: Qt.AlignVCenter Layout.preferredHeight: Nheko.avatarSize - Nheko.paddingMedium Layout.preferredWidth: Nheko.avatarSize - Nheko.paddingMedium - image: pinsShown ? ":/icons/icons/ui/pin.svg" : ":/icons/icons/ui/pin-off.svg" + image: ":/icons/icons/ui/search.svg" ToolTip.visible: hovered - ToolTip.text: qsTr("Show or hide pinned messages") + ToolTip.text: qsTr("Search this room") onClicked: { - var ps = Settings.hiddenPins; - if (pinsShown) { - ps.push(roomId); - } else { - const index = ps.indexOf(roomId); - if (index > -1) { - ps.splice(index, 1); - } + searchActive = !searchActive + if (searchActive) { + searchField.forceActiveFocus(); + } + else { + searchField.clear(); + topBar.searchString = ""; } - Settings.hiddenPins = ps; } - } ImageButton { id: roomOptionsButton visible: !!room - Layout.column: 5 + Layout.column: 6 Layout.row: 1 Layout.rowSpan: 2 Layout.alignment: Qt.AlignVCenter @@ -293,7 +328,7 @@ Pane { Layout.row: 3 Layout.column: 2 - Layout.columnSpan: 3 + Layout.columnSpan: 4 Layout.fillWidth: true Layout.preferredHeight: Math.min(contentHeight, Nheko.avatarSize * 4) @@ -374,7 +409,7 @@ Pane { Layout.row: 4 Layout.column: 2 - Layout.columnSpan: 1 + Layout.columnSpan: 4 Layout.fillWidth: true Layout.preferredHeight: Math.min(contentHeight, Nheko.avatarSize * 1.5) @@ -404,6 +439,20 @@ Pane { } } } + + MatrixTextField { + id: searchField + visible: searchButton.searchActive + + Layout.row: 5 + Layout.column: 2 + Layout.columnSpan: 4 + + Layout.fillWidth: true + + placeholderText: qsTr("Enter search query") + onAccepted: topBar.searchString = text + } } CursorShape {