]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/private/kitemlistheaderwidget.h
Fix issues if QT_NO_CAST_FROM_ASCII is defined
[dolphin.git] / src / kitemviews / private / kitemlistheaderwidget.h
index 6d0974f9798f782e3a766f4005c17e1d4e331b32..a522fa3a2806bda5640cf72d6eb91df1cd2e54cc 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,54 +26,56 @@ class DOLPHIN_EXPORT KItemListHeaderWidget : public QGraphicsWidget
     Q_OBJECT
 
 public:
-    KItemListHeaderWidget(QGraphicsWidget* parent = nullptr);
+    explicit KItemListHeaderWidget(QGraphicsWidget *parent = nullptr);
     ~KItemListHeaderWidget() override;
 
-    void setModel(KItemModelBasemodel);
-    KItemModelBasemodel() const;
+    void setModel(KItemModelBase *model);
+    KItemModelBase *model() const;
 
     void setAutomaticColumnResizing(bool automatic);
     bool automaticColumnResizing() const;
 
-    void setColumns(const QList<QByteArray>roles);
+    void setColumns(const QList<QByteArray> &roles);
     QList<QByteArray> columns() const;
 
-    void setColumnWidth(const QByteArrayrole, qreal width);
-    qreal columnWidth(const QByteArrayrole) const;
+    void setColumnWidth(const QByteArray &role, qreal width);
+    qreal columnWidth(const QByteArray &role) const;
 
     /**
      * Sets the column-width that is required to show the role unclipped.
      */
-    void setPreferredColumnWidth(const QByteArrayrole, qreal width);
-    qreal preferredColumnWidth(const QByteArrayrole) const;
+    void setPreferredColumnWidth(const QByteArray &role, qreal width);
+    qreal preferredColumnWidth(const QByteArray &role) const;
 
     void setOffset(qreal offset);
     qreal offset() const;
 
+    void setSidePadding(qreal width);
+    qreal sidePadding() const;
+
     qreal minimumColumnWidth() const;
 
-    void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override;
+    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).
      */
-    void columnWidthChanged(const QByteArray& role,
-                            qreal currentWidth,
-                            qreal previousWidth);
+    void columnWidthChanged(const QByteArray &role, qreal currentWidth, qreal previousWidth);
+
+    void sidePaddingChanged(qreal width);
 
     /**
      * Is emitted if the user has released the mouse button after adjusting the
      * width of a visible role.
      */
-    void columnWidthChangeFinished(const QByteArray& role,
-                                   qreal currentWidth);
+    void columnWidthChangeFinished(const QByteArray &role, qreal currentWidth);
 
     /**
      * Is emitted if the position of the column has been changed.
      */
-    void columnMoved(const QByteArrayrole, int currentIndex, int previousIndex);
+    void columnMoved(const QByteArray &role, int currentIndex, int previousIndex);
 
     /**
      * Is emitted if the user has changed the sort order by clicking on a
@@ -101,32 +91,37 @@ signals:
      * the current sort role. Note that no signal will be emitted if the
      * sort role of the model has been changed without user interaction.
      */
-    void sortRoleChanged(const QByteArray& current, const QByteArray& previous);
+    void sortRoleChanged(const QByteArray &current, const QByteArray &previous);
+
+    void columnUnHovered(int columnIndex);
+    void columnHovered(int columnIndex);
 
 protected:
-    void mousePressEvent(QGraphicsSceneMouseEventevent) override;
-    void mouseReleaseEvent(QGraphicsSceneMouseEventevent) override;
-    void mouseMoveEvent(QGraphicsSceneMouseEventevent) override;
-    void mouseDoubleClickEvent(QGraphicsSceneMouseEventevent) override;
-    void hoverEnterEvent(QGraphicsSceneHoverEventevent) override;
-    void hoverLeaveEvent(QGraphicsSceneHoverEventevent) override;
-    void hoverMoveEvent(QGraphicsSceneHoverEventevent) override;
-
-private slots:
-    void slotSortRoleChanged(const QByteArray& current, const QByteArray& previous);
+    void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
+    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
+    void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
+    void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
+    void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
+    void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
+    void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override;
+
+private Q_SLOTS:
+    void slotSortRoleChanged(const QByteArray &current, const QByteArray &previous);
     void slotSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous);
 
 private:
-    void paintRole(QPainter* painter,
-                   const QByteArray& role,
-                   const QRectF& rect,
-                   int orderIndex,
-                   QWidget* widget = nullptr) const;
+    enum PaddingGrip {
+        Leading,
+        Trailing,
+    };
+
+    void paintRole(QPainter *painter, const QByteArray &role, const QRectF &rect, int orderIndex, QWidget *widget = nullptr) const;
 
-    void updatePressedRoleIndex(const QPointF& pos);
-    void updateHoveredRoleIndex(const QPointF& pos);
-    int roleIndexAt(const QPointF& pos) const;
-    bool isAboveRoleGrip(const QPointF& pos, int roleIndex) const;
+    void updatePressedRoleIndex(const QPointF &pos);
+    void updateHoveredIndex(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
@@ -143,37 +138,31 @@ private:
     /**
      * @return x-position of the left border of the role \a role.
      */
-    qreal roleXPosition(const QByteArrayrole) const;
+    qreal roleXPosition(const QByteArray &role) const;
 
 private:
-    enum RoleOperation
-    {
-        NoRoleOperation,
-        ResizeRoleOperation,
-        MoveRoleOperation
-    };
+    enum RoleOperation { NoRoleOperation, ResizeRoleOperation, ResizePaddingColumnOperation, MoveRoleOperation };
 
     bool m_automaticColumnResizing;
-    KItemModelBasem_model;
+    KItemModelBase *m_model;
     qreal m_offset;
+    qreal m_sidePadding;
     QList<QByteArray> m_columns;
     QHash<QByteArray, qreal> m_columnWidths;
     QHash<QByteArray, qreal> m_preferredColumnWidths;
 
-    int m_hoveredRoleIndex;
+    int m_hoveredIndex;
     int m_pressedRoleIndex;
     RoleOperation m_roleOperation;
     QPointF m_pressedMousePos;
 
-    struct MovingRole
-    {
+    struct MovingRole {
         QPixmap pixmap;
         int x;
         int xDec;
         int index;
-    } m_movingRole;
+    };
+    MovingRole m_movingRole;
 };
 
 #endif
-
-