X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/eac436d0374d3be323c6ba36799d3cddc98301ea..76a46fd9094b17eb99e8a42cca8562fdc0b3814c:/src/kitemviews/kitemlistgroupheader.h diff --git a/src/kitemviews/kitemlistgroupheader.h b/src/kitemviews/kitemlistgroupheader.h index 081607eef..0e5c61f74 100644 --- a/src/kitemviews/kitemlistgroupheader.h +++ b/src/kitemviews/kitemlistgroupheader.h @@ -20,7 +20,8 @@ #ifndef KITEMLISTGROUPHEADER_H #define KITEMLISTGROUPHEADER_H -#include +#include "dolphin_export.h" +#include "kitemviews/kitemliststyleoption.h" #include #include @@ -28,13 +29,20 @@ class KItemListView; -class LIBDOLPHINPRIVATE_EXPORT KItemListGroupHeader : public QGraphicsWidget +/** + * @brief Base class for group headers. + * + * Draws a default header background. Derived classes must reimplement + * the method paint() and draw the role within the given roleBounds() with + * the color roleColor(). + */ +class DOLPHIN_EXPORT KItemListGroupHeader : public QGraphicsWidget { Q_OBJECT public: - KItemListGroupHeader(QGraphicsWidget* parent = 0); - virtual ~KItemListGroupHeader(); + explicit KItemListGroupHeader(QGraphicsWidget* parent = nullptr); + ~KItemListGroupHeader() override; void setRole(const QByteArray& role); QByteArray role() const; @@ -42,17 +50,80 @@ public: void setData(const QVariant& data); QVariant data() const; - virtual QSizeF sizeHint(Qt::SizeHint which = Qt::PreferredSize, const QSizeF& constraint = QSizeF()) const; - virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0); + void setStyleOption(const KItemListStyleOption& option); + const KItemListStyleOption& styleOption() const; + + /** + * Sets the scroll orientation that is used by the KItemListView. + * This allows the group header to use a modified look dependent + * on the orientation. + */ + void setScrollOrientation(Qt::Orientation orientation); + Qt::Orientation scrollOrientation() const; + + void setItemIndex(int index); + int itemIndex() const; + + void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override; protected: + virtual void paintRole(QPainter* painter, const QRectF& roleBounds, const QColor& color) = 0; + virtual void paintSeparator(QPainter* painter, const QColor& color) = 0; + + /** + * Is called after the role has been changed and allows the derived class + * to react on this change. + */ virtual void roleChanged(const QByteArray& current, const QByteArray& previous); + + /** + * Is called after the role has been changed and allows the derived class + * to react on this change. + */ virtual void dataChanged(const QVariant& current, const QVariant& previous); + /** + * Is called after the style option has been changed and allows the derived class + * to react on this change. + */ + virtual void styleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous); + + /** + * Is called after the scroll orientation has been changed and allows the derived class + * to react on this change. + */ + virtual void scrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous); + + /** + * Is called after the item index has been changed and allows the derived class to react on + * this change. + */ + virtual void itemIndexChanged(int current, int previous); + + void resizeEvent(QGraphicsSceneResizeEvent* event) override; + + virtual QPalette::ColorRole normalTextColorRole() const; + virtual QPalette::ColorRole normalBaseColorRole() const; + +private: + void updateCache(); + + static QColor mixedColor(const QColor& c1, const QColor& c2, int c1Percent = 50); + + QColor textColor() const; + QColor baseColor() const; + private: + bool m_dirtyCache; QByteArray m_role; QVariant m_data; + KItemListStyleOption m_styleOption; + Qt::Orientation m_scrollOrientation; + int m_itemIndex; + QColor m_separatorColor; + QColor m_roleColor; + QRectF m_roleBounds; }; #endif