diff options
| author | Peter Penz <[email protected]> | 2012-04-01 16:42:46 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2012-04-01 16:46:54 +0200 |
| commit | a4ede4e0ebaf0bba57da8fc2924577f1a8ff7b54 (patch) | |
| tree | 954d5394838230f20646f17727460aaae1fbcb34 /src/kitemviews/kfileitemmodelrolesupdater.cpp | |
| parent | aced85db1f7c72268860f0368402cf97f34e55c2 (diff) | |
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
Diffstat (limited to 'src/kitemviews/kfileitemmodelrolesupdater.cpp')
| -rw-r--r-- | src/kitemviews/kfileitemmodelrolesupdater.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
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 <QElapsedTimer> #include <QTimer> +#ifdef HAVE_NEPOMUK + #include "knepomukrolesprovider_p.h" +#endif + // Required includes for subItemsCount(): #ifdef Q_WS_WIN #include <QDir> @@ -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<QByteArray>& 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<QByteArray> 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<QByteArray, QVariant> KFileItemModelRolesUpdater::rolesData(const KFileIte data.insert("iconOverlays", item.overlays()); +#ifdef HAVE_NEPOMUK + if (m_resolveNepomukRoles) { + const KNepomukRolesProvider& rolesProvider = KNepomukRolesProvider::instance(); + QHashIterator<QByteArray, QVariant> it(rolesProvider.roleValues(item.url(), m_roles)); + while (it.hasNext()) { + it.next(); + data.insert(it.key(), it.value()); + } + } +#endif + return data; } |
