X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/38c34eeca315c7be58e65d4d3fb72aaf7b866719..4cbeb81b2b8e2d37c93cda4d88787e08e0658291:/src/kitemviews/private/kitemlistheaderwidget.cpp diff --git a/src/kitemviews/private/kitemlistheaderwidget.cpp b/src/kitemviews/private/kitemlistheaderwidget.cpp index ac25d189c..02a4f939d 100644 --- a/src/kitemviews/private/kitemlistheaderwidget.cpp +++ b/src/kitemviews/private/kitemlistheaderwidget.cpp @@ -21,7 +21,7 @@ KItemListHeaderWidget::KItemListHeaderWidget(QGraphicsWidget *parent) , m_columns() , m_columnWidths() , m_preferredColumnWidths() - , m_hoveredRoleIndex(-1) + , m_hoveredIndex(-1) , m_pressedRoleIndex(-1) , m_roleOperation(NoRoleOperation) , m_pressedMousePos() @@ -136,7 +136,7 @@ void KItemListHeaderWidget::setSidePadding(qreal width) { if (m_sidePadding != width) { m_sidePadding = width; - sidePaddingChanged(width); + Q_EMIT sidePaddingChanged(width); update(); } } @@ -167,7 +167,7 @@ void KItemListHeaderWidget::paint(QPainter *painter, const QStyleOptionGraphicsI qreal x = -m_offset + m_sidePadding; int orderIndex = 0; - for (const QByteArray &role : qAsConst(m_columns)) { + for (const QByteArray &role : std::as_const(m_columns)) { const qreal roleWidth = m_columnWidths.value(role); const QRectF rect(x, 0, roleWidth, size().height()); paintRole(painter, role, rect, orderIndex, widget); @@ -365,14 +365,15 @@ void KItemListHeaderWidget::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *even void KItemListHeaderWidget::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { QGraphicsWidget::hoverEnterEvent(event); - updateHoveredRoleIndex(event->pos()); + updateHoveredIndex(event->pos()); } void KItemListHeaderWidget::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { QGraphicsWidget::hoverLeaveEvent(event); - if (m_hoveredRoleIndex != -1) { - m_hoveredRoleIndex = -1; + if (m_hoveredIndex != -1) { + Q_EMIT columnUnHovered(m_hoveredIndex); + m_hoveredIndex = -1; update(); } } @@ -382,8 +383,8 @@ void KItemListHeaderWidget::hoverMoveEvent(QGraphicsSceneHoverEvent *event) QGraphicsWidget::hoverMoveEvent(event); const QPointF &pos = event->pos(); - updateHoveredRoleIndex(pos); - if ((m_hoveredRoleIndex >= 0 && isAboveRoleGrip(pos, m_hoveredRoleIndex)) || isAbovePaddingGrip(pos, PaddingGrip::Leading) + updateHoveredIndex(pos); + if ((m_hoveredIndex >= 0 && isAboveRoleGrip(pos, m_hoveredIndex)) || isAbovePaddingGrip(pos, PaddingGrip::Leading) || isAbovePaddingGrip(pos, PaddingGrip::Trailing)) { setCursor(Qt::SplitHCursor); } else { @@ -423,7 +424,7 @@ void KItemListHeaderWidget::paintRole(QPainter *painter, const QByteArray &role, if (window() && window()->isActiveWindow()) { option.state |= QStyle::State_Active; } - if (m_hoveredRoleIndex == orderIndex) { + if (m_hoveredIndex == orderIndex) { option.state |= QStyle::State_MouseOver; } if (m_pressedRoleIndex == orderIndex) { @@ -485,11 +486,18 @@ void KItemListHeaderWidget::updatePressedRoleIndex(const QPointF &pos) } } -void KItemListHeaderWidget::updateHoveredRoleIndex(const QPointF &pos) +void KItemListHeaderWidget::updateHoveredIndex(const QPointF &pos) { const int hoverIndex = roleIndexAt(pos); - if (m_hoveredRoleIndex != hoverIndex) { - m_hoveredRoleIndex = hoverIndex; + + if (m_hoveredIndex != hoverIndex) { + if (m_hoveredIndex != -1) { + Q_EMIT columnUnHovered(m_hoveredIndex); + } + m_hoveredIndex = hoverIndex; + if (m_hoveredIndex != -1) { + Q_EMIT columnHovered(m_hoveredIndex); + } update(); } } @@ -499,7 +507,7 @@ int KItemListHeaderWidget::roleIndexAt(const QPointF &pos) const int index = -1; qreal x = -m_offset + m_sidePadding; - for (const QByteArray &role : qAsConst(m_columns)) { + for (const QByteArray &role : std::as_const(m_columns)) { ++index; x += m_columnWidths.value(role); if (pos.x() <= x) { @@ -532,7 +540,7 @@ bool KItemListHeaderWidget::isAbovePaddingGrip(const QPointF &pos, PaddingGrip p return pos.x() >= (lx - grip) && pos.x() <= lx; case Trailing: { qreal rx = lx; - for (const QByteArray &role : qAsConst(m_columns)) { + for (const QByteArray &role : std::as_const(m_columns)) { rx += m_columnWidths.value(role); } return pos.x() >= (rx - grip) && pos.x() <= rx; @@ -596,7 +604,7 @@ int KItemListHeaderWidget::targetOfMovingRole() const qreal KItemListHeaderWidget::roleXPosition(const QByteArray &role) const { qreal x = -m_offset + m_sidePadding; - for (const QByteArray &visibleRole : qAsConst(m_columns)) { + for (const QByteArray &visibleRole : std::as_const(m_columns)) { if (visibleRole == role) { return x; } @@ -606,3 +614,5 @@ qreal KItemListHeaderWidget::roleXPosition(const QByteArray &role) const return -1; } + +#include "moc_kitemlistheaderwidget.cpp"