From d0f1df0cc6eb305fa0b76b41af65a422f42ba6dc Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Thu, 6 Oct 2011 23:02:43 +0200 Subject: [PATCH] Provide alternating background colors for the details-view --- src/kitemviews/kfileitemlistview.cpp | 2 ++ src/kitemviews/kitemlistview.cpp | 2 +- src/kitemviews/kitemlistwidget.cpp | 38 +++++++++++++++++++++++----- src/kitemviews/kitemlistwidget.h | 9 +++++-- 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/kitemviews/kfileitemlistview.cpp b/src/kitemviews/kfileitemlistview.cpp index d3de2c8c9..a77ede50a 100644 --- a/src/kitemviews/kfileitemlistview.cpp +++ b/src/kitemviews/kfileitemlistview.cpp @@ -245,6 +245,8 @@ void KFileItemListView::initializeItemListWidget(KItemListWidget* item) case DetailsLayout: fileItemListWidget->setLayout(KFileItemListWidget::DetailsLayout); break; default: Q_ASSERT(false); break; } + + fileItemListWidget->setAlternatingBackgroundColors(m_itemLayout == DetailsLayout); } bool KFileItemListView::itemSizeHintUpdateRequired(const QSet& changedRoles) const diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index 81cfc1eed..bafbb47a4 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -1394,8 +1394,8 @@ void KItemListView::updateWidgetProperties(KItemListWidget* widget, int index) const KItemListSelectionManager* selectionManager = m_controller->selectionManager(); widget->setCurrent(index == selectionManager->currentItem()); widget->setSelected(selectionManager->isSelected(index)); - widget->setHovered(false); + widget->setAlternatingBackgroundColors(false); widget->setIndex(index); widget->setData(m_model->data(index)); } diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp index 476031777..5aa6e1baa 100644 --- a/src/kitemviews/kitemlistwidget.cpp +++ b/src/kitemviews/kitemlistwidget.cpp @@ -38,6 +38,7 @@ KItemListWidget::KItemListWidget(QGraphicsItem* parent) : m_selected(false), m_current(false), m_hovered(false), + m_alternatingBackgroundColors(false), m_data(), m_visibleRoles(), m_visibleRolesSizes(), @@ -50,7 +51,7 @@ KItemListWidget::KItemListWidget(QGraphicsItem* parent) : KItemListWidget::~KItemListWidget() { - clearCache(); + clearHoverCache(); } void KItemListWidget::setIndex(int index) @@ -60,7 +61,7 @@ void KItemListWidget::setIndex(int index) m_hoverAnimation->stop(); m_hoverOpacity = 0; } - clearCache(); + clearHoverCache(); m_index = index; } @@ -74,7 +75,7 @@ int KItemListWidget::index() const void KItemListWidget::setData(const QHash& data, const QSet& roles) { - clearCache(); + clearHoverCache(); if (roles.isEmpty()) { m_data = data; dataChanged(m_data); @@ -97,6 +98,12 @@ void KItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* o painter->setRenderHint(QPainter::Antialiasing); + if (m_alternatingBackgroundColors && (m_index & 0x1)) { + const QColor backgroundColor = m_styleOption.palette.color(QPalette::AlternateBase); + const QRectF backgroundRect(0, 0, size().width(), size().height()); + painter->fillRect(backgroundRect, backgroundColor); + } + const QRect iconBounds = iconBoundingRect().toRect(); if (m_selected) { QStyleOptionViewItemV4 viewItemOption; @@ -168,7 +175,7 @@ QHash KItemListWidget::visibleRolesSizes() const void KItemListWidget::setStyleOption(const KItemListStyleOption& option) { const KItemListStyleOption previous = m_styleOption; - clearCache(); + clearHoverCache(); m_styleOption = option; styleOptionChanged(option, previous); @@ -239,6 +246,20 @@ bool KItemListWidget::isHovered() const return m_hovered; } +void KItemListWidget::setAlternatingBackgroundColors(bool enable) +{ + if (m_alternatingBackgroundColors != enable) { + m_alternatingBackgroundColors = enable; + alternatingBackgroundColorsChanged(enable); + update(); + } +} + +bool KItemListWidget::alternatingBackgroundColors() const +{ + return m_alternatingBackgroundColors; +} + bool KItemListWidget::contains(const QPointF& point) const { if (!QGraphicsWidget::contains(point)) { @@ -308,10 +329,15 @@ void KItemListWidget::hoveredChanged(bool hovered) Q_UNUSED(hovered); } +void KItemListWidget::alternatingBackgroundColorsChanged(bool enabled) +{ + Q_UNUSED(enabled); +} + void KItemListWidget::resizeEvent(QGraphicsSceneResizeEvent* event) { QGraphicsWidget::resizeEvent(event); - clearCache(); + clearHoverCache(); } qreal KItemListWidget::hoverOpacity() const @@ -325,7 +351,7 @@ void KItemListWidget::setHoverOpacity(qreal opacity) update(); } -void KItemListWidget::clearCache() +void KItemListWidget::clearHoverCache() { delete m_hoverCache; m_hoverCache = 0; diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h index 2229948a3..b1df7bff4 100644 --- a/src/kitemviews/kitemlistwidget.h +++ b/src/kitemviews/kitemlistwidget.h @@ -77,6 +77,9 @@ public: void setHovered(bool hovered); bool isHovered() const; + void setAlternatingBackgroundColors(bool enable); + bool alternatingBackgroundColors() const; + /** * @return True if \a point is inside KItemListWidget::hoverBoundingRect(), * KItemListWidget::textBoundingRect(), KItemListWidget::selectionToggleRect() @@ -117,7 +120,8 @@ protected: virtual void currentChanged(bool current); virtual void selectedChanged(bool selected); virtual void hoveredChanged(bool hovered); - virtual void resizeEvent(QGraphicsSceneResizeEvent* event); + virtual void alternatingBackgroundColorsChanged(bool enabled); + virtual void resizeEvent(QGraphicsSceneResizeEvent* event); /** * @return The current opacity of the hover-animation. When implementing a custom painting-code for a hover-state @@ -127,7 +131,7 @@ protected: private: void setHoverOpacity(qreal opacity); - void clearCache(); + void clearHoverCache(); void drawFocusIndicator(QPainter* painter); void drawTextBackground(QPainter* painter); @@ -138,6 +142,7 @@ private: bool m_selected; bool m_current; bool m_hovered; + bool m_alternatingBackgroundColors; QHash m_data; QList m_visibleRoles; QHash m_visibleRolesSizes; -- 2.47.3