mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-25 15:58:16 +00:00
feat(MainWindow/Contacts): the contacts list can be filtered with the presence level
This commit is contained in:
parent
c6d0d18884
commit
2518304638
7 changed files with 38 additions and 6 deletions
|
|
@ -9,11 +9,11 @@ ContactsListModel::ContactsListModel (QObject *parent): QAbstractListModel(paren
|
|||
m_list << new ContactModel("Cecelia Cyler", "", Presence::Online, QStringList("toto.linphone.sip.linphone.org"));
|
||||
m_list << new ContactModel("Daniel Elliott", "", Presence::Online, QStringList("toto.linphone.sip.linphone.org"));
|
||||
m_list << new ContactModel("Effie Forton", "", Presence::Online, QStringList("toto.linphone.sip.linphone.org"));
|
||||
m_list << new ContactModel("Agnes Hurner", "", Presence::Online, QStringList("toto.linphone.sip.linphone.org"));
|
||||
m_list << new ContactModel("Agnes Hurner", "", Presence::Offline, QStringList("toto.linphone.sip.linphone.org"));
|
||||
m_list << new ContactModel("Luke Lemin", "", Presence::Online, QStringList("toto.linphone.sip.linphone.org"));
|
||||
m_list << new ContactModel("Claire Manning", "", Presence::Online, QStringList("toto.linphone.sip.linphone.org"));
|
||||
m_list << new ContactModel("Isabella Ahornton", "", Presence::Online, QStringList("toto.linphone.sip.linphone.org"));
|
||||
m_list << new ContactModel("Mary Boreno", "", Presence::Online, QStringList("toto.linphone.sip.linphone.org"));
|
||||
m_list << new ContactModel("Mary Boreno", "", Presence::Offline, QStringList("toto.linphone.sip.linphone.org"));
|
||||
m_list << new ContactModel("Aman Than", "", Presence::Online, QStringList("toto.linphone.sip.linphone.org"));
|
||||
m_list << new ContactModel(" abdoul", "", Presence::Online, QStringList("toto.linphone.sip.linphone.org"));
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,11 @@ bool ContactsListProxyModel::filterAcceptsRow (int source_row, const QModelIndex
|
|||
int weight = m_weights[contact] = static_cast<int>(
|
||||
computeContactWeight(*contact)
|
||||
);
|
||||
return weight > 0;
|
||||
|
||||
return weight > 0 && (
|
||||
!m_use_connected_filter ||
|
||||
contact->getPresenceLevel() != Presence::PresenceLevel::White
|
||||
);
|
||||
}
|
||||
|
||||
bool ContactsListProxyModel::lessThan (const QModelIndex &left, const QModelIndex &right) const {
|
||||
|
|
@ -124,3 +128,15 @@ float ContactsListProxyModel::computeContactWeight (const ContactModel &contact)
|
|||
|
||||
return weight;
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
bool ContactsListProxyModel::isConnectedFilterUsed () const {
|
||||
return m_use_connected_filter;
|
||||
}
|
||||
|
||||
void ContactsListProxyModel::setConnectedFilter (bool useConnectedFilter) {
|
||||
m_use_connected_filter = useConnectedFilter;
|
||||
qDebug() << useConnectedFilter;
|
||||
invalidate();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,13 @@
|
|||
class ContactsListProxyModel : public QSortFilterProxyModel {
|
||||
Q_OBJECT;
|
||||
|
||||
Q_PROPERTY(
|
||||
bool useConnectedFilter
|
||||
READ isConnectedFilterUsed
|
||||
WRITE setConnectedFilter
|
||||
CONSTANT
|
||||
);
|
||||
|
||||
public:
|
||||
ContactsListProxyModel (QObject *parent = Q_NULLPTR);
|
||||
static void initContactsListModel (ContactsListModel *list);
|
||||
|
|
@ -22,6 +29,9 @@ private:
|
|||
float computeStringWeight (const QString &string, float percentage) const;
|
||||
float computeContactWeight (const ContactModel &contact) const;
|
||||
|
||||
bool isConnectedFilterUsed () const;
|
||||
void setConnectedFilter (bool useConnectedFilter);
|
||||
|
||||
static const QRegExp m_search_separators;
|
||||
|
||||
// The contacts list is shared between `ContactsListProxyModel`
|
||||
|
|
@ -31,6 +41,8 @@ private:
|
|||
// It's just a cache to save values computed by `filterAcceptsRow`
|
||||
// and reused by `lessThan`.
|
||||
mutable QHash<const ContactModel *, int> m_weights;
|
||||
|
||||
bool m_use_connected_filter;
|
||||
};
|
||||
|
||||
#endif // CONTACTS_LIST_PROXY_MODEL_H
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ import Linphone.Styles 1.0
|
|||
// ===================================================================
|
||||
|
||||
Row {
|
||||
id: item
|
||||
|
||||
property var texts
|
||||
|
||||
property int _selectedButton: 0
|
||||
|
|
@ -32,7 +34,7 @@ Row {
|
|||
onClicked: {
|
||||
if (_selectedButton !== index) {
|
||||
_selectedButton = index
|
||||
clicked(index)
|
||||
item.clicked(index)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,8 @@ ColumnLayout {
|
|||
qsTr('selectAllContacts'),
|
||||
qsTr('selectConnectedContacts')
|
||||
]
|
||||
|
||||
onClicked: contacts.useConnectedFilter = (button === 1)
|
||||
}
|
||||
|
||||
TextButtonB {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ ColumnLayout {
|
|||
Avatar {
|
||||
Layout.fillHeight: true
|
||||
Layout.preferredWidth: 80
|
||||
presence: 'connected' // TODO: Use C++.
|
||||
presenceLevel: Presence.Green // TODO: Use C++.
|
||||
username: 'Cameron Andrews' // TODO: Use C++.
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ ApplicationWindow {
|
|||
Layout.fillHeight: parent.height
|
||||
id: collapse
|
||||
|
||||
onCollapsed: windowStates.state = isCollapsed()
|
||||
onCollapsed: windowStates.state = collapsed
|
||||
? 'collapsed'
|
||||
: ''
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue