[SCM] ktp-common-internals packaging branch, master, updated. debian/15.12.1-2-1839-gf0635e9
Maximiliano Curia
maxy at moszumanska.debian.org
Mon May 9 09:06:54 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-common-internals.git;a=commitdiff;h=d24c0a5
The following commit has been merged in the master branch:
commit d24c0a588d941279dc7a0a4d712b7c03945b31fe
Author: Martin Klapetek <martin.klapetek at gmail.com>
Date: Tue Jun 25 17:31:44 2013 +0200
Update to latest changes from KPeople
---
KTp/Models/kpeopletranslationproxy.cpp | 59 ++++++++++++++++++++++++++++++++--
KTp/Models/kpeopletranslationproxy.h | 1 +
2 files changed, 58 insertions(+), 2 deletions(-)
diff --git a/KTp/Models/kpeopletranslationproxy.cpp b/KTp/Models/kpeopletranslationproxy.cpp
index e231823..bdf9723 100644
--- a/KTp/Models/kpeopletranslationproxy.cpp
+++ b/KTp/Models/kpeopletranslationproxy.cpp
@@ -27,6 +27,9 @@
#include <KTp/types.h>
#include <KDebug>
+#include <KIconLoader>
+
+#include <QPixmapCache>
using namespace KPeople;
@@ -57,7 +60,7 @@ QVariant KPeopleTranslationProxy::data(const QModelIndex &proxyIndex, int role)
case KTp::ContactPresenceTypeRole:
return translatePresence(mapToSource(proxyIndex).data(PersonsModel::PresenceTypeRole));
case KTp::ContactPresenceIconRole:
- return mapToSource(proxyIndex).data(PersonsModel::PresenceDecorationRole);
+ return mapToSource(proxyIndex).data(PersonsModel::PresenceIconNameRole);
case KTp::ContactPresenceNameRole:
return mapToSource(proxyIndex).data(PersonsModel::PresenceDisplayRole);
case Qt::DisplayRole:
@@ -70,6 +73,8 @@ QVariant KPeopleTranslationProxy::data(const QModelIndex &proxyIndex, int role)
}
case KTp::ContactAvatarPathRole:
return mapToSource(proxyIndex).data(PersonsModel::PhotosRole);
+ case KTp::ContactAvatarPixmapRole:
+ return contactPixmap(proxyIndex);
case KTp::IdRole:
return mapToSource(proxyIndex).data(PersonsModel::IMsRole);
case KTp::HeaderTotalUsersRole:
@@ -89,7 +94,7 @@ QVariant KPeopleTranslationProxy::data(const QModelIndex &proxyIndex, int role)
for (int i = 0; i < j; i++) {
const QString contactId = isChildContact ? mapToSource(proxyIndex).data(PersonsModel::IMsRole).toString()
- : mapToSource(proxyIndex).data(PersonsModel::IMsRole).toList().at(i).toString();
+ : mapToSource(proxyIndex).data(PersonsModel::IMsRole).toList().at(i).toString();
const KTp::ContactPtr contact = imPlugin->contactForContactId(contactId);
if (!contact.isNull()) {
@@ -157,3 +162,53 @@ QVariant KPeopleTranslationProxy::translatePresence(const QVariant &presenceName
return Tp::ConnectionPresenceTypeOffline;
}
+
+QPixmap KPeopleTranslationProxy::contactPixmap(const QModelIndex &index) const
+{
+ QPixmap avatar;
+
+ int presenceType = index.data(KTp::ContactPresenceTypeRole).toInt();
+ const QVariantList ids = index.data(KTp::IdRole).toList();
+ QString id;
+ if (!ids.isEmpty()) {
+ id = ids.first().toString();
+ }
+
+ const QString keyCache = id + (presenceType == Tp::ConnectionPresenceTypeOffline ? QLatin1String("-offline") : QLatin1String("-online"));
+
+ //check pixmap cache for the avatar, if not present, load the avatar
+ if (!QPixmapCache::find(keyCache, avatar)){
+ const QVariantList files = index.data(KTp::ContactAvatarPathRole).toList();
+ QString file;
+ if (!files.isEmpty()) {
+ file = files.first().toUrl().toLocalFile();
+ }
+
+ //QPixmap::load() checks for empty path
+ avatar.load(file);
+
+ //if the above didn't succeed, we need to load the generic icon
+ if (avatar.isNull()) {
+ avatar = KIconLoader::global()->loadIcon(QLatin1String("im-user"), KIconLoader::NoGroup, 96);
+ }
+
+ //if the contact is offline, gray it out
+ if (presenceType == Tp::ConnectionPresenceTypeOffline) {
+ QImage image = avatar.toImage();
+ const QPixmap alpha = avatar.alphaChannel();
+ for (int i = 0; i < image.width(); ++i) {
+ for (int j = 0; j < image.height(); ++j) {
+ int colour = qGray(image.pixel(i, j));
+ image.setPixel(i, j, qRgb(colour, colour, colour));
+ }
+ }
+ avatar = avatar.fromImage(image);
+ avatar.setAlphaChannel(alpha);
+ }
+
+ //insert the contact into pixmap cache for faster lookup
+ QPixmapCache::insert(keyCache, avatar);
+ }
+
+ return avatar;
+}
diff --git a/KTp/Models/kpeopletranslationproxy.h b/KTp/Models/kpeopletranslationproxy.h
index a37e881..16dbd07 100644
--- a/KTp/Models/kpeopletranslationproxy.h
+++ b/KTp/Models/kpeopletranslationproxy.h
@@ -36,6 +36,7 @@ public:
private:
QVariant translatePresence(const QVariant &presenceName) const;
+ QPixmap contactPixmap(const QModelIndex &index) const;
};
#endif // KTP_TRANSLATION_PROXY_H
--
ktp-common-internals packaging
More information about the pkg-kde-commits
mailing list