]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinpart.cpp
Fixes Bug 242007 - "Open Folder during Drag operation" cannot go into different parti...
[dolphin.git] / src / dolphinpart.cpp
index d1626e55d5da1c648208f83d668fb75753958dc9..a957fa665aed811ba5d88fe9821170bca1a6e096 100644 (file)
@@ -45,6 +45,8 @@
 #include "views/dolphinviewactionhandler.h"
 #include "views/dolphinnewfilemenuobserver.h"
 #include "views/dolphinremoteencoding.h"
+#include "kitemviews/kfileitemmodel.h"
+#include "kitemviews/private/kfileitemmodeldirlister.h"
 
 #include <QActionGroup>
 #include <QApplication>
@@ -61,7 +63,6 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL
     Q_UNUSED(args)
     setComponentData(DolphinPartFactory::componentData(), false);
     m_extension = new DolphinPartBrowserExtension(this);
-    new DolphinPartFileInfoExtension(this);
 
     // make sure that other apps using this part find Dolphin's view-file-columns icons
     KIconLoader::global()->addAppDir("dolphin");
@@ -116,6 +117,20 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL
     connect(clipboard, SIGNAL(dataChanged()),
             this, SLOT(updatePasteAction()));
 
+    // Create file info and listing filter extensions.
+    // NOTE: Listing filter needs to be instantiated after the creation of the view.
+    new DolphinPartFileInfoExtension(this);
+    new DolphinPartListingFilterExtension(this);
+
+    KDirLister* lister = m_view->m_model->m_dirLister;
+    if (lister) {
+        DolphinPartListingNotificationExtension* notifyExt = new DolphinPartListingNotificationExtension(this);
+        connect(lister, SIGNAL(newItems(KFileItemList)), notifyExt, SLOT(slotNewItems(KFileItemList)));
+        connect(lister, SIGNAL(itemsDeleted(KFileItemList)), notifyExt, SLOT(slotItemsDeleted(KFileItemList)));
+    } else {
+        kWarning() << "NULL KDirLister object! KParts::ListingNotificationExtension will NOT be supported";
+    }
+
     createActions();
     m_actionHandler->updateViewActions();
     slotSelectionChanged(KFileItemList()); // initially disable selection-dependent actions
@@ -124,7 +139,6 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL
     // (sort of spacial navigation)
 
     loadPlugins(this, this, componentData());
-
 }
 
 DolphinPart::~DolphinPart()
@@ -554,7 +568,12 @@ void DolphinPart::createDirectory()
 
 void DolphinPart::setFilesToSelect(const KUrl::List& files)
 {
+    if (files.isEmpty()) {
+        return;
+    }
+
     m_view->markUrlsAsSelected(files);
+    m_view->markUrlAsCurrent(files.at(0));
 }
 
 ////
@@ -642,4 +661,82 @@ KFileItemList DolphinPartFileInfoExtension::queryFor(KParts::FileInfoExtension::
     return list;
 }
 
+DolphinPartListingFilterExtension::DolphinPartListingFilterExtension (DolphinPart* part)
+    : KParts::ListingFilterExtension(part)
+      , m_part(part)
+{
+}
+
+KParts::ListingFilterExtension::FilterModes DolphinPartListingFilterExtension::supportedFilterModes() const
+{
+    return (KParts::ListingFilterExtension::MimeType |
+            KParts::ListingFilterExtension::SubString |
+            KParts::ListingFilterExtension::WildCard);
+}
+
+bool DolphinPartListingFilterExtension::supportsMultipleFilters (KParts::ListingFilterExtension::FilterMode mode) const
+{
+    if (mode == KParts::ListingFilterExtension::MimeType)
+        return true;
+
+    return false;
+}
+
+QVariant DolphinPartListingFilterExtension::filter (KParts::ListingFilterExtension::FilterMode mode) const
+{
+    QVariant result;
+
+    switch (mode) {
+    case KParts::ListingFilterExtension::MimeType:
+        result = m_part->view()->mimeTypeFilters();
+        break;
+    case KParts::ListingFilterExtension::SubString:
+    case KParts::ListingFilterExtension::WildCard:
+        result = m_part->view()->nameFilter();
+        break;
+    default:
+      break;
+    }
+
+    return result;
+}
+
+void DolphinPartListingFilterExtension::setFilter (KParts::ListingFilterExtension::FilterMode mode, const QVariant& filter)
+{
+    switch (mode) {
+    case KParts::ListingFilterExtension::MimeType:
+        m_part->view()->setMimeTypeFilters(filter.toStringList());
+        break;
+    case KParts::ListingFilterExtension::SubString:
+    case KParts::ListingFilterExtension::WildCard:
+        m_part->view()->setNameFilter(filter.toString());
+        break;
+    default:
+      break;
+    }
+}
+
+////
+
+DolphinPartListingNotificationExtension::DolphinPartListingNotificationExtension(DolphinPart* part)
+    :KParts::ListingNotificationExtension(part)
+{
+}
+
+KParts::ListingNotificationExtension::NotificationEventTypes DolphinPartListingNotificationExtension::supportedNotificationEventTypes() const
+{
+    return (KParts::ListingNotificationExtension::ItemsAdded |
+            KParts::ListingNotificationExtension::ItemsDeleted);
+}
+
+void DolphinPartListingNotificationExtension::slotNewItems(const KFileItemList& items)
+{
+    emit listingEvent(KParts::ListingNotificationExtension::ItemsAdded, items);
+}
+
+void DolphinPartListingNotificationExtension::slotItemsDeleted(const KFileItemList& items)
+{
+    emit listingEvent(KParts::ListingNotificationExtension::ItemsDeleted, items);
+}
+
 #include "dolphinpart.moc"