]> cloud.milkyroute.net Git - dolphin.git/commitdiff
DolphinView: Allow to have tootips on columns headers
authorMéven Car <meven.car@kdemail.net>
Tue, 14 Feb 2023 17:19:15 +0000 (18:19 +0100)
committerMéven Car <meven.car@kdemail.net>
Sat, 18 Feb 2023 16:01:44 +0000 (16:01 +0000)
Add events columnHovered/columnUnHovered to KItemListview and
KItemListHeaderWidget.

src/kitemviews/kitemlistview.cpp
src/kitemviews/kitemlistview.h
src/kitemviews/private/kitemlistheaderwidget.cpp
src/kitemviews/private/kitemlistheaderwidget.h
src/views/dolphinview.cpp
src/views/dolphinview.h

index d9455ce9e204933590f77c7fb5b33bfde1ae32da..7f13479204f636eeaaaeefce4858b17bcef82622 100644 (file)
@@ -601,6 +601,8 @@ void KItemListView::setHeaderVisible(bool visible)
         connect(m_headerWidget, &KItemListHeaderWidget::columnMoved, this, &KItemListView::slotHeaderColumnMoved);
         connect(m_headerWidget, &KItemListHeaderWidget::sortOrderChanged, this, &KItemListView::sortOrderChanged);
         connect(m_headerWidget, &KItemListHeaderWidget::sortRoleChanged, this, &KItemListView::sortRoleChanged);
+        connect(m_headerWidget, &KItemListHeaderWidget::columnHovered, this, &KItemListView::columnHovered);
+        connect(m_headerWidget, &KItemListHeaderWidget::columnUnHovered, this, &KItemListView::columnUnHovered);
 
         m_layouter->setHeaderHeight(headerSize.height());
         m_headerWidget->setVisible(true);
@@ -610,6 +612,8 @@ void KItemListView::setHeaderVisible(bool visible)
         disconnect(m_headerWidget, &KItemListHeaderWidget::columnMoved, this, &KItemListView::slotHeaderColumnMoved);
         disconnect(m_headerWidget, &KItemListHeaderWidget::sortOrderChanged, this, &KItemListView::sortOrderChanged);
         disconnect(m_headerWidget, &KItemListHeaderWidget::sortRoleChanged, this, &KItemListView::sortRoleChanged);
+        disconnect(m_headerWidget, &KItemListHeaderWidget::columnHovered, this, &KItemListView::columnHovered);
+        disconnect(m_headerWidget, &KItemListHeaderWidget::columnUnHovered, this, &KItemListView::columnUnHovered);
 
         m_layouter->setHeaderHeight(0);
         m_headerWidget->setVisible(false);
index e9b4a62dd0dd9f3155af36e562b8f66a8f6cfa1b..6c3d3648d091ce526f54cb935f76916a0f5e02c5 100644 (file)
@@ -327,6 +327,9 @@ Q_SIGNALS:
      */
     void scrollingStopped();
 
+    void columnHovered(int roleIndex);
+    void columnUnHovered(int roleIndex);
+
 protected:
     QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
     void setItemSize(const QSizeF &size);
index ac25d189c15252fca3ece21042e0dd8f375d8c50..d23b7def9ac041062063be508f96f26d63ec2a22 100644 (file)
@@ -372,6 +372,7 @@ void KItemListHeaderWidget::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
 {
     QGraphicsWidget::hoverLeaveEvent(event);
     if (m_hoveredRoleIndex != -1) {
+        Q_EMIT columnUnHovered(m_hoveredRoleIndex);
         m_hoveredRoleIndex = -1;
         update();
     }
@@ -488,8 +489,15 @@ void KItemListHeaderWidget::updatePressedRoleIndex(const QPointF &pos)
 void KItemListHeaderWidget::updateHoveredRoleIndex(const QPointF &pos)
 {
     const int hoverIndex = roleIndexAt(pos);
+
     if (m_hoveredRoleIndex != hoverIndex) {
+        if (m_hoveredRoleIndex != -1) {
+            Q_EMIT columnUnHovered(m_hoveredRoleIndex);
+        }
         m_hoveredRoleIndex = hoverIndex;
+        if (m_hoveredRoleIndex != -1) {
+            Q_EMIT columnHovered(m_hoveredRoleIndex);
+        }
         update();
     }
 }
index 58c27b43ae369965b694b4f8d7a49d464ba0e982..05a5924e171ec44ccd7b043249956e39342b6560 100644 (file)
@@ -93,6 +93,9 @@ Q_SIGNALS:
      */
     void sortRoleChanged(const QByteArray &current, const QByteArray &previous);
 
+    void columnUnHovered(int roleIndex);
+    void columnHovered(int roleIndex);
+
 protected:
     void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
     void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
@@ -158,7 +161,8 @@ private:
         int x;
         int xDec;
         int index;
-    } m_movingRole;
+    };
+    MovingRole m_movingRole;
 };
 
 #endif
index 18d2137e36600498f003281a839806d2e27b8142..a5d40f3971fc33e450593deae71b29f14af0e0a8 100644 (file)
@@ -78,6 +78,7 @@ DolphinView::DolphinView(const QUrl &url, QWidget *parent)
     , m_assureVisibleCurrentIndex(false)
     , m_isFolderWritable(true)
     , m_dragging(false)
+    , m_selectNextItem(false)
     , m_url(url)
     , m_viewPropertiesContext()
     , m_mode(DolphinView::IconsView)
@@ -87,7 +88,6 @@ DolphinView::DolphinView(const QUrl &url, QWidget *parent)
     , m_view(nullptr)
     , m_container(nullptr)
     , m_toolTipManager(nullptr)
-    , m_selectNextItem(false)
     , m_selectionChangedTimer(nullptr)
     , m_currentItemUrl()
     , m_scrollToCurrentItem(false)
@@ -210,6 +210,14 @@ DolphinView::DolphinView(const QUrl &url, QWidget *parent)
     connect(m_view, &DolphinItemListView::sortRoleChanged, this, &DolphinView::slotSortRoleChangedByHeader);
     connect(m_view, &DolphinItemListView::visibleRolesChanged, this, &DolphinView::slotVisibleRolesChangedByHeader);
     connect(m_view, &DolphinItemListView::roleEditingCanceled, this, &DolphinView::slotRoleEditingCanceled);
+
+    connect(m_view, &DolphinItemListView::columnHovered, this, [this](int roleIndex) {
+        m_hoveredColumnHearderRoleIndex = roleIndex;
+    });
+    connect(m_view, &DolphinItemListView::columnUnHovered, this, [this](int roleIndex) {
+        Q_UNUSED(roleIndex)
+        m_hoveredColumnHearderRoleIndex = -1;
+    });
     connect(m_view->header(), &KItemListHeader::columnWidthChangeFinished, this, &DolphinView::slotHeaderColumnWidthChangeFinished);
     connect(m_view->header(), &KItemListHeader::sidePaddingChanged, this, &DolphinView::slotSidePaddingWidthChanged);
 
@@ -961,9 +969,18 @@ bool DolphinView::eventFilter(QObject *watched, QEvent *event)
         }
         break;
 
-    case QEvent::ToolTip:
-        tryShowNameToolTip(static_cast<QHelpEvent *>(event));
+    case QEvent::ToolTip: {
+        const auto helpEvent = static_cast<QHelpEvent *>(event);
+        if (tryShowNameToolTip(helpEvent)) {
+            return true;
 
+        } else if (m_hoveredColumnHearderRoleIndex != -1) {
+            const auto roleInfo = KFileItemModel::rolesInformation().at(m_hoveredColumnHearderRoleIndex);
+            QToolTip::showText(helpEvent->globalPos(), roleInfo.tooltip, this);
+            return true;
+        }
+        break;
+    }
     default:
         break;
     }
@@ -2300,13 +2317,13 @@ void DolphinView::updatePlaceholderLabel()
     m_placeholderLabel->setVisible(true);
 }
 
-void DolphinView::tryShowNameToolTip(QHelpEvent *event)
+bool DolphinView::tryShowNameToolTip(QHelpEvent *event)
 {
     if (!GeneralSettings::showToolTips() && m_mode == DolphinView::IconsView) {
         const std::optional<int> index = m_view->itemAt(event->pos());
 
         if (!index.has_value()) {
-            return;
+            return false;
         }
 
         // Check whether the filename has been elided
@@ -2317,6 +2334,8 @@ void DolphinView::tryShowNameToolTip(QHelpEvent *event)
             const QString text = item.text();
             const QPoint pos = mapToGlobal(event->pos());
             QToolTip::showText(pos, text);
+            return true;
         }
     }
+    return false;
 }
index fc5fd52ff935a3343610a2204ab192a7345156ee..cb8953579d8ea6c1d1ed0b54a77401a6174cc652 100644 (file)
@@ -886,7 +886,7 @@ private:
 
     void updatePlaceholderLabel();
 
-    void tryShowNameToolTip(QHelpEvent *event);
+    bool tryShowNameToolTip(QHelpEvent *event);
 
 private:
     void updatePalette();
@@ -939,6 +939,9 @@ private:
     QLabel *m_placeholderLabel;
     QTimer *m_showLoadingPlaceholderTimer;
 
+    /// The information roleIndex of the list column header currently hovered
+    int m_hoveredColumnHearderRoleIndex;
+
     /// Used for selection mode. @see setSelectionMode()
     std::unique_ptr<QProxyStyle> m_proxyStyle;