Port from SortFilterProxyModel to KSortFilterProxyModel
This commit is contained in:
committed by
Carl Schwan
parent
5de778ea82
commit
5993c1f683
@@ -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}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user