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)
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} $<TARGET_OBJECTS:SortFilterProxyModel>
${spectral_SRCS} ${spectral_QRC_SRC}
${spectral_WINRC} ${${PROJECT_NAME}_MAC_ICON})
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 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

View File

@@ -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 {

View File

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

View File

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