]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/panels/places/placespanel.cpp
Add missing includes
[dolphin.git] / src / panels / places / placespanel.cpp
index 413d346b6e4840a025375d420d4fab5f9ae9c814..d49ad39ec49fd59e7960641765930f5fa99b623e 100644 (file)
 #include <KMountPoint>
 #include <KPropertiesDialog>
 
+#include <QActionGroup>
 #include <QGraphicsSceneDragDropEvent>
 #include <QIcon>
 #include <QMenu>
 #include <QMimeData>
 #include <QVBoxLayout>
+#include <QToolTip>
+#include <QTimer>
 
 PlacesPanel::PlacesPanel(QWidget* parent) :
     Panel(parent),
@@ -49,8 +52,12 @@ PlacesPanel::PlacesPanel(QWidget* parent) :
     m_triggerStorageSetupButton(),
     m_itemDropEventIndex(-1),
     m_itemDropEventMimeData(nullptr),
-    m_itemDropEvent(nullptr)
+    m_itemDropEvent(nullptr),
+    m_tooltipTimer()
 {
+    m_tooltipTimer.setInterval(500);
+    m_tooltipTimer.setSingleShot(true);
+    connect(&m_tooltipTimer, &QTimer::timeout, this, &PlacesPanel::slotShowTooltip);
 }
 
 PlacesPanel::~PlacesPanel()
@@ -71,7 +78,7 @@ bool PlacesPanel::urlChanged()
     }
 
     if (m_controller) {
-        selectClosestItem();
+        selectItem();
     }
 
     return true;
@@ -104,11 +111,15 @@ void PlacesPanel::showEvent(QShowEvent* event)
                 this, &PlacesPanel::storageTearDownRequested);
         connect(m_model, &PlacesItemModel::storageTearDownExternallyRequested,
                 this, &PlacesPanel::storageTearDownExternallyRequested);
+        connect(m_model, &PlacesItemModel::storageTearDownSuccessful,
+                this, &PlacesPanel::storageTearDownSuccessful);
 
         m_view = new PlacesView();
         m_view->setWidgetCreator(new KItemListWidgetCreator<PlacesItemListWidget>());
         m_view->setGroupHeaderCreator(new KItemListGroupHeaderCreator<PlacesItemListGroupHeader>());
 
+        installEventFilter(this);
+
         m_controller = new KItemListController(m_model, m_view, this);
         m_controller->setSelectionBehavior(KItemListController::SingleSelection);
         m_controller->setSingleClickActivationEnforced(true);
@@ -129,12 +140,27 @@ void PlacesPanel::showEvent(QShowEvent* event)
         layout->setContentsMargins(0, 0, 0, 0);
         layout->addWidget(container);
 
-        selectClosestItem();
+        selectItem();
     }
 
     Panel::showEvent(event);
 }
 
+bool PlacesPanel::eventFilter(QObject * /* obj */, QEvent *event)
+{
+    if (event->type() == QEvent::ToolTip) {
+
+        QHelpEvent *hoverEvent = reinterpret_cast<QHelpEvent *>(event);
+
+        m_hoveredIndex = m_view->itemAt(hoverEvent->pos());
+        m_hoverPos = mapToGlobal(hoverEvent->pos());
+
+        m_tooltipTimer.start();
+        return true;
+    }
+    return false;
+}
+
 void PlacesPanel::slotItemActivated(int index)
 {
     triggerItem(index, Qt::LeftButton);
@@ -268,7 +294,7 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos)
         }
     }
 
-    selectClosestItem();
+    selectItem();
 }
 
 void PlacesPanel::slotViewContextMenuRequested(const QPointF& pos)
@@ -320,7 +346,8 @@ void PlacesPanel::slotViewContextMenuRequested(const QPointF& pos)
     menu.addMenu(iconSizeSubMenu);
 
     menu.addSeparator();
-    foreach (QAction* action, customContextMenuActions()) {
+    const auto actions = customContextMenuActions();
+    for (QAction* action : actions) {
         menu.addAction(action);
     }
 
@@ -335,7 +362,7 @@ void PlacesPanel::slotViewContextMenuRequested(const QPointF& pos)
         }
     }
 
-    selectClosestItem();
+    selectItem();
 }
 
 QAction *PlacesPanel::buildGroupContextMenu(QMenu *menu, int index)
@@ -434,7 +461,7 @@ void PlacesPanel::slotUrlsDropped(const QUrl& dest, QDropEvent* event, QWidget*
 {
     KIO::DropJob *job = DragAndDropHelper::dropUrls(dest, event, parent);
     if (job) {
-        connect(job, &KIO::DropJob::result, this, [this](KJob *job) { if (job->error()) emit errorMessage(job->errorString()); });
+        connect(job, &KIO::DropJob::result, this, [this](KJob *job) { if (job->error()) Q_EMIT errorMessage(job->errorString()); });
     }
 }
 
@@ -457,6 +484,13 @@ void PlacesPanel::slotStorageSetupDone(int index, bool success)
     }
 }
 
+void PlacesPanel::slotShowTooltip()
+{
+    const QUrl url = m_model->data(m_hoveredIndex).value("url").value<QUrl>();
+    const QString text = url.toDisplayString(QUrl::PreferLocalFile);
+    QToolTip::showText(m_hoverPos, text);
+}
+
 void PlacesPanel::addEntry()
 {
     const int index = m_controller->selectionManager()->currentItem();
@@ -496,13 +530,17 @@ void PlacesPanel::editEntry(int index)
     delete dialog;
 }
 
-void PlacesPanel::selectClosestItem()
+void PlacesPanel::selectItem()
 {
     const int index = m_model->closestItem(url());
     KItemListSelectionManager* selectionManager = m_controller->selectionManager();
     selectionManager->setCurrentItem(index);
     selectionManager->clearSelection();
-    selectionManager->setSelected(index);
+
+    const QUrl closestUrl = m_model->url(index);
+    if (!closestUrl.path().isEmpty() && url() == closestUrl) {
+        selectionManager->setSelected(index);
+    }
 }
 
 void PlacesPanel::triggerItem(int index, Qt::MouseButton button)
@@ -526,9 +564,9 @@ void PlacesPanel::triggerItem(int index, Qt::MouseButton button)
         const QUrl url = m_model->data(index).value("url").toUrl();
         if (!url.isEmpty()) {
             if (button == Qt::MiddleButton) {
-                emit placeMiddleClicked(KFilePlacesModel::convertedUrl(url));
+                Q_EMIT placeMiddleClicked(KFilePlacesModel::convertedUrl(url));
             } else {
-                emit placeActivated(KFilePlacesModel::convertedUrl(url));
+                Q_EMIT placeActivated(KFilePlacesModel::convertedUrl(url));
             }
         }
     }
@@ -537,7 +575,7 @@ void PlacesPanel::triggerItem(int index, Qt::MouseButton button)
 void PlacesPanel::showHiddenEntries(bool shown)
 {
     m_model->setHiddenItemsShown(shown);
-    emit showHiddenEntriesChanged(shown);
+    Q_EMIT showHiddenEntriesChanged(shown);
 }
 
 int PlacesPanel::hiddenListCount()