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,
QObject* parent)
: QmlAdapterBase(instance, parent)
, settingsManager_(settingsManager)
, accSrcModel_(new AccountListModel(instance))
, accModel_(new CurrentAccountFilterModel(instance, accSrcModel_.get()))
, accountListModel_(new AccountListModel(instance))
{
QML_REGISTERSINGLETONTYPE_POBJECT(NS_MODELS, accSrcModel_.get(), "AccountListModel");
QML_REGISTERSINGLETONTYPE_POBJECT(NS_MODELS, accModel_.get(), "CurrentAccountFilterModel");
QML_REGISTERSINGLETONTYPE_POBJECT(NS_MODELS, accountListModel_.get(), "AccountListModel");
connect(&lrcInstance_->accountModel(),
&AccountModel::accountStatusChanged,
......
......@@ -102,7 +102,6 @@ private:
AppSettingsManager* settingsManager_;
QScopedPointer<AccountListModel> accSrcModel_;
QScopedPointer<CurrentAccountFilterModel> accModel_;
QScopedPointer<AccountListModel> accountListModel_;
};
Q_DECLARE_METATYPE(AccountAdapter*)
......@@ -21,8 +21,6 @@
#include "abstractlistmodelbase.h"
#include <QSortFilterProxyModel>
#define ACC_ROLES \
X(Alias) \
X(Username) \
......@@ -41,35 +39,6 @@ enum Role {
Q_ENUM_NS(Role)
} // 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
{
Q_OBJECT
......
......@@ -21,6 +21,8 @@ import QtQuick.Controls
import QtQuick.Layouts
import Qt5Compat.GraphicalEffects
import SortFilterProxyModel 0.2
import net.jami.Models 1.1
import net.jami.Adapters 1.1
import net.jami.Constants 1.1
......@@ -36,7 +38,7 @@ Popup {
implicitHeight: {
return visible ? Math.min(
JamiTheme.accountListItemHeight * Math.min(
5, CurrentAccountFilterModel.rowCount() + 1),
5, listView.model.count + 1),
mainViewSidePanelRect.height) : 0
}
padding: 0
......@@ -54,7 +56,14 @@ Popup {
Layout.fillHeight: true
Layout.preferredWidth: parent.width
model: CurrentAccountFilterModel
model: SortFilterProxyModel {
sourceModel: AccountListModel
filters: ValueFilter {
roleName: "ID"
value: LRCInstance.currentAccountId
inverted: true
}
}
delegate: AccountItemDelegate {
height: JamiTheme.accountListItemHeight
width: root.width
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment