From a4ede4e0ebaf0bba57da8fc2924577f1a8ff7b54 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Sun, 1 Apr 2012 16:42:46 +0200 Subject: Allow showing Nepomuk metadata inside views Metadata like image-size, rating, comments, tags, ... can be shown now in the view (e.g. as column in the Details mode). Still open: The rating-information needs to be shown as stars. In the context of this feature also the following bugs have been fixed: - Fix visual glitches in the header of the Details mode - Improve the minimum column width calculation to respect also the headling and not only the content BUG: 296782 FIXED-IN: 4.9.0 --- src/kitemviews/kfileitemmodelrolesupdater.cpp | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/kitemviews/kfileitemmodelrolesupdater.cpp') diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp index 7b0d75dba..efcf6b4cc 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.cpp +++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp @@ -33,6 +33,10 @@ #include #include +#ifdef HAVE_NEPOMUK + #include "knepomukrolesprovider_p.h" +#endif + // Required includes for subItemsCount(): #ifdef Q_WS_WIN #include @@ -74,6 +78,10 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO m_previewJobs(), m_changedItemsTimer(0), m_changedItems() + #ifdef HAVE_NEPOMUK + , m_resolveNepomukRoles(false) + #endif + { Q_ASSERT(model); @@ -219,6 +227,23 @@ void KFileItemModelRolesUpdater::setRoles(const QSet& roles) if (m_roles != roles) { m_roles = roles; +#ifdef HAVE_NEPOMUK + // Check whether there is at least one role that must be resolved + // with the help of Nepomuk. If this is the case, m_resolveNepomukRoles + // will be set to true and the (quite expensive) resolving will be done + // in KFileItemModelRolesUpdater::rolesData(). + const KNepomukRolesProvider& rolesProvider = KNepomukRolesProvider::instance(); + m_resolveNepomukRoles = false; + QSetIterator it(roles); + while (it.hasNext()) { + const QByteArray& role = it.next(); + if (rolesProvider.isNepomukRole(role)) { + m_resolveNepomukRoles = true; + break; + } + } +#endif + if (m_paused) { m_rolesChangedDuringPausing = true; } else { @@ -754,6 +779,17 @@ QHash KFileItemModelRolesUpdater::rolesData(const KFileIte data.insert("iconOverlays", item.overlays()); +#ifdef HAVE_NEPOMUK + if (m_resolveNepomukRoles) { + const KNepomukRolesProvider& rolesProvider = KNepomukRolesProvider::instance(); + QHashIterator it(rolesProvider.roleValues(item.url(), m_roles)); + while (it.hasNext()) { + it.next(); + data.insert(it.key(), it.value()); + } + } +#endif + return data; } -- cgit v1.3