Skip to content
Snippets Groups Projects
Commit f644ab8a authored by Andreas Traczyk's avatar Andreas Traczyk
Browse files

accountlistmodel: replace C++ filter proxy model with QML-SFPM

Change-Id: I5eb2ffc538c1dedd71305f6c538d9b09daa4d22b
parent 0da3d936
No related branches found
No related tags found
No related merge requests found
...@@ -31,11 +31,9 @@ AccountAdapter::AccountAdapter(AppSettingsManager* settingsManager, ...@@ -31,11 +31,9 @@ AccountAdapter::AccountAdapter(AppSettingsManager* settingsManager,
QObject* parent) QObject* parent)
: QmlAdapterBase(instance, parent) : QmlAdapterBase(instance, parent)
, settingsManager_(settingsManager) , settingsManager_(settingsManager)
, accSrcModel_(new AccountListModel(instance)) , accountListModel_(new AccountListModel(instance))
, accModel_(new CurrentAccountFilterModel(instance, accSrcModel_.get()))
{ {
QML_REGISTERSINGLETONTYPE_POBJECT(NS_MODELS, accSrcModel_.get(), "AccountListModel"); QML_REGISTERSINGLETONTYPE_POBJECT(NS_MODELS, accountListModel_.get(), "AccountListModel");
QML_REGISTERSINGLETONTYPE_POBJECT(NS_MODELS, accModel_.get(), "CurrentAccountFilterModel");
connect(&lrcInstance_->accountModel(), connect(&lrcInstance_->accountModel(),
&AccountModel::accountStatusChanged, &AccountModel::accountStatusChanged,
......
...@@ -102,7 +102,6 @@ private: ...@@ -102,7 +102,6 @@ private:
AppSettingsManager* settingsManager_; AppSettingsManager* settingsManager_;
QScopedPointer<AccountListModel> accSrcModel_; QScopedPointer<AccountListModel> accountListModel_;
QScopedPointer<CurrentAccountFilterModel> accModel_;
}; };
Q_DECLARE_METATYPE(AccountAdapter*) Q_DECLARE_METATYPE(AccountAdapter*)
...@@ -21,8 +21,6 @@ ...@@ -21,8 +21,6 @@
#include "abstractlistmodelbase.h" #include "abstractlistmodelbase.h"
#include <QSortFilterProxyModel>
#define ACC_ROLES \ #define ACC_ROLES \
X(Alias) \ X(Alias) \
X(Username) \ X(Username) \
...@@ -41,35 +39,6 @@ enum Role { ...@@ -41,35 +39,6 @@ enum Role {
Q_ENUM_NS(Role) Q_ENUM_NS(Role)
} // namespace AccountList } // namespace AccountList
/*
* The CurrentAccountFilterModel class
* is for the sole purpose of filtering out current account.
*/
class CurrentAccountFilterModel final : public QSortFilterProxyModel
{
Q_OBJECT
public:
explicit CurrentAccountFilterModel(LRCInstance* lrcInstance,
QAbstractListModel* parent = nullptr)
: QSortFilterProxyModel(parent)
, lrcInstance_(lrcInstance)
{
setSourceModel(parent);
}
virtual bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const override
{
// Accept all contacts in conversation list filtered with account type, except those in a call.
auto index = sourceModel()->index(sourceRow, 0, sourceParent);
auto accountId = sourceModel()->data(index, AccountList::ID);
return accountId != lrcInstance_->get_currentAccountId();
}
protected:
LRCInstance* lrcInstance_ {nullptr};
};
class AccountListModel final : public AbstractListModelBase class AccountListModel final : public AbstractListModelBase
{ {
Q_OBJECT Q_OBJECT
......
...@@ -21,6 +21,8 @@ import QtQuick.Controls ...@@ -21,6 +21,8 @@ import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import Qt5Compat.GraphicalEffects import Qt5Compat.GraphicalEffects
import SortFilterProxyModel 0.2
import net.jami.Models 1.1 import net.jami.Models 1.1
import net.jami.Adapters 1.1 import net.jami.Adapters 1.1
import net.jami.Constants 1.1 import net.jami.Constants 1.1
...@@ -36,7 +38,7 @@ Popup { ...@@ -36,7 +38,7 @@ Popup {
implicitHeight: { implicitHeight: {
return visible ? Math.min( return visible ? Math.min(
JamiTheme.accountListItemHeight * Math.min( JamiTheme.accountListItemHeight * Math.min(
5, CurrentAccountFilterModel.rowCount() + 1), 5, listView.model.count + 1),
mainViewSidePanelRect.height) : 0 mainViewSidePanelRect.height) : 0
} }
padding: 0 padding: 0
...@@ -54,7 +56,14 @@ Popup { ...@@ -54,7 +56,14 @@ Popup {
Layout.fillHeight: true Layout.fillHeight: true
Layout.preferredWidth: parent.width Layout.preferredWidth: parent.width
model: CurrentAccountFilterModel model: SortFilterProxyModel {
sourceModel: AccountListModel
filters: ValueFilter {
roleName: "ID"
value: LRCInstance.currentAccountId
inverted: true
}
}
delegate: AccountItemDelegate { delegate: AccountItemDelegate {
height: JamiTheme.accountListItemHeight height: JamiTheme.accountListItemHeight
width: root.width width: root.width
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment