Use the new KOverlayIconPlugin interface from KIO::Widgets

REVIEW: 125675
This commit is contained in:
Olivier Goffart 2015-09-07 17:47:53 +02:00
parent 7b273bb4c6
commit 800d5114cb
3 changed files with 45 additions and 2 deletions

View file

@ -9,7 +9,7 @@ set (KDE_APPLICATIONS_VERSION_MICRO "1")
set (KDE_APPLICATIONS_VERSION "${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO}") set (KDE_APPLICATIONS_VERSION "${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO}")
set(QT_MIN_VERSION "5.4.0") set(QT_MIN_VERSION "5.4.0")
set(KF5_MIN_VERSION "5.7.0") set(KF5_MIN_VERSION "5.16.0")
set(ECM_MIN_VERSION "1.6.0") set(ECM_MIN_VERSION "1.6.0")
# ECM setup # ECM setup

View file

@ -29,6 +29,8 @@
#include <KJobWidgets> #include <KJobWidgets>
#include <KIO/JobUiDelegate> #include <KIO/JobUiDelegate>
#include <KIO/PreviewJob> #include <KIO/PreviewJob>
#include <KPluginLoader>
#include <KOverlayIconPlugin>
#include "private/kpixmapmodifier.h" #include "private/kpixmapmodifier.h"
#include "private/kdirectorycontentscounter.h" #include "private/kdirectorycontentscounter.h"
@ -47,6 +49,7 @@
#include <Baloo/FileMonitor> #include <Baloo/FileMonitor>
#endif #endif
// #define KFILEITEMMODELROLESUPDATER_DEBUG // #define KFILEITEMMODELROLESUPDATER_DEBUG
namespace { namespace {
@ -129,6 +132,18 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO
m_directoryContentsCounter = new KDirectoryContentsCounter(m_model, this); m_directoryContentsCounter = new KDirectoryContentsCounter(m_model, this);
connect(m_directoryContentsCounter, &KDirectoryContentsCounter::result, connect(m_directoryContentsCounter, &KDirectoryContentsCounter::result,
this, &KFileItemModelRolesUpdater::slotDirectoryContentsCountReceived); this, &KFileItemModelRolesUpdater::slotDirectoryContentsCountReceived);
auto plugins = KPluginLoader::instantiatePlugins(QStringLiteral("kf5/overlayicon"), nullptr, this);
foreach (QObject *it, plugins) {
auto plugin = qobject_cast<KOverlayIconPlugin*>(it);
if (plugin) {
m_overlayIconsPlugin.append(plugin);
connect(plugin, &KOverlayIconPlugin::overlaysChanged, this, &KFileItemModelRolesUpdater::slotOverlaysChanged);
} else {
// not our/valid plugin, so delete the created object
it->deleteLater();
}
}
} }
KFileItemModelRolesUpdater::~KFileItemModelRolesUpdater() KFileItemModelRolesUpdater::~KFileItemModelRolesUpdater()
@ -1065,7 +1080,11 @@ QHash<QByteArray, QVariant> KFileItemModelRolesUpdater::rolesData(const KFileIte
data.insert("type", item.mimeComment()); data.insert("type", item.mimeComment());
} }
data.insert("iconOverlays", item.overlays()); QStringList overlays = item.overlays();
foreach(KOverlayIconPlugin *it, m_overlayIconsPlugin) {
overlays.append(it->getOverlays(item.url()));
}
data.insert("iconOverlays", overlays);
#ifdef HAVE_BALOO #ifdef HAVE_BALOO
if (m_balooFileMonitor) { if (m_balooFileMonitor) {
@ -1076,6 +1095,22 @@ QHash<QByteArray, QVariant> KFileItemModelRolesUpdater::rolesData(const KFileIte
return data; return data;
} }
void KFileItemModelRolesUpdater::slotOverlaysChanged(const QUrl& url, const QStringList &)
{
const KFileItem item = m_model->fileItem(url);
if (item.isNull()) {
return;
}
const int index = m_model->index(item);
QHash<QByteArray, QVariant> data = m_model->data(index);
QStringList overlays = item.overlays();
foreach (KOverlayIconPlugin *it, m_overlayIconsPlugin) {
overlays.append(it->getOverlays(url));
}
data.insert("iconOverlays", overlays);
m_model->setData(index, data);
}
void KFileItemModelRolesUpdater::updateAllPreviews() void KFileItemModelRolesUpdater::updateAllPreviews()
{ {
if (m_state == Paused) { if (m_state == Paused) {

View file

@ -36,6 +36,7 @@ class KDirectoryContentsCounter;
class KFileItemModel; class KFileItemModel;
class QPixmap; class QPixmap;
class QTimer; class QTimer;
class KOverlayIconPlugin;
namespace KIO { namespace KIO {
class PreviewJob; class PreviewJob;
@ -183,6 +184,11 @@ private slots:
*/ */
void slotPreviewJobFinished(); void slotPreviewJobFinished();
/**
* Is invoked when one of the KOverlayIconPlugin emit the signal that an overlay has changed
*/
void slotOverlaysChanged(const QUrl& url, const QStringList&);
/** /**
* Resolves the sort role of the next item in m_pendingSortRole, applies it * Resolves the sort role of the next item in m_pendingSortRole, applies it
* to the model, and invokes itself if there are any pending items left. If * to the model, and invokes itself if there are any pending items left. If
@ -334,6 +340,8 @@ private:
KDirectoryContentsCounter* m_directoryContentsCounter; KDirectoryContentsCounter* m_directoryContentsCounter;
QList<KOverlayIconPlugin*> m_overlayIconsPlugin;
#ifdef HAVE_BALOO #ifdef HAVE_BALOO
Baloo::FileMonitor* m_balooFileMonitor; Baloo::FileMonitor* m_balooFileMonitor;
Baloo::IndexerConfig m_balooConfig; Baloo::IndexerConfig m_balooConfig;