X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/2854a69fcad54d394ebec504af4995dcb5e18ac4..502a5c86feb0015c42f052d242c8115de320a38e:/src/kitemviews/private/kitemlistheaderwidget.cpp diff --git a/src/kitemviews/private/kitemlistheaderwidget.cpp b/src/kitemviews/private/kitemlistheaderwidget.cpp index 0f1f20b82..a994f69c8 100644 --- a/src/kitemviews/private/kitemlistheaderwidget.cpp +++ b/src/kitemviews/private/kitemlistheaderwidget.cpp @@ -18,22 +18,18 @@ ***************************************************************************/ #include "kitemlistheaderwidget.h" - -#include -#include -#include +#include "kitemviews/kitemmodelbase.h" #include #include #include #include -#include KItemListHeaderWidget::KItemListHeaderWidget(QGraphicsWidget* parent) : QGraphicsWidget(parent), m_automaticColumnResizing(true), - m_model(0), + m_model(nullptr), m_offset(0), m_columns(), m_columnWidths(), @@ -62,19 +58,19 @@ void KItemListHeaderWidget::setModel(KItemModelBase* model) } if (m_model) { - disconnect(m_model, SIGNAL(sortRoleChanged(QByteArray,QByteArray)), - this, SLOT(slotSortRoleChanged(QByteArray,QByteArray))); - disconnect(m_model, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)), - this, SLOT(slotSortOrderChanged(Qt::SortOrder,Qt::SortOrder))); + disconnect(m_model, &KItemModelBase::sortRoleChanged, + this, &KItemListHeaderWidget::slotSortRoleChanged); + disconnect(m_model, &KItemModelBase::sortOrderChanged, + this, &KItemListHeaderWidget::slotSortOrderChanged); } m_model = model; if (m_model) { - connect(m_model, SIGNAL(sortRoleChanged(QByteArray,QByteArray)), - this, SLOT(slotSortRoleChanged(QByteArray,QByteArray))); - connect(m_model, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)), - this, SLOT(slotSortOrderChanged(Qt::SortOrder,Qt::SortOrder))); + connect(m_model, &KItemModelBase::sortRoleChanged, + this, &KItemListHeaderWidget::slotSortRoleChanged); + connect(m_model, &KItemModelBase::sortOrderChanged, + this, &KItemListHeaderWidget::slotSortOrderChanged); } } @@ -181,13 +177,6 @@ void KItemListHeaderWidget::paint(QPainter* painter, const QStyleOptionGraphicsI ++orderIndex; } - // Draw background without roles - QStyleOption opt; - opt.init(widget); - opt.rect = QRect(x, 0, size().width() - x, size().height()); - opt.state |= QStyle::State_Horizontal; - style()->drawControl(QStyle::CE_HeaderEmptyArea, &opt, painter); - if (!m_movingRole.pixmap.isNull()) { Q_ASSERT(m_roleOperation == MoveRoleOperation); painter->drawPixmap(m_movingRole.x, 0, m_movingRole.pixmap); @@ -242,6 +231,13 @@ void KItemListHeaderWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) break; } + case ResizeRoleOperation: { + const QByteArray pressedRole = m_columns[m_pressedRoleIndex]; + const qreal currentWidth = m_columnWidths.value(pressedRole); + emit columnWidthChangeFinished(pressedRole, currentWidth); + break; + } + case MoveRoleOperation: m_movingRole.pixmap = QPixmap(); m_movingRole.x = 0; @@ -334,6 +330,23 @@ void KItemListHeaderWidget::mouseMoveEvent(QGraphicsSceneMouseEvent* event) } } +void KItemListHeaderWidget::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) +{ + QGraphicsItem::mouseDoubleClickEvent(event); + + const int roleIndex = roleIndexAt(event->pos()); + if (roleIndex >= 0 && isAboveRoleGrip(event->pos(), roleIndex)) { + const QByteArray role = m_columns.at(roleIndex); + + qreal previousWidth = columnWidth(role); + setColumnWidth(role, preferredColumnWidth(role)); + qreal currentWidth = columnWidth(role); + + emit columnWidthChanged(role, currentWidth, previousWidth); + emit columnWidthChangeFinished(role, currentWidth); + } +} + void KItemListHeaderWidget::hoverEnterEvent(QGraphicsSceneHoverEvent* event) { QGraphicsWidget::hoverEnterEvent(event); @@ -405,12 +418,21 @@ void KItemListHeaderWidget::paintRole(QPainter* painter, } option.rect = rect.toRect(); + bool paintBackgroundForEmptyArea = false; + if (m_columns.count() == 1) { option.position = QStyleOptionHeader::OnlyOneSection; } else if (orderIndex == 0) { option.position = QStyleOptionHeader::Beginning; } else if (orderIndex == m_columns.count() - 1) { - option.position = QStyleOptionHeader::End; + // We are just painting the header for the last column. Check if there + // is some empty space to the right which needs to be filled. + if (rect.right() < size().width()) { + option.position = QStyleOptionHeader::Middle; + paintBackgroundForEmptyArea = true; + } else { + option.position = QStyleOptionHeader::End; + } } else { option.position = QStyleOptionHeader::Middle; } @@ -420,6 +442,20 @@ void KItemListHeaderWidget::paintRole(QPainter* painter, option.text = m_model->roleDescription(role); style()->drawControl(QStyle::CE_Header, &option, painter, widget); + + if (paintBackgroundForEmptyArea) { + option.state = QStyle::State_None | QStyle::State_Raised | QStyle::State_Horizontal; + option.section = m_columns.count(); + option.sortIndicator = QStyleOptionHeader::None; + + qreal backgroundRectX = rect.x() + rect.width(); + QRectF backgroundRect(backgroundRectX, 0.0, size().width() - backgroundRectX, rect.height()); + option.rect = backgroundRect.toRect(); + option.position = QStyleOptionHeader::End; + option.text = QString(); + + style()->drawControl(QStyle::CE_Header, &option, painter, widget); + } } void KItemListHeaderWidget::updatePressedRoleIndex(const QPointF& pos) @@ -537,4 +573,3 @@ qreal KItemListHeaderWidget::roleXPosition(const QByteArray& role) const return -1; } -#include "kitemlistheaderwidget.moc"