You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.2 KiB
143 lines
4.2 KiB
/*************************************************************************** |
|
* Copyright (C) 201 by Eike Hein <hein@kde.org> * |
|
* * |
|
* This program is free software; you can redistribute it and/or modify * |
|
* it under the terms of the GNU General Public License as published by * |
|
* the Free Software Foundation; either version 2 of the License, or * |
|
* (at your option) any later version. * |
|
* * |
|
* This program is distributed in the hope that it will be useful, * |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
|
* GNU General Public License for more details. * |
|
* * |
|
* You should have received a copy of the GNU General Public License * |
|
* along with this program; if not, write to the * |
|
* Free Software Foundation, Inc., * |
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * |
|
***************************************************************************/ |
|
|
|
#include "contactentry.h" |
|
#include "actionlist.h" |
|
|
|
#include <QBitmap> |
|
#include <QPainter> |
|
|
|
#include <KIconLoader> |
|
#include <KLocalizedString> |
|
|
|
#include <KPeople/Widgets/Actions> |
|
#include <KPeople/Widgets/PersonDetailsDialog> |
|
#include <KPeople/PersonData> |
|
|
|
ContactEntry::ContactEntry(AbstractModel *owner, const QString &id) : AbstractEntry(owner) |
|
, m_personData(nullptr) |
|
{ |
|
if (!id.isEmpty()) { |
|
m_personData = new KPeople::PersonData(id); |
|
|
|
QObject::connect(m_personData, &KPeople::PersonData::dataChanged, |
|
[this] { if (m_owner) { m_owner->entryChanged(this); } } |
|
); |
|
} |
|
} |
|
|
|
bool ContactEntry::isValid() const { |
|
return m_personData; |
|
} |
|
|
|
QIcon ContactEntry::icon() const |
|
{ |
|
if (m_personData) { |
|
QPixmap photo = m_personData->photo(); |
|
QBitmap mask(photo.size()); |
|
QPainter painter(&mask); |
|
mask.fill(Qt::white); |
|
painter.setBrush(Qt::black); |
|
painter.drawEllipse(0, 0, mask.width(), mask.height()); |
|
photo.setMask(mask); |
|
|
|
photo = photo.scaled(m_owner->iconSize(), m_owner->iconSize(), |
|
Qt::KeepAspectRatio, Qt::SmoothTransformation); |
|
|
|
KIconLoader::global()->drawOverlays(QStringList() << m_personData->presenceIconName(), photo, KIconLoader::Panel); |
|
|
|
return QIcon(photo); |
|
} |
|
|
|
return QIcon::fromTheme(QStringLiteral("unknown")); |
|
} |
|
|
|
QString ContactEntry::name() const |
|
{ |
|
if (m_personData) { |
|
return m_personData->name(); |
|
} |
|
|
|
return QString(); |
|
} |
|
|
|
QString ContactEntry::id() const |
|
{ |
|
if (m_personData) { |
|
const QString &id = m_personData->personUri(); |
|
|
|
if (id.isEmpty()) { |
|
const QStringList uris = m_personData->contactUris(); |
|
|
|
if (!uris.isEmpty()) { |
|
return uris.at(0); |
|
} |
|
} else { |
|
return id; |
|
} |
|
} |
|
|
|
return QString(); |
|
} |
|
|
|
QUrl ContactEntry::url() const |
|
{ |
|
if (m_personData) { |
|
return QUrl(m_personData->personUri()); |
|
} |
|
|
|
return QUrl(); |
|
} |
|
|
|
bool ContactEntry::hasActions() const |
|
{ |
|
return m_personData; |
|
} |
|
|
|
QVariantList ContactEntry::actions() const |
|
{ |
|
QVariantList actionList; |
|
|
|
actionList << Kicker::createActionItem(i18n("Show Contact Information..."), QString("identity"), QStringLiteral("showContactInfo")); |
|
|
|
return actionList; |
|
} |
|
|
|
bool ContactEntry::run(const QString& actionId, const QVariant &argument) |
|
{ |
|
Q_UNUSED(argument) |
|
|
|
if (!m_personData) { |
|
return false; |
|
} |
|
|
|
if (actionId == QLatin1String("showContactInfo")) { |
|
showPersonDetailsDialog(m_personData->personUri()); |
|
} |
|
|
|
return false; |
|
} |
|
|
|
void ContactEntry::showPersonDetailsDialog(const QString &id) { |
|
KPeople::PersonDetailsDialog *view = new KPeople::PersonDetailsDialog(nullptr); |
|
KPeople::PersonData *data = new KPeople::PersonData(id, view); |
|
view->setPerson(data); |
|
view->setAttribute(Qt::WA_DeleteOnClose); |
|
view->show(); |
|
}
|
|
|