Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
PIM
Akonadi Contacts
Commits
6e9dcf4e
Verified
Commit
6e9dcf4e
authored
Aug 14, 2021
by
Carl Schwan
🚴
Browse files
Implement sorting and filtering in contact group editor
BUG: 430789
parent
81764cbc
Pipeline
#74825
canceled with stage
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
src/akonadi-contacts/contactgroupeditor.cpp
View file @
6e9dcf4e
...
...
@@ -149,6 +149,7 @@ void ContactGroupEditor::Private::itemChanged(const Item &item, const QSet<QByte
void
ContactGroupEditor
::
Private
::
loadContactGroup
(
const
KContacts
::
ContactGroup
&
group
)
{
mGui
.
membersView
->
setSortingEnabled
(
false
);
mGui
.
groupName
->
setText
(
group
.
name
());
mGroupModel
->
loadContactGroup
(
group
);
...
...
@@ -161,6 +162,7 @@ void ContactGroupEditor::Private::loadContactGroup(const KContacts::ContactGroup
}
mGui
.
membersView
->
header
()
->
resizeSections
(
QHeaderView
::
Stretch
);
mGui
.
membersView
->
setSortingEnabled
(
true
);
}
bool
ContactGroupEditor
::
Private
::
storeContactGroup
(
KContacts
::
ContactGroup
&
group
)
...
...
@@ -208,7 +210,12 @@ ContactGroupEditor::ContactGroupEditor(Mode mode, QWidget *parent)
d
->
mGui
.
membersView
->
setEditTriggers
(
QAbstractItemView
::
AllEditTriggers
);
d
->
mGroupModel
=
new
ContactGroupModel
(
this
);
d
->
mGui
.
membersView
->
setModel
(
d
->
mGroupModel
);
auto
proxyModel
=
new
GroupFilterModel
(
this
);
proxyModel
->
setSourceModel
(
d
->
mGroupModel
);
connect
(
d
->
mGui
.
searchField
,
&
QLineEdit
::
textChanged
,
this
,
[
proxyModel
](
const
QString
&
text
)
{
proxyModel
->
setFilterRegularExpression
(
text
);
});
d
->
mGui
.
membersView
->
setModel
(
proxyModel
);
d
->
mGui
.
membersView
->
setItemDelegate
(
new
ContactGroupEditorDelegate
(
d
->
mGui
.
membersView
,
this
));
if
(
mode
==
CreateMode
)
{
...
...
src/akonadi-contacts/contactgroupeditor.ui
View file @
6e9dcf4e
...
...
@@ -48,6 +48,16 @@
</widget>
</item>
<item
row=
"3"
column=
"0"
colspan=
"2"
>
<widget
class=
"QLineEdit"
name=
"searchField"
>
<property
name=
"placeholderText"
>
<string>
Search...
</string>
</property>
<property
name=
"clearButtonEnabled"
>
<bool>
true
</bool>
</property>
</widget>
</item>
<item
row=
"4"
column=
"0"
colspan=
"2"
>
<widget
class=
"QTreeView"
name=
"membersView"
>
<property
name=
"rootIsDecorated"
>
<bool>
false
</bool>
...
...
src/akonadi-contacts/contactgroupmodel.cpp
View file @
6e9dcf4e
...
...
@@ -448,4 +448,33 @@ bool ContactGroupModel::removeRows(int row, int count, const QModelIndex &parent
return
true
;
}
GroupFilterModel
::
GroupFilterModel
(
QObject
*
parent
)
:
QSortFilterProxyModel
(
parent
)
{
setFilterCaseSensitivity
(
Qt
::
CaseInsensitive
);
setFilterKeyColumn
(
-
1
);
}
bool
GroupFilterModel
::
filterAcceptsRow
(
int
sourceRow
,
const
QModelIndex
&
sourceParent
)
const
{
if
(
sourceRow
==
sourceModel
()
->
rowCount
()
-
1
)
{
return
true
;
}
return
QSortFilterProxyModel
::
filterAcceptsRow
(
sourceRow
,
sourceParent
);
}
bool
GroupFilterModel
::
lessThan
(
const
QModelIndex
&
left
,
const
QModelIndex
&
right
)
const
{
if
(
left
.
row
()
==
sourceModel
()
->
rowCount
()
-
1
)
{
return
true
;
}
if
(
right
.
row
()
==
sourceModel
()
->
rowCount
()
-
1
)
{
return
false
;
}
return
QSortFilterProxyModel
::
lessThan
(
left
,
right
);
}
#include "moc_contactgroupmodel_p.cpp"
src/akonadi-contacts/contactgroupmodel_p.h
View file @
6e9dcf4e
...
...
@@ -9,6 +9,7 @@
#pragma once
#include <QAbstractItemModel>
#include <QSortFilterProxyModel>
#include <kcontacts/contactgroup.h>
...
...
@@ -44,5 +45,14 @@ private:
class
Private
;
Private
*
const
d
;
};
}
class
GroupFilterModel
:
public
QSortFilterProxyModel
{
public:
explicit
GroupFilterModel
(
QObject
*
parent
=
nullptr
);
bool
filterAcceptsRow
(
int
sourceRow
,
const
QModelIndex
&
sourceParent
)
const
override
;
bool
lessThan
(
const
QModelIndex
&
left
,
const
QModelIndex
&
right
)
const
override
;
};
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment