From 5993c1f68373185b73c032709bb2ff641799880c Mon Sep 17 00:00:00 2001 From: Tobias Fella Date: Sun, 1 Nov 2020 23:07:05 +0100 Subject: [PATCH] Port from SortFilterProxyModel to KSortFilterProxyModel --- CMakeLists.txt | 4 +- imports/Spectral/Panel/RoomListPanel.qml | 56 +++++------------------- imports/Spectral/Panel/RoomPanel.qml | 12 +++-- src/messageeventmodel.h | 1 + src/roomlistmodel.h | 1 + 5 files changed, 20 insertions(+), 54 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 407b43fa8..97253ea06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,7 +92,7 @@ find_package(Qt5Keychain REQUIRED) find_package(cmark REQUIRED) -add_subdirectory(include/SortFilterProxyModel EXCLUDE_FROM_ALL) +find_package(KF5ItemModels REQUIRED) message( STATUS ) message( STATUS "=============================================================================" ) @@ -206,7 +206,7 @@ endif(APPLE) # Windows, this is a GUI executable; OSX, make a bundle add_executable(${PROJECT_NAME} WIN32 MACOSX_BUNDLE - ${spectral_SRCS} ${spectral_QRC_SRC} $ + ${spectral_SRCS} ${spectral_QRC_SRC} ${spectral_WINRC} ${${PROJECT_NAME}_MAC_ICON}) target_link_libraries(${PROJECT_NAME} diff --git a/imports/Spectral/Panel/RoomListPanel.qml b/imports/Spectral/Panel/RoomListPanel.qml index 1ef75e62a..6ea76bcb9 100644 --- a/imports/Spectral/Panel/RoomListPanel.qml +++ b/imports/Spectral/Panel/RoomListPanel.qml @@ -4,8 +4,7 @@ import QtQuick.Layouts 1.12 import org.kde.kirigami 2.13 as Kirigami -import SortFilterProxyModel 0.2 - +import org.kde.kitemmodels 1.0 import Spectral.Component 2.0 import Spectral 0.1 @@ -14,7 +13,9 @@ Kirigami.ScrollablePage { property var roomListModel property var enteredRoom - property var searchText + property var searchText: "" + + onSearchTextChanged: sortedFilteredRoomListModel.invalidateFilter() signal enterRoom(var room) signal leaveRoom(var room) @@ -32,52 +33,17 @@ Kirigami.ScrollablePage { ListView { id: messageListView - model: SortFilterProxyModel { + model: KSortFilterProxyModel { + id: sortedFilteredRoomListModel sourceModel: roomListModel - proxyRoles: ExpressionRole { - name: "categoryName" - expression: { - switch (category) { - case 1: return "Invited" - case 2: return "Favorites" - case 3: return "People" - case 4: return "Rooms" - case 5: return "Low Priority" - } - } + + sortRole: "name" + sortOrder: Qt.AscendingOrder + filterRowCallback: function(row, parent) { + return (roomListModel.data(roomListModel.index(row, 0), RoomListModel.JoinStateRole) !== "upgraded") && roomListModel.data(roomListModel.index(row, 0), RoomListModel.NameRole).toLowerCase().includes(page.searchText.toLowerCase()) } - - sorters: [ - RoleSorter { roleName: "category" }, - ExpressionSorter { - expression: { - return modelLeft.highlightCount > 0; - } - }, - ExpressionSorter { - expression: { - return modelLeft.notificationCount > 0; - } - }, - RoleSorter { - roleName: "name" - sortOrder: Qt.DescendingOrder - } - ] - - filters: [ - ExpressionFilter { - expression: joinState != "upgraded" - }, - RegExpFilter { - roleName: "name" - pattern: page.searchText - caseSensitivity: Qt.CaseInsensitive - } - ] } - section.property: "categoryName" section.delegate: Kirigami.ListSectionHeader { label: section diff --git a/imports/Spectral/Panel/RoomPanel.qml b/imports/Spectral/Panel/RoomPanel.qml index 784829e50..4440e309f 100644 --- a/imports/Spectral/Panel/RoomPanel.qml +++ b/imports/Spectral/Panel/RoomPanel.qml @@ -6,7 +6,7 @@ import QtQuick.Controls.Material 2.12 import org.kde.kirigami 2.4 as Kirigami -import SortFilterProxyModel 0.2 +import org.kde.kitemmodels 1.0 import Spectral.Component 2.0 import Spectral.Component.Timeline 2.0 @@ -89,16 +89,14 @@ Kirigami.ScrollablePage { } - SortFilterProxyModel { + KSortFilterProxyModel { id: sortedMessageEventModel sourceModel: messageEventModel - filters: [ - ExpressionFilter { - expression: marks !== 0x10 && eventType !== "other" - } - ] + filterRowCallback: function(row, parent) { + return messageEventModel.data(messageEventModel.index(row, 0), MessageEventModel.MessageRole) !== 0x10 && messageEventModel.data(messageEventModel.index(row, 0), MessageEventModel.EventTypeRole) !== "other" + } } ListView { diff --git a/src/messageeventmodel.h b/src/messageeventmodel.h index f10b80b93..97fc45be7 100644 --- a/src/messageeventmodel.h +++ b/src/messageeventmodel.h @@ -37,6 +37,7 @@ class MessageEventModel : public QAbstractListModel { // For debugging EventResolvedTypeRole, }; + Q_ENUM(EventRoles) enum BubbleShapes { NoShape = 0, diff --git a/src/roomlistmodel.h b/src/roomlistmodel.h index 509665009..59ef3b70d 100644 --- a/src/roomlistmodel.h +++ b/src/roomlistmodel.h @@ -44,6 +44,7 @@ class RoomListModel : public QAbstractListModel { JoinStateRole, CurrentRoomRole, }; + Q_ENUM(EventRoles) RoomListModel(QObject* parent = nullptr); virtual ~RoomListModel() override;