X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ba1993af7cdf752ea0c25d5f439c6fc279699ed4..c8d8556950005dfd96ebdb41d2f43ad90356367c:/src/kitemviews/kitemlistheader.cpp diff --git a/src/kitemviews/kitemlistheader.cpp b/src/kitemviews/kitemlistheader.cpp index c0b48c1a0..7b5549c73 100644 --- a/src/kitemviews/kitemlistheader.cpp +++ b/src/kitemviews/kitemlistheader.cpp @@ -19,6 +19,8 @@ #include "kitemlistheader_p.h" +#include +#include #include "kitemmodelbase.h" #include @@ -110,6 +112,12 @@ QHash KItemListHeader::visibleRolesWidths() const return m_visibleRolesWidths; } +qreal KItemListHeader::minimumRoleWidth() const +{ + QFontMetricsF fontMetrics(font()); + return fontMetrics.height() * 4; +} + void KItemListHeader::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { Q_UNUSED(option); @@ -143,11 +151,15 @@ void KItemListHeader::paint(QPainter* painter, const QStyleOptionGraphicsItem* o void KItemListHeader::mousePressEvent(QGraphicsSceneMouseEvent* event) { - event->accept(); - updatePressedRoleIndex(event->pos()); - m_pressedMousePos = event->pos(); - m_roleOperation = isAboveRoleGrip(m_pressedMousePos, m_pressedRoleIndex) ? - ResizeRoleOperation : NoRoleOperation; + if (event->button() & Qt::LeftButton) { + updatePressedRoleIndex(event->pos()); + m_pressedMousePos = event->pos(); + m_roleOperation = isAboveRoleGrip(m_pressedMousePos, m_pressedRoleIndex) ? + ResizeRoleOperation : NoRoleOperation; + event->accept(); + } else { + event->ignore(); + } } void KItemListHeader::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) @@ -164,13 +176,17 @@ void KItemListHeader::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) const int sortRoleIndex = m_visibleRoles.indexOf(sortRole); if (m_pressedRoleIndex == sortRoleIndex) { // Toggle the sort order - const Qt::SortOrder toggled = (m_model->sortOrder() == Qt::AscendingOrder) ? + const Qt::SortOrder previous = m_model->sortOrder(); + const Qt::SortOrder current = (m_model->sortOrder() == Qt::AscendingOrder) ? Qt::DescendingOrder : Qt::AscendingOrder; - m_model->setSortOrder(toggled); + m_model->setSortOrder(current); + emit sortOrderChanged(current, previous); } else { // Change the sort role - const QByteArray sortRole = m_visibleRoles.at(m_pressedRoleIndex); - m_model->setSortRole(sortRole); + const QByteArray previous = m_model->sortRole(); + const QByteArray current = m_visibleRoles.at(m_pressedRoleIndex); + m_model->setSortRole(current); + emit sortRoleChanged(current, previous); } } @@ -186,12 +202,15 @@ void KItemListHeader::mouseMoveEvent(QGraphicsSceneMouseEvent* event) if (m_roleOperation == ResizeRoleOperation) { const QByteArray pressedRole = m_visibleRoles.at(m_pressedRoleIndex); - qreal roleWidth = m_visibleRolesWidths.value(pressedRole); - roleWidth += event->pos().x() - event->lastPos().x(); - roleWidth = qMax(minimumRoleWidth(), roleWidth); + qreal previousWidth = m_visibleRolesWidths.value(pressedRole); + qreal currentWidth = previousWidth; + currentWidth += event->pos().x() - event->lastPos().x(); + currentWidth = qMax(minimumRoleWidth(), currentWidth); - m_visibleRolesWidths.insert(pressedRole, roleWidth); + m_visibleRolesWidths.insert(pressedRole, currentWidth); update(); + + emit visibleRoleWidthChanged(pressedRole, currentWidth, previousWidth); } else if ((event->pos() - m_pressedMousePos).manhattanLength() >= QApplication::startDragDistance()) { kDebug() << "Moving of role not supported yet"; m_roleOperation = MoveRoleOperation; @@ -331,10 +350,4 @@ bool KItemListHeader::isAboveRoleGrip(const QPointF& pos, int roleIndex) const return pos.x() >= (x - grip) && pos.x() <= x; } -qreal KItemListHeader::minimumRoleWidth() const -{ - QFontMetricsF fontMetrics(font()); - return fontMetrics.averageCharWidth() * 5; -} - #include "kitemlistheader_p.moc"