┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMéven Car <[email protected]>2023-02-14 18:19:15 +0100
committerMéven Car <[email protected]>2023-02-18 16:01:44 +0000
commitda7ccef4886df64913b8a6a4bc14cfdb06067325 (patch)
tree0e357a730e65e31669032ec684745a646b759126
parent090db6e8f4d972c6d650d04b49a1dd8ab676c442 (diff)
DolphinView: Allow to have tootips on columns headers
Add events columnHovered/columnUnHovered to KItemListview and KItemListHeaderWidget.
-rw-r--r--src/kitemviews/kitemlistview.cpp4
-rw-r--r--src/kitemviews/kitemlistview.h3
-rw-r--r--src/kitemviews/private/kitemlistheaderwidget.cpp8
-rw-r--r--src/kitemviews/private/kitemlistheaderwidget.h6
-rw-r--r--src/views/dolphinview.cpp29
-rw-r--r--src/views/dolphinview.h5
6 files changed, 48 insertions, 7 deletions
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 &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
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<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;
}
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<QProxyStyle> m_proxyStyle;