]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/panels/places/placespanel.cpp
dolphin: convert panels/ and filterbar to qt signal/slot syntax
[dolphin.git] / src / panels / places / placespanel.cpp
index 61c15a7a12631d0a8d36e96e0298cd96646f5d32..1f825426e6ed6f7513174ca9694602c27c1d5a5d 100644 (file)
@@ -30,7 +30,9 @@
 #include <KIcon>
 #include <KIO/Job>
 #include <KIO/JobUiDelegate>
+#include <KJobWidgets>
 #include <KLocale>
+#include <KIconLoader>
 #include <kitemviews/kitemlistcontainer.h>
 #include <kitemviews/kitemlistcontroller.h>
 #include <kitemviews/kitemlistselectionmanager.h>
@@ -48,6 +50,7 @@
 #include <QGraphicsSceneDragDropEvent>
 #include <QVBoxLayout>
 #include <QShowEvent>
+#include <QMimeData>
 
 PlacesPanel::PlacesPanel(QWidget* parent) :
     Panel(parent),
@@ -101,8 +104,8 @@ void PlacesPanel::showEvent(QShowEvent* event)
         // used at all and stays invisible.
         m_model = new PlacesItemModel(this);
         m_model->setGroupedSorting(true);
-        connect(m_model, SIGNAL(errorMessage(QString)),
-                this, SIGNAL(errorMessage(QString)));
+        connect(m_model, &PlacesItemModel::errorMessage,
+                this, &PlacesPanel::errorMessage);
 
         m_view = new PlacesView();
         m_view->setWidgetCreator(new KItemListWidgetCreator<PlacesItemListWidget>());
@@ -110,16 +113,16 @@ void PlacesPanel::showEvent(QShowEvent* event)
 
         m_controller = new KItemListController(m_model, m_view, this);
         m_controller->setSelectionBehavior(KItemListController::SingleSelection);
-        m_controller->setSingleClickActivation(true);
+        m_controller->setSingleClickActivationEnforced(true);
 
        readSettings();
 
-        connect(m_controller, SIGNAL(itemActivated(int)), this, SLOT(slotItemActivated(int)));
-        connect(m_controller, SIGNAL(itemMiddleClicked(int)), this, SLOT(slotItemMiddleClicked(int)));
-        connect(m_controller, SIGNAL(itemContextMenuRequested(int,QPointF)), this, SLOT(slotItemContextMenuRequested(int,QPointF)));
-        connect(m_controller, SIGNAL(viewContextMenuRequested(QPointF)), this, SLOT(slotViewContextMenuRequested(QPointF)));
-        connect(m_controller, SIGNAL(itemDropEvent(int,QGraphicsSceneDragDropEvent*)), this, SLOT(slotItemDropEvent(int,QGraphicsSceneDragDropEvent*)));
-        connect(m_controller, SIGNAL(aboveItemDropEvent(int,QGraphicsSceneDragDropEvent*)), this, SLOT(slotAboveItemDropEvent(int,QGraphicsSceneDragDropEvent*)));
+        connect(m_controller, &KItemListController::itemActivated, this, &PlacesPanel::slotItemActivated);
+        connect(m_controller, &KItemListController::itemMiddleClicked, this, &PlacesPanel::slotItemMiddleClicked);
+        connect(m_controller, &KItemListController::itemContextMenuRequested, this, &PlacesPanel::slotItemContextMenuRequested);
+        connect(m_controller, &KItemListController::viewContextMenuRequested, this, &PlacesPanel::slotViewContextMenuRequested);
+        connect(m_controller, &KItemListController::itemDropEvent, this, &PlacesPanel::slotItemDropEvent);
+        connect(m_controller, &KItemListController::aboveItemDropEvent, this, &PlacesPanel::slotAboveItemDropEvent);
 
         KItemListContainer* container = new KItemListContainer(m_controller, this);
         container->setEnabledFrame(false);
@@ -262,23 +265,34 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos)
             emptyTrash();
         } else if (action == addAction) {
             addEntry();
-        } else if (action == editAction) {
-            editEntry(index);
-        } else if (action == removeAction) {
-            m_model->removeItem(index);
-        } else if (action == hideAction) {
-            item->setHidden(hideAction->isChecked());
-        } else if (action == openInNewTabAction) {
-            const KUrl url = m_model->item(index)->dataValue("url").value<KUrl>();
-            emit placeMiddleClicked(url);
         } else if (action == showAllAction) {
             m_model->setHiddenItemsShown(showAllAction->isChecked());
-        } else if (action == teardownAction) {
-            m_model->requestTeardown(index);
-        } else if (action == ejectAction) {
-            m_model->requestEject(index);
         } else if (iconSizeActionMap.contains(action)) {
             m_view->setIconSize(iconSizeActionMap.value(action));
+        } else {
+            // The index might have changed if devices were added/removed while
+            // the context menu was open.
+            index = m_model->index(item);
+            if (index < 0) {
+                // The item is not in the model any more, probably because it was an
+                // external device that has been removed while the context menu was open.
+                return;
+            }
+
+            if (action == editAction) {
+                editEntry(index);
+            } else if (action == removeAction) {
+                m_model->removeItem(index);
+            } else if (action == hideAction) {
+                item->setHidden(hideAction->isChecked());
+            } else if (action == openInNewTabAction) {
+                const KUrl url = m_model->item(index)->dataValue("url").value<KUrl>();
+                emit placeMiddleClicked(url);
+            } else if (action == teardownAction) {
+                m_model->requestTeardown(index);
+            } else if (action == ejectAction) {
+                m_model->requestEject(index);
+            }
         }
     }
 
@@ -321,9 +335,15 @@ void PlacesPanel::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even
         return;
     }
 
+    const PlacesItem* destItem = m_model->placesItem(index);
+    const PlacesItem::GroupType group = destItem->groupType();
+    if (group == PlacesItem::SearchForType || group == PlacesItem::RecentlyAccessedType) {
+        return;
+    }
+
     if (m_model->storageSetupNeeded(index)) {
-        connect(m_model, SIGNAL(storageSetupDone(int,bool)),
-                this, SLOT(slotItemDropEventStorageSetupDone(int,bool)));
+        connect(m_model, &PlacesItemModel::storageSetupDone,
+                this, &PlacesPanel::slotItemDropEventStorageSetupDone);
 
         m_itemDropEventIndex = index;
 
@@ -345,26 +365,34 @@ void PlacesPanel::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even
         return;
     }
 
-    KUrl destUrl = m_model->placesItem(index)->url();
+    KUrl destUrl = destItem->url();
     QDropEvent dropEvent(event->pos().toPoint(),
                          event->possibleActions(),
                          event->mimeData(),
                          event->buttons(),
                          event->modifiers());
 
-    DragAndDropHelper::dropUrls(KFileItem(), destUrl, &dropEvent);
+    QString error;
+    DragAndDropHelper::dropUrls(KFileItem(), destUrl, &dropEvent, error);
+    if (!error.isEmpty()) {
+        emit errorMessage(error);
+    }
 }
 
 void PlacesPanel::slotItemDropEventStorageSetupDone(int index, bool success)
 {
-    disconnect(m_model, SIGNAL(storageSetupDone(int,bool)),
-               this, SLOT(slotItemDropEventStorageSetupDone(int,bool)));
+    disconnect(m_model, &PlacesItemModel::storageSetupDone,
+               this, &PlacesPanel::slotItemDropEventStorageSetupDone);
 
     if ((index == m_itemDropEventIndex) && m_itemDropEvent && m_itemDropEventMimeData) {
         if (success) {
             KUrl destUrl = m_model->placesItem(index)->url();
 
-            DragAndDropHelper::dropUrls(KFileItem(), destUrl, m_itemDropEvent);
+            QString error;
+            DragAndDropHelper::dropUrls(KFileItem(), destUrl, m_itemDropEvent, error);
+            if (!error.isEmpty()) {
+                emit errorMessage(error);
+            }
         }
 
         delete m_itemDropEventMimeData;
@@ -384,7 +412,8 @@ void PlacesPanel::slotAboveItemDropEvent(int index, QGraphicsSceneDragDropEvent*
 void PlacesPanel::slotUrlsDropped(const KUrl& dest, QDropEvent* event, QWidget* parent)
 {
     Q_UNUSED(parent);
-    const QString error = DragAndDropHelper::dropUrls(KFileItem(), dest, event);
+    QString error;
+    DragAndDropHelper::dropUrls(KFileItem(), dest, event, error);
     if (!error.isEmpty()) {
         emit errorMessage(error);
     }
@@ -396,13 +425,13 @@ void PlacesPanel::slotTrashUpdated(KJob* job)
     if (job->error()) {
         emit errorMessage(job->errorString());
     }
-    org::kde::KDirNotify::emitFilesAdded("trash:/");
+    org::kde::KDirNotify::emitFilesAdded(QUrl("trash:/"));
 }
 
 void PlacesPanel::slotStorageSetupDone(int index, bool success)
 {
-    disconnect(m_model, SIGNAL(storageSetupDone(int,bool)),
-               this, SLOT(slotStorageSetupDone(int,bool)));
+    disconnect(m_model, &PlacesItemModel::storageSetupDone,
+               this, &PlacesPanel::slotStorageSetupDone);
 
     if (m_triggerStorageSetupButton == Qt::NoButton) {
         return;
@@ -433,8 +462,8 @@ void PlacesPanel::emptyTrash()
         stream << int(1);
         KIO::Job *job = KIO::special(KUrl("trash:/"), packedArgs);
         KNotification::event("Trash: emptied", QString() , QPixmap() , 0, KNotification::DefaultEvent);
-        job->ui()->setWindow(parentWidget());
-        connect(job, SIGNAL(result(KJob*)), SLOT(slotTrashUpdated(KJob*)));
+        KJobWidgets::setWindow(job, parentWidget());
+        connect(job, &KIO::Job::result, this, &PlacesPanel::slotTrashUpdated);
     }
 }
 
@@ -497,8 +526,8 @@ void PlacesPanel::triggerItem(int index, Qt::MouseButton button)
         m_triggerStorageSetupButton = button;
         m_storageSetupFailedUrl = url();
 
-        connect(m_model, SIGNAL(storageSetupDone(int,bool)),
-                this, SLOT(slotStorageSetupDone(int,bool)));
+        connect(m_model, &PlacesItemModel::storageSetupDone,
+                this, &PlacesPanel::slotStorageSetupDone);
 
         m_model->requestStorageSetup(index);
     } else {