blob: 6f7dd9f56be2f0f618df94e929ea21738ee4763d [file] [log] [blame]
Edric Milareta0ebd062016-01-13 12:18:23 -05001/***************************************************************************
2 * Copyright (C) 2016 by Savoir-faire Linux *
3 * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 3 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
17 **************************************************************************/
18
19#include "pixbufmanipulator.h"
20
21#include <QtCore/QSize>
22#include <QtCore/QMetaType>
23
24#include <person.h>
25#include <memory>
26#include <call.h>
27#include <contactmethod.h>
28
29namespace Interfaces {
30
31PixbufManipulator::PixbufManipulator()
Edric Milareta13b48c2016-01-18 14:42:35 -050032 : fallbackAvatar_(QImage(":/images/user/btn-default-userpic.svg"))
Edric Milareta0ebd062016-01-13 12:18:23 -050033{}
34
35QImage
36PixbufManipulator::scaleAndFrame(const QImage photo, const QSize& size)
37{
38 return photo.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
39}
40
41QVariant
42PixbufManipulator::callPhoto(Call* c, const QSize& size, bool displayPresence)
43{
44 if (!c || c->type() == Call::Type::CONFERENCE)
45 return QVariant::fromValue(scaleAndFrame(fallbackAvatar_, size));
46 return callPhoto(c->peerContactMethod(), size, displayPresence);
47}
48
49QVariant
50PixbufManipulator::callPhoto(const ContactMethod* n, const QSize& size, bool displayPresence)
51{
52 if (n && n->contact()) {
53 return contactPhoto(n->contact(), size, displayPresence);
54 } else {
55 return QVariant::fromValue(scaleAndFrame(fallbackAvatar_, size));
56 }
57}
58
59QVariant
60PixbufManipulator::contactPhoto(Person* c, const QSize& size, bool displayPresence)
61{
62 Q_UNUSED(displayPresence);
63
64 /**
65 * try to get the photo
66 * otherwise use the fallback avatar
67 */
68
69 QImage photo;
70
71 if (c->photo().isValid())
72 photo = c->photo().value<QImage>();
73 else
74 photo = fallbackAvatar_;
75
76 return QVariant::fromValue(scaleAndFrame(photo, size));
77}
78
79QVariant PixbufManipulator::personPhoto(const QByteArray& data, const QString& type)
80{
81 Q_UNUSED(type);
82 Q_UNUSED(data);
83 return QVariant();
84}
85
86QVariant
87PixbufManipulator::numberCategoryIcon(const QVariant& p, const QSize& size, bool displayPresence, bool isPresent)
88{
89 Q_UNUSED(p)
90 Q_UNUSED(size)
91 Q_UNUSED(displayPresence)
92 Q_UNUSED(isPresent)
93 return QVariant();
94}
95
96QVariant
97PixbufManipulator::securityIssueIcon(const QModelIndex& index)
98{
99 Q_UNUSED(index)
100 return QVariant();
101}
102
103QByteArray
104PixbufManipulator::toByteArray(const QVariant& pxm)
105{
106 Q_UNUSED(pxm);
107 return QByteArray();
108}
109
110QVariant
111PixbufManipulator::collectionIcon(const CollectionInterface* interface, PixmapManipulatorI::CollectionIconHint hint) const
112{
113 Q_UNUSED(interface)
114 Q_UNUSED(hint)
115 return QVariant();
116}
117QVariant
118PixbufManipulator::securityLevelIcon(const SecurityEvaluationModel::SecurityLevel level) const
119{
120 Q_UNUSED(level)
121 return QVariant();
122}
123QVariant
124PixbufManipulator::historySortingCategoryIcon(const CategorizedHistoryModel::SortedProxy::Categories cat) const
125{
126 Q_UNUSED(cat)
127 return QVariant();
128}
129QVariant
130PixbufManipulator::contactSortingCategoryIcon(const CategorizedContactModel::SortedProxy::Categories cat) const
131{
132 Q_UNUSED(cat)
133 return QVariant();
134}
135QVariant
136PixbufManipulator::userActionIcon(const UserActionElement& state) const
137{
138 Q_UNUSED(state)
139 return QVariant();
140}
141
142QVariant PixbufManipulator::decorationRole(const QModelIndex& index)
143{
144 Q_UNUSED(index)
145 return QVariant();
146}
147
148QVariant PixbufManipulator::decorationRole(const Call* c)
149{
Edric Milareta13b48c2016-01-18 14:42:35 -0500150 QImage photo;
Edric Milareta0ebd062016-01-13 12:18:23 -0500151 if (c && c->peerContactMethod()
152 && c->peerContactMethod()->contact()
153 && c->peerContactMethod()->contact()->photo().isValid()) {
Edric Milareta13b48c2016-01-18 14:42:35 -0500154 photo = c->peerContactMethod()->contact()->photo().value<QImage>();
Edric Milareta0ebd062016-01-13 12:18:23 -0500155 }
Edric Milareta13b48c2016-01-18 14:42:35 -0500156 else
157 photo = fallbackAvatar_;
158 return QVariant::fromValue(scaleAndFrame(photo, imgSize_));
Edric Milareta0ebd062016-01-13 12:18:23 -0500159}
160
161QVariant PixbufManipulator::decorationRole(const ContactMethod* cm)
162{
Edric Milareta13b48c2016-01-18 14:42:35 -0500163 QImage photo;
Edric Milareta0ebd062016-01-13 12:18:23 -0500164 if (cm && cm->contact() && cm->contact()->photo().isValid())
Edric Milareta13b48c2016-01-18 14:42:35 -0500165 photo = cm->contact()->photo().value<QImage>();
166 else
167 photo = fallbackAvatar_;
168 return QVariant::fromValue(scaleAndFrame(photo, imgSize_));
Edric Milareta0ebd062016-01-13 12:18:23 -0500169}
170
171QVariant PixbufManipulator::decorationRole(const Person* p)
172{
Edric Milareta13b48c2016-01-18 14:42:35 -0500173 QImage photo;
Edric Milareta0ebd062016-01-13 12:18:23 -0500174 if (p && p->photo().isValid())
Edric Milareta13b48c2016-01-18 14:42:35 -0500175 photo = p->photo().value<QImage>();
176 else
177 photo = fallbackAvatar_;
178 return QVariant::fromValue(scaleAndFrame(photo, imgSize_));
Edric Milareta0ebd062016-01-13 12:18:23 -0500179}
180
181} // namespace Interfaces