Port from SortFilterProxyModel to KSortFilterProxyModel

This commit is contained in:
Tobias Fella
2020-11-01 23:07:05 +01:00
committed by Carl Schwan
parent 5de778ea82
commit 5993c1f683
5 changed files with 20 additions and 54 deletions

View File

@@ -92,7 +92,7 @@ find_package(Qt5Keychain REQUIRED)
find_package(cmark REQUIRED) find_package(cmark REQUIRED)
add_subdirectory(include/SortFilterProxyModel EXCLUDE_FROM_ALL) find_package(KF5ItemModels REQUIRED)
message( STATUS ) message( STATUS )
message( STATUS "=============================================================================" ) message( STATUS "=============================================================================" )
@@ -206,7 +206,7 @@ endif(APPLE)
# Windows, this is a GUI executable; OSX, make a bundle # Windows, this is a GUI executable; OSX, make a bundle
add_executable(${PROJECT_NAME} WIN32 MACOSX_BUNDLE add_executable(${PROJECT_NAME} WIN32 MACOSX_BUNDLE
${spectral_SRCS} ${spectral_QRC_SRC} $<TARGET_OBJECTS:SortFilterProxyModel> ${spectral_SRCS} ${spectral_QRC_SRC}
${spectral_WINRC} ${${PROJECT_NAME}_MAC_ICON}) ${spectral_WINRC} ${${PROJECT_NAME}_MAC_ICON})
target_link_libraries(${PROJECT_NAME} target_link_libraries(${PROJECT_NAME}

View File

@@ -4,8 +4,7 @@ import QtQuick.Layouts 1.12
import org.kde.kirigami 2.13 as Kirigami 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.Component 2.0
import Spectral 0.1 import Spectral 0.1
@@ -14,7 +13,9 @@ Kirigami.ScrollablePage {
property var roomListModel property var roomListModel
property var enteredRoom property var enteredRoom
property var searchText property var searchText: ""
onSearchTextChanged: sortedFilteredRoomListModel.invalidateFilter()
signal enterRoom(var room) signal enterRoom(var room)
signal leaveRoom(var room) signal leaveRoom(var room)
@@ -32,52 +33,17 @@ Kirigami.ScrollablePage {
ListView { ListView {
id: messageListView id: messageListView
model: SortFilterProxyModel { model: KSortFilterProxyModel {
id: sortedFilteredRoomListModel
sourceModel: roomListModel sourceModel: roomListModel
proxyRoles: ExpressionRole {
name: "categoryName" sortRole: "name"
expression: { sortOrder: Qt.AscendingOrder
switch (category) { filterRowCallback: function(row, parent) {
case 1: return "Invited" return (roomListModel.data(roomListModel.index(row, 0), RoomListModel.JoinStateRole) !== "upgraded") && roomListModel.data(roomListModel.index(row, 0), RoomListModel.NameRole).toLowerCase().includes(page.searchText.toLowerCase())
case 2: return "Favorites"
case 3: return "People"
case 4: return "Rooms"
case 5: return "Low Priority"
}
}
} }
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.property: "categoryName"
section.delegate: Kirigami.ListSectionHeader { section.delegate: Kirigami.ListSectionHeader {
label: section label: section

View File

@@ -6,7 +6,7 @@ import QtQuick.Controls.Material 2.12
import org.kde.kirigami 2.4 as Kirigami 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 2.0
import Spectral.Component.Timeline 2.0 import Spectral.Component.Timeline 2.0
@@ -89,16 +89,14 @@ Kirigami.ScrollablePage {
} }
SortFilterProxyModel { KSortFilterProxyModel {
id: sortedMessageEventModel id: sortedMessageEventModel
sourceModel: messageEventModel sourceModel: messageEventModel
filters: [ filterRowCallback: function(row, parent) {
ExpressionFilter { return messageEventModel.data(messageEventModel.index(row, 0), MessageEventModel.MessageRole) !== 0x10 && messageEventModel.data(messageEventModel.index(row, 0), MessageEventModel.EventTypeRole) !== "other"
expression: marks !== 0x10 && eventType !== "other" }
}
]
} }
ListView { ListView {

View File

@@ -37,6 +37,7 @@ class MessageEventModel : public QAbstractListModel {
// For debugging // For debugging
EventResolvedTypeRole, EventResolvedTypeRole,
}; };
Q_ENUM(EventRoles)
enum BubbleShapes { enum BubbleShapes {
NoShape = 0, NoShape = 0,

View File

@@ -44,6 +44,7 @@ class RoomListModel : public QAbstractListModel {
JoinStateRole, JoinStateRole,
CurrentRoomRole, CurrentRoomRole,
}; };
Q_ENUM(EventRoles)
RoomListModel(QObject* parent = nullptr); RoomListModel(QObject* parent = nullptr);
virtual ~RoomListModel() override; virtual ~RoomListModel() override;