]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Use the new KOverlayIconPlugin interface from KIO::Widgets
authorOlivier Goffart <ogoffart@woboq.com>
Mon, 7 Sep 2015 15:47:53 +0000 (17:47 +0200)
committerOlivier Goffart <ogoffart@woboq.com>
Wed, 4 Nov 2015 13:21:39 +0000 (14:21 +0100)
REVIEW: 125675

CMakeLists.txt
src/kitemviews/kfileitemmodelrolesupdater.cpp
src/kitemviews/kfileitemmodelrolesupdater.h

index 8f1e2835d3c6577bb3428f9d38de981600ccfef1..36feb87ca446bd56e4a1fcf21b88aa6d15395854 100644 (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(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")
 
 # ECM setup
index 14e301522b912d2e215fe0e5619d093ec63da90d..d3d3745fc544adeef95591c6aca50a43f5c92f2e 100644 (file)
@@ -29,6 +29,8 @@
 #include <KJobWidgets>
 #include <KIO/JobUiDelegate>
 #include <KIO/PreviewJob>
+#include <KPluginLoader>
+#include <KOverlayIconPlugin>
 
 #include "private/kpixmapmodifier.h"
 #include "private/kdirectorycontentscounter.h"
@@ -47,6 +49,7 @@
     #include <Baloo/FileMonitor>
 #endif
 
+
 // #define KFILEITEMMODELROLESUPDATER_DEBUG
 
 namespace {
@@ -129,6 +132,18 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO
     m_directoryContentsCounter = new KDirectoryContentsCounter(m_model, this);
     connect(m_directoryContentsCounter, &KDirectoryContentsCounter::result,
             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()
@@ -1065,7 +1080,11 @@ QHash<QByteArray, QVariant> KFileItemModelRolesUpdater::rolesData(const KFileIte
         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
     if (m_balooFileMonitor) {
@@ -1076,6 +1095,22 @@ QHash<QByteArray, QVariant> KFileItemModelRolesUpdater::rolesData(const KFileIte
     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()
 {
     if (m_state == Paused) {
index 6e7559fb53a7f98eb167865a45abd23eefa6e583..f3d40a6c54ea9f02d2833233a710a84af7d1d770 100644 (file)
@@ -36,6 +36,7 @@ class KDirectoryContentsCounter;
 class KFileItemModel;
 class QPixmap;
 class QTimer;
+class KOverlayIconPlugin;
 
 namespace KIO {
     class PreviewJob;
@@ -183,6 +184,11 @@ private slots:
      */
     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
      * to the model, and invokes itself if there are any pending items left. If
@@ -334,6 +340,8 @@ private:
 
     KDirectoryContentsCounter* m_directoryContentsCounter;
 
+    QList<KOverlayIconPlugin*> m_overlayIconsPlugin;
+
 #ifdef HAVE_BALOO
     Baloo::FileMonitor* m_balooFileMonitor;
     Baloo::IndexerConfig m_balooConfig;