From: Méven Car Date: Tue, 14 Feb 2023 17:19:15 +0000 (+0100) Subject: DolphinView: Allow to have tootips on columns headers X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/da7ccef4886df64913b8a6a4bc14cfdb06067325 DolphinView: Allow to have tootips on columns headers Add events columnHovered/columnUnHovered to KItemListview and KItemListHeaderWidget. --- diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index d9455ce9e..7f1347920 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -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); diff --git a/src/kitemviews/kitemlistview.h b/src/kitemviews/kitemlistview.h index e9b4a62dd..6c3d3648d 100644 --- a/src/kitemviews/kitemlistview.h +++ b/src/kitemviews/kitemlistview.h @@ -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); diff --git a/src/kitemviews/private/kitemlistheaderwidget.cpp b/src/kitemviews/private/kitemlistheaderwidget.cpp index ac25d189c..d23b7def9 100644 --- a/src/kitemviews/private/kitemlistheaderwidget.cpp +++ b/src/kitemviews/private/kitemlistheaderwidget.cpp @@ -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(); } } diff --git a/src/kitemviews/private/kitemlistheaderwidget.h b/src/kitemviews/private/kitemlistheaderwidget.h index 58c27b43a..05a5924e1 100644 --- a/src/kitemviews/private/kitemlistheaderwidget.h +++ b/src/kitemviews/private/kitemlistheaderwidget.h @@ -93,6 +93,9 @@ Q_SIGNALS: */ void sortRoleChanged(const QByteArray ¤t, 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 diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 18d2137e3..a5d40f397 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -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(event)); + case QEvent::ToolTip: { + const auto helpEvent = static_cast(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 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; } diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h index fc5fd52ff..cb8953579 100644 --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -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 m_proxyStyle;