From 6eee9e8b89e07b1f182904ce443bdede01515cdf Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Wed, 11 Nov 2020 13:57:41 +0100 Subject: [PATCH] Sort groups alphabetically --- libnymea-app/libnymea-app-core.h | 1 + libnymea-app/models/taglistmodel.cpp | 28 +++++++++++++++++++++++++++ libnymea-app/models/taglistmodel.h | 24 +++++++++++++++++++++++ nymea-app/ui/mainviews/GroupsView.qml | 10 ++++++---- 4 files changed, 59 insertions(+), 4 deletions(-) diff --git a/libnymea-app/libnymea-app-core.h b/libnymea-app/libnymea-app-core.h index 4345c008..6aa79027 100644 --- a/libnymea-app/libnymea-app-core.h +++ b/libnymea-app/libnymea-app-core.h @@ -258,6 +258,7 @@ void registerQmlTypes() { qmlRegisterUncreatableType(uri, 1, 0, "Tag", "Get it from Tags"); qmlRegisterType(uri, 1, 0, "TagsProxyModel"); qmlRegisterType(uri, 1, 0, "TagListModel"); + qmlRegisterType(uri, 1, 0, "TagListProxyModel"); qmlRegisterType(uri, 1, 0, "NetworkManagerController"); qmlRegisterType(uri, 1, 0, "BluetoothDiscovery"); diff --git a/libnymea-app/models/taglistmodel.cpp b/libnymea-app/models/taglistmodel.cpp index 031306b9..55781995 100644 --- a/libnymea-app/models/taglistmodel.cpp +++ b/libnymea-app/models/taglistmodel.cpp @@ -127,3 +127,31 @@ void TagListModel::update() endResetModel(); emit countChanged(); } + +TagListProxyModel::TagListProxyModel(QObject *parent): + QSortFilterProxyModel(parent) +{ + +} + +TagListModel *TagListProxyModel::tagListModel() const +{ + return m_tagListModel; +} + +void TagListProxyModel::setTagListModel(TagListModel *tagListModel) +{ + if (m_tagListModel != tagListModel) { + m_tagListModel = tagListModel; + setSourceModel(tagListModel); + emit tagListModelChanged(); + + connect(tagListModel, &TagListModel::countChanged, this, &TagListProxyModel::countChanged); + + setSortCaseSensitivity(Qt::CaseInsensitive); + setSortRole(TagListModel::RoleTagId); + sort(0); + + emit countChanged(); + } +} diff --git a/libnymea-app/models/taglistmodel.h b/libnymea-app/models/taglistmodel.h index 0069666a..ab5b9829 100644 --- a/libnymea-app/models/taglistmodel.h +++ b/libnymea-app/models/taglistmodel.h @@ -32,6 +32,7 @@ #define TAGLISTMODEL_H #include +#include class TagsProxyModel; class Tag; @@ -71,4 +72,27 @@ private: QList m_list; }; +class TagListProxyModel: public QSortFilterProxyModel +{ + Q_OBJECT + + Q_PROPERTY(TagListModel *tagListModel READ tagListModel WRITE setTagListModel NOTIFY tagListModelChanged) + + Q_PROPERTY(int count READ rowCount NOTIFY countChanged) + +public: + TagListProxyModel(QObject *parent = nullptr); + + TagListModel *tagListModel() const; + void setTagListModel(TagListModel *tagListModel); + +signals: + void tagListModelChanged(); + + void countChanged(); + +private: + TagListModel *m_tagListModel = nullptr; +}; + #endif // TAGLISTMODEL_H diff --git a/nymea-app/ui/mainviews/GroupsView.qml b/nymea-app/ui/mainviews/GroupsView.qml index ecb203e0..4d4ad117 100644 --- a/nymea-app/ui/mainviews/GroupsView.qml +++ b/nymea-app/ui/mainviews/GroupsView.qml @@ -47,10 +47,12 @@ MainViewBase { readonly property int minTileWidth: 172 readonly property int tilesPerRow: root.width / minTileWidth - model: TagListModel { - tagsProxy: TagsProxyModel { - tags: engine.tagsManager.tags - filterTagId: "group-.*" + model: TagListProxyModel { + tagListModel: TagListModel { + tagsProxy: TagsProxyModel { + tags: engine.tagsManager.tags + filterTagId: "group-.*" + } } } cellWidth: width / tilesPerRow