1 /*
2 SPDX-FileCopyrightText: 2015 Eike Hein <hein@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "contactentry.h"
8 #include "actionlist.h"
9
10 #include <QBitmap>
11 #include <QPainter>
12
13 #include <KIconLoader>
14 #include <KLocalizedString>
15
16 #include <KPeople/PersonData>
17 #include <KPeople/Widgets/Actions>
18 #include <KPeople/Widgets/PersonDetailsDialog>
19
ContactEntry(AbstractModel * owner,const QString & id)20 ContactEntry::ContactEntry(AbstractModel *owner, const QString &id)
21 : AbstractEntry(owner)
22 , m_personData(nullptr)
23 {
24 if (!id.isEmpty()) {
25 m_personData = new KPeople::PersonData(id);
26
27 QObject::connect(m_personData, &KPeople::PersonData::dataChanged, [this] {
28 if (m_owner) {
29 m_owner->entryChanged(this);
30 }
31 });
32 }
33 }
34
isValid() const35 bool ContactEntry::isValid() const
36 {
37 return m_personData;
38 }
39
icon() const40 QIcon ContactEntry::icon() const
41 {
42 if (m_personData) {
43 QPixmap photo = m_personData->photo();
44 QBitmap mask(photo.size());
45 QPainter painter(&mask);
46 mask.fill(Qt::white);
47 painter.setBrush(Qt::black);
48 painter.drawEllipse(0, 0, mask.width(), mask.height());
49 photo.setMask(mask);
50
51 photo = photo.scaled(m_owner->iconSize(), m_owner->iconSize(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
52
53 KIconLoader::global()->drawOverlays(QStringList() << m_personData->presenceIconName(), photo, KIconLoader::Panel);
54
55 return QIcon(photo);
56 }
57
58 return QIcon::fromTheme(QStringLiteral("unknown"));
59 }
60
name() const61 QString ContactEntry::name() const
62 {
63 if (m_personData) {
64 return m_personData->name();
65 }
66
67 return QString();
68 }
69
id() const70 QString ContactEntry::id() const
71 {
72 if (m_personData) {
73 const QString &id = m_personData->personUri();
74
75 if (id.isEmpty()) {
76 const QStringList uris = m_personData->contactUris();
77
78 if (!uris.isEmpty()) {
79 return uris.at(0);
80 }
81 } else {
82 return id;
83 }
84 }
85
86 return QString();
87 }
88
url() const89 QUrl ContactEntry::url() const
90 {
91 if (m_personData) {
92 return QUrl(m_personData->personUri());
93 }
94
95 return QUrl();
96 }
97
hasActions() const98 bool ContactEntry::hasActions() const
99 {
100 return m_personData;
101 }
102
actions() const103 QVariantList ContactEntry::actions() const
104 {
105 QVariantList actionList;
106
107 actionList << Kicker::createActionItem(i18n("Show Contact Information…"), QStringLiteral("identity"), QStringLiteral("showContactInfo"));
108
109 return actionList;
110 }
111
run(const QString & actionId,const QVariant & argument)112 bool ContactEntry::run(const QString &actionId, const QVariant &argument)
113 {
114 Q_UNUSED(argument)
115
116 if (!m_personData) {
117 return false;
118 }
119
120 if (actionId == QLatin1String("showContactInfo")) {
121 showPersonDetailsDialog(m_personData->personUri());
122 }
123
124 return false;
125 }
126
showPersonDetailsDialog(const QString & id)127 void ContactEntry::showPersonDetailsDialog(const QString &id)
128 {
129 KPeople::PersonDetailsDialog *view = new KPeople::PersonDetailsDialog(nullptr);
130 KPeople::PersonData *data = new KPeople::PersonData(id, view);
131 view->setPerson(data);
132 view->setAttribute(Qt::WA_DeleteOnClose);
133 view->show();
134 }
135