]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/private/kitemlistheaderwidget.cpp
port to KIO::createDefaultJobUiDelegate
[dolphin.git] / src / kitemviews / private / kitemlistheaderwidget.cpp
index 8b39c25fe208289a7bd3e083c07d535fb024d463..9f4f868d0dd6333350734a5a3a98c9e5266e2799 100644 (file)
@@ -18,7 +18,7 @@ KItemListHeaderWidget::KItemListHeaderWidget(QGraphicsWidget* parent) :
     m_automaticColumnResizing(true),
     m_model(nullptr),
     m_offset(0),
-    m_leadingPadding(0),
+    m_sidePadding(0),
     m_columns(),
     m_columnWidths(),
     m_preferredColumnWidths(),
@@ -33,6 +33,8 @@ KItemListHeaderWidget::KItemListHeaderWidget(QGraphicsWidget* parent) :
     m_movingRole.index = -1;
 
     setAcceptHoverEvents(true);
+    // TODO update when font changes at runtime
+    setFont(QApplication::font("QHeaderView"));
 }
 
 KItemListHeaderWidget::~KItemListHeaderWidget()
@@ -135,18 +137,18 @@ qreal KItemListHeaderWidget::offset() const
     return m_offset;
 }
 
-void KItemListHeaderWidget::setLeadingPadding(qreal width)
+void KItemListHeaderWidget::setSidePadding(qreal width)
 {
-    if (m_leadingPadding != width) {
-        m_leadingPadding = width;
-        leadingPaddingChanged(width);
+    if (m_sidePadding != width) {
+        m_sidePadding = width;
+        sidePaddingChanged(width);
         update();
     }
 }
 
-qreal KItemListHeaderWidget::leadingPadding() const
+qreal KItemListHeaderWidget::sidePadding() const
 {
-    return m_leadingPadding;
+    return m_sidePadding;
 }
 
 qreal KItemListHeaderWidget::minimumColumnWidth() const
@@ -168,7 +170,7 @@ void KItemListHeaderWidget::paint(QPainter* painter, const QStyleOptionGraphicsI
     painter->setFont(font());
     painter->setPen(palette().text().color());
 
-    qreal x = -m_offset + m_leadingPadding;
+    qreal x = -m_offset + m_sidePadding;
     int orderIndex = 0;
     for (const QByteArray& role : qAsConst(m_columns)) {
         const qreal roleWidth = m_columnWidths.value(role);
@@ -189,7 +191,7 @@ void KItemListHeaderWidget::mousePressEvent(QGraphicsSceneMouseEvent* event)
     if (event->button() & Qt::LeftButton) {
         m_pressedMousePos = event->pos();
         if (isAbovePaddingGrip(m_pressedMousePos, PaddingGrip::Leading)) {
-            m_roleOperation = ResizeLeadingColumnOperation;
+            m_roleOperation = ResizePaddingColumnOperation;
         } else {
             updatePressedRoleIndex(event->pos());
             m_roleOperation = isAboveRoleGrip(m_pressedMousePos, m_pressedRoleIndex) ?
@@ -282,7 +284,7 @@ void KItemListHeaderWidget::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
             } else {
                 m_movingRole.pixmap = createRolePixmap(roleIndex);
 
-                qreal roleX = -m_offset + m_leadingPadding;
+                qreal roleX = -m_offset + m_sidePadding;
                 for (int i = 0; i < roleIndex; ++i) {
                     const QByteArray role = m_columns[i];
                     roleX += m_columnWidths.value(role);
@@ -310,16 +312,16 @@ void KItemListHeaderWidget::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
         break;
     }
 
-    case ResizeLeadingColumnOperation: {
-        qreal currentWidth = m_leadingPadding;
+    case ResizePaddingColumnOperation: {
+        qreal currentWidth = m_sidePadding;
         currentWidth += event->pos().x() - event->lastPos().x();
         currentWidth = qMax(0.0, currentWidth);
 
-        m_leadingPadding = currentWidth;
+        m_sidePadding = currentWidth;
 
         update();
 
-        Q_EMIT leadingPaddingChanged(currentWidth);
+        Q_EMIT sidePaddingChanged(currentWidth);
 
         break;
     }
@@ -417,9 +419,17 @@ void KItemListHeaderWidget::paintRole(QPainter* painter,
                                       int orderIndex,
                                       QWidget* widget) const
 {
+    const auto direction = widget ? widget->layoutDirection() : qApp->layoutDirection();
+
     // The following code is based on the code from QHeaderView::paintSection().
     // SPDX-FileCopyrightText: 2011 Nokia Corporation and/or its subsidiary(-ies).
     QStyleOptionHeader option;
+    option.direction = direction;
+    option.textAlignment =
+        direction == Qt::LeftToRight
+            ? Qt::AlignLeft
+            : Qt::AlignRight;
+
     option.section = orderIndex;
     option.state = QStyle::State_None | QStyle::State_Raised | QStyle::State_Horizontal;
     if (isEnabled()) {
@@ -504,7 +514,7 @@ int KItemListHeaderWidget::roleIndexAt(const QPointF& pos) const
 {
     int index = -1;
 
-    qreal x = -m_offset + m_leadingPadding;
+    qreal x = -m_offset + m_sidePadding;
     for (const QByteArray& role : qAsConst(m_columns)) {
         ++index;
         x += m_columnWidths.value(role);
@@ -518,7 +528,7 @@ int KItemListHeaderWidget::roleIndexAt(const QPointF& pos) const
 
 bool KItemListHeaderWidget::isAboveRoleGrip(const QPointF& pos, int roleIndex) const
 {
-    qreal x = -m_offset + m_leadingPadding;
+    qreal x = -m_offset + m_sidePadding;
     for (int i = 0; i <= roleIndex; ++i) {
         const QByteArray role = m_columns[i];
         x += m_columnWidths.value(role);
@@ -530,7 +540,7 @@ bool KItemListHeaderWidget::isAboveRoleGrip(const QPointF& pos, int roleIndex) c
 
 bool KItemListHeaderWidget::isAbovePaddingGrip(const QPointF& pos, PaddingGrip paddingGrip) const
 {
-    const qreal lx = -m_offset + m_leadingPadding;
+    const qreal lx = -m_offset + m_sidePadding;
     const int grip = style()->pixelMetric(QStyle::PM_HeaderGripMargin);
 
     switch (paddingGrip) {
@@ -580,7 +590,7 @@ int KItemListHeaderWidget::targetOfMovingRole() const
     const int movingRight = movingLeft + movingWidth - 1;
 
     int targetIndex = 0;
-    qreal targetLeft = -m_offset + m_leadingPadding;
+    qreal targetLeft = -m_offset + m_sidePadding;
     while (targetIndex < m_columns.count()) {
         const QByteArray role = m_columns[targetIndex];
         const qreal targetWidth = m_columnWidths.value(role);
@@ -606,7 +616,7 @@ int KItemListHeaderWidget::targetOfMovingRole() const
 
 qreal KItemListHeaderWidget::roleXPosition(const QByteArray& role) const
 {
-    qreal x = -m_offset + m_leadingPadding;
+    qreal x = -m_offset + m_sidePadding;
     for (const QByteArray& visibleRole : qAsConst(m_columns)) {
         if (visibleRole == role) {
             return x;