]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/private/kitemlistheaderwidget.h
KItemListViewLayouter: handle grid view layouts in RtL properly
[dolphin.git] / src / kitemviews / private / kitemlistheaderwidget.h
index 6d0974f9798f782e3a766f4005c17e1d4e331b32..58f0dc98ee4ed24f3f240d44bdc06f9795d45fdb 100644 (file)
@@ -1,26 +1,14 @@
-/***************************************************************************
- *   Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com>             *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
- ***************************************************************************/
+/*
+ * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
 
 #ifndef KITEMLISTHEADERWIDGET_H
 #define KITEMLISTHEADERWIDGET_H
 
 #include "dolphin_export.h"
+
 #include <QGraphicsWidget>
 #include <QHash>
 #include <QList>
@@ -38,7 +26,7 @@ class DOLPHIN_EXPORT KItemListHeaderWidget : public QGraphicsWidget
     Q_OBJECT
 
 public:
-    KItemListHeaderWidget(QGraphicsWidget* parent = nullptr);
+    explicit KItemListHeaderWidget(QGraphicsWidget* parent = nullptr);
     ~KItemListHeaderWidget() override;
 
     void setModel(KItemModelBase* model);
@@ -62,11 +50,14 @@ public:
     void setOffset(qreal offset);
     qreal offset() const;
 
+    void setLeadingPadding(qreal width);
+    qreal leadingPadding() const;
+
     qreal minimumColumnWidth() const;
 
     void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override;
 
-signals:
+Q_SIGNALS:
     /**
      * Is emitted if the width of a visible role has been adjusted by the user with the mouse
      * (no signal is emitted if KItemListHeader::setVisibleRoleWidth() is invoked).
@@ -75,6 +66,8 @@ signals:
                             qreal currentWidth,
                             qreal previousWidth);
 
+    void leadingPaddingChanged(qreal width);
+
     /**
      * Is emitted if the user has released the mouse button after adjusting the
      * width of a visible role.
@@ -112,11 +105,18 @@ protected:
     void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override;
     void hoverMoveEvent(QGraphicsSceneHoverEvent* event) override;
 
-private slots:
+private Q_SLOTS:
     void slotSortRoleChanged(const QByteArray& current, const QByteArray& previous);
     void slotSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous);
 
 private:
+
+    enum PaddingGrip
+    {
+        Leading,
+        Trailing,
+    };
+
     void paintRole(QPainter* painter,
                    const QByteArray& role,
                    const QRectF& rect,
@@ -127,6 +127,7 @@ private:
     void updateHoveredRoleIndex(const QPointF& pos);
     int roleIndexAt(const QPointF& pos) const;
     bool isAboveRoleGrip(const QPointF& pos, int roleIndex) const;
+    bool isAbovePaddingGrip(const QPointF& pos, PaddingGrip paddingGrip) const;
 
     /**
      * Creates a pixmap of the role with the index \a roleIndex that is shown
@@ -150,12 +151,14 @@ private:
     {
         NoRoleOperation,
         ResizeRoleOperation,
+        ResizeLeadingColumnOperation,
         MoveRoleOperation
     };
 
     bool m_automaticColumnResizing;
     KItemModelBase* m_model;
     qreal m_offset;
+    qreal m_leadingPadding;
     QList<QByteArray> m_columns;
     QHash<QByteArray, qreal> m_columnWidths;
     QHash<QByteArray, qreal> m_preferredColumnWidths;