diff options
Diffstat (limited to 'src/kitemviews')
| -rw-r--r-- | src/kitemviews/kfileitemlistview.cpp | 6 | ||||
| -rw-r--r-- | src/kitemviews/kfileitemlistview.h | 1 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistgroupheader.cpp | 31 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistgroupheader.h | 9 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistview.cpp | 2 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistview.h | 2 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemlistgroupheader.cpp (renamed from src/kitemviews/kfileitemlistgroupheader.cpp) | 46 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemlistgroupheader.h (renamed from src/kitemviews/kfileitemlistgroupheader.h) | 12 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemlistview.cpp | 3 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemmodel.cpp | 17 |
10 files changed, 68 insertions, 61 deletions
diff --git a/src/kitemviews/kfileitemlistview.cpp b/src/kitemviews/kfileitemlistview.cpp index 7bcc781fa..14547fc7b 100644 --- a/src/kitemviews/kfileitemlistview.cpp +++ b/src/kitemviews/kfileitemlistview.cpp @@ -19,7 +19,6 @@ #include "kfileitemlistview.h" -#include "kfileitemlistgroupheader.h" #include "kfileitemmodelrolesupdater.h" #include "kfileitemlistwidget.h" #include "kfileitemmodel.h" @@ -190,11 +189,6 @@ KItemListWidgetCreatorBase* KFileItemListView::defaultWidgetCreator() const return new KItemListWidgetCreator<KFileItemListWidget>(); } -KItemListGroupHeaderCreatorBase* KFileItemListView::defaultGroupHeaderCreator() const -{ - return new KItemListGroupHeaderCreator<KFileItemListGroupHeader>(); -} - void KFileItemListView::onPreviewsShownChanged(bool shown) { Q_UNUSED(shown); diff --git a/src/kitemviews/kfileitemlistview.h b/src/kitemviews/kfileitemlistview.h index c8a3385fd..d795c96b5 100644 --- a/src/kitemviews/kfileitemlistview.h +++ b/src/kitemviews/kfileitemlistview.h @@ -77,7 +77,6 @@ public: protected: virtual KItemListWidgetCreatorBase* defaultWidgetCreator() const; - virtual KItemListGroupHeaderCreatorBase* defaultGroupHeaderCreator() const; virtual void onPreviewsShownChanged(bool shown); virtual void onItemLayoutChanged(ItemLayout current, ItemLayout previous); virtual void onModelChanged(KItemModelBase* current, KItemModelBase* previous); diff --git a/src/kitemviews/kitemlistgroupheader.cpp b/src/kitemviews/kitemlistgroupheader.cpp index bc68cd562..576d20b88 100644 --- a/src/kitemviews/kitemlistgroupheader.cpp +++ b/src/kitemviews/kitemlistgroupheader.cpp @@ -20,7 +20,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ -#include "kitemlistgroupheader.h" +#include "kstandarditemlistgroupheader.h" #include "kitemlistview.h" @@ -37,7 +37,7 @@ KItemListGroupHeader::KItemListGroupHeader(QGraphicsWidget* parent) : m_styleOption(), m_scrollOrientation(Qt::Vertical), m_itemIndex(-1), - m_lineColor(), + m_separatorColor(), m_roleColor(), m_roleBounds() { @@ -124,6 +124,7 @@ Qt::Orientation KItemListGroupHeader::scrollOrientation() const void KItemListGroupHeader::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { + Q_UNUSED(painter); Q_UNUSED(option); Q_UNUSED(widget); @@ -131,28 +132,8 @@ void KItemListGroupHeader::paint(QPainter* painter, const QStyleOptionGraphicsIt updateCache(); } - if (m_itemIndex == 0) { - // No top- or left-line should be drawn for the first group-header - return; - } - - painter->setPen(m_lineColor); - - if (m_scrollOrientation == Qt::Horizontal) { - painter->drawLine(0, 0, 0, size().height() - 1); - } else { - painter->drawLine(0, 0, size().width() - 1, 0); - } -} - -QRectF KItemListGroupHeader::roleBounds() const -{ - return m_roleBounds; -} - -QColor KItemListGroupHeader::roleColor() const -{ - return m_roleColor; + paintSeparator(painter, m_separatorColor); + paintRole(painter, m_roleBounds, m_roleColor); } void KItemListGroupHeader::roleChanged(const QByteArray& current, const QByteArray& previous) @@ -201,7 +182,7 @@ void KItemListGroupHeader::updateCache() // performance reasons. const QColor c1 = m_styleOption.palette.text().color(); const QColor c2 = m_styleOption.palette.base().color(); - m_lineColor = mixedColor(c1, c2, 10); + m_separatorColor = mixedColor(c1, c2, 10); m_roleColor = mixedColor(c1, c2, 70); const int padding = qMax(1, m_styleOption.padding); diff --git a/src/kitemviews/kitemlistgroupheader.h b/src/kitemviews/kitemlistgroupheader.h index c996a4870..e19ab4871 100644 --- a/src/kitemviews/kitemlistgroupheader.h +++ b/src/kitemviews/kitemlistgroupheader.h @@ -68,11 +68,8 @@ public: virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0); protected: - /** @return Bounding rectangle where the role should be drawn into. */ - QRectF roleBounds() const; - - /** @return Primary color that should be used for drawing the role. */ - QColor roleColor() const; + 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 @@ -120,7 +117,7 @@ private: Qt::Orientation m_scrollOrientation; int m_itemIndex; - QColor m_lineColor; + QColor m_separatorColor; QColor m_roleColor; QRectF m_roleBounds; }; diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index 6d2d98e93..8ecd1e212 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -1850,7 +1850,7 @@ void KItemListView::updateGroupHeaderForWidget(KItemListWidget* widget) } const QList<QPair<int, QVariant> > groups = model()->groups(); - if (groups.isEmpty()) { + if (groups.isEmpty() || !groupHeaderCreator()) { return; } diff --git a/src/kitemviews/kitemlistview.h b/src/kitemviews/kitemlistview.h index 3c47e95c6..dd67b941b 100644 --- a/src/kitemviews/kitemlistview.h +++ b/src/kitemviews/kitemlistview.h @@ -25,7 +25,7 @@ #include <libdolphin_export.h> -#include <kitemviews/kitemlistgroupheader.h> +#include <kitemviews/kstandarditemlistgroupheader.h> #include <kitemviews/kitemliststyleoption.h> #include <kitemviews/kitemlistwidget.h> #include <kitemviews/kitemmodelbase.h> diff --git a/src/kitemviews/kfileitemlistgroupheader.cpp b/src/kitemviews/kstandarditemlistgroupheader.cpp index 0c940ed28..3a5ddd944 100644 --- a/src/kitemviews/kfileitemlistgroupheader.cpp +++ b/src/kitemviews/kstandarditemlistgroupheader.cpp @@ -20,12 +20,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ -#include "kfileitemlistgroupheader.h" +#include "kstandarditemlistgroupheader.h" #include <kratingpainter.h> #include <QPainter> -KFileItemListGroupHeader::KFileItemListGroupHeader(QGraphicsWidget* parent) : +KStandardItemListGroupHeader::KStandardItemListGroupHeader(QGraphicsWidget* parent) : KItemListGroupHeader(parent), m_dirtyCache(true), m_text(), @@ -35,47 +35,65 @@ KFileItemListGroupHeader::KFileItemListGroupHeader(QGraphicsWidget* parent) : m_text.setPerformanceHint(QStaticText::AggressiveCaching); } -KFileItemListGroupHeader::~KFileItemListGroupHeader() +KStandardItemListGroupHeader::~KStandardItemListGroupHeader() { } -void KFileItemListGroupHeader::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) +void KStandardItemListGroupHeader::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { - KItemListGroupHeader::paint(painter, option, widget); - if (m_dirtyCache) { updateCache(); } + KItemListGroupHeader::paint(painter, option, widget); +} +void KStandardItemListGroupHeader::paintRole(QPainter* painter, const QRectF& roleBounds, const QColor& color) +{ if (m_pixmap.isNull()) { - painter->setPen(roleColor()); - painter->drawStaticText(roleBounds().topLeft(), m_text); + painter->setPen(color); + painter->drawStaticText(roleBounds.topLeft(), m_text); + } else { + painter->drawPixmap(roleBounds.topLeft(), m_pixmap); + } +} + +void KStandardItemListGroupHeader::paintSeparator(QPainter* painter, const QColor& color) +{ + if (itemIndex() == 0) { + // No top- or left-line should be drawn for the first group-header + return; + } + + painter->setPen(color); + + if (scrollOrientation() == Qt::Horizontal) { + painter->drawLine(0, 0, 0, size().height() - 1); } else { - painter->drawPixmap(roleBounds().topLeft(), m_pixmap); + painter->drawLine(0, 0, size().width() - 1, 0); } } -void KFileItemListGroupHeader::roleChanged(const QByteArray ¤t, const QByteArray &previous) +void KStandardItemListGroupHeader::roleChanged(const QByteArray ¤t, const QByteArray &previous) { Q_UNUSED(current); Q_UNUSED(previous); m_dirtyCache = true; } -void KFileItemListGroupHeader::dataChanged(const QVariant& current, const QVariant& previous) +void KStandardItemListGroupHeader::dataChanged(const QVariant& current, const QVariant& previous) { Q_UNUSED(current); Q_UNUSED(previous); m_dirtyCache = true; } -void KFileItemListGroupHeader::resizeEvent(QGraphicsSceneResizeEvent* event) +void KStandardItemListGroupHeader::resizeEvent(QGraphicsSceneResizeEvent* event) { QGraphicsWidget::resizeEvent(event); m_dirtyCache = true; } -void KFileItemListGroupHeader::updateCache() +void KStandardItemListGroupHeader::updateCache() { Q_ASSERT(m_dirtyCache); m_dirtyCache = false; @@ -104,4 +122,4 @@ void KFileItemListGroupHeader::updateCache() } } -#include "kfileitemlistgroupheader.moc" +#include "kstandarditemlistgroupheader.moc" diff --git a/src/kitemviews/kfileitemlistgroupheader.h b/src/kitemviews/kstandarditemlistgroupheader.h index 41a1123ff..26158d6ba 100644 --- a/src/kitemviews/kfileitemlistgroupheader.h +++ b/src/kitemviews/kstandarditemlistgroupheader.h @@ -17,8 +17,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ -#ifndef KFILEITEMLISTGROUPHEADER_H -#define KFILEITEMLISTGROUPHEADER_H +#ifndef KSTANDARDITEMLISTGROUPHEADER_H +#define KSTANDARDITEMLISTGROUPHEADER_H #include <libdolphin_export.h> @@ -27,17 +27,19 @@ #include <QPixmap> #include <QStaticText> -class LIBDOLPHINPRIVATE_EXPORT KFileItemListGroupHeader : public KItemListGroupHeader +class LIBDOLPHINPRIVATE_EXPORT KStandardItemListGroupHeader : public KItemListGroupHeader { Q_OBJECT public: - KFileItemListGroupHeader(QGraphicsWidget* parent = 0); - virtual ~KFileItemListGroupHeader(); + KStandardItemListGroupHeader(QGraphicsWidget* parent = 0); + virtual ~KStandardItemListGroupHeader(); virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0); protected: + virtual void paintRole(QPainter* painter, const QRectF& roleBounds, const QColor& color); + virtual void paintSeparator(QPainter* painter, const QColor& color); virtual void roleChanged(const QByteArray ¤t, const QByteArray &previous); virtual void dataChanged(const QVariant& current, const QVariant& previous); virtual void resizeEvent(QGraphicsSceneResizeEvent* event); diff --git a/src/kitemviews/kstandarditemlistview.cpp b/src/kitemviews/kstandarditemlistview.cpp index bd5da9eb0..f4d05dcf6 100644 --- a/src/kitemviews/kstandarditemlistview.cpp +++ b/src/kitemviews/kstandarditemlistview.cpp @@ -22,6 +22,7 @@ #include <KDebug> #include <KIconLoader> #include "kstandarditemlistwidget.h" +#include "kstandarditemlistgroupheader.h" KStandardItemListView::KStandardItemListView(QGraphicsWidget* parent) : KItemListView(parent), @@ -82,7 +83,7 @@ KItemListWidgetCreatorBase* KStandardItemListView::defaultWidgetCreator() const KItemListGroupHeaderCreatorBase* KStandardItemListView::defaultGroupHeaderCreator() const { - return 0; // TODO: new KItemListGroupHeaderCreator<KStandardItemListGroupHeader>() + return new KItemListGroupHeaderCreator<KStandardItemListGroupHeader>(); } void KStandardItemListView::initializeItemListWidget(KItemListWidget* item) diff --git a/src/kitemviews/kstandarditemmodel.cpp b/src/kitemviews/kstandarditemmodel.cpp index 86ef9563b..897267df6 100644 --- a/src/kitemviews/kstandarditemmodel.cpp +++ b/src/kitemviews/kstandarditemmodel.cpp @@ -123,7 +123,22 @@ QString KStandardItemModel::roleDescription(const QByteArray& role) const QList<QPair<int, QVariant> > KStandardItemModel::groups() const { - return QList<QPair<int, QVariant> >(); + QList<QPair<int, QVariant> > groups; + + const QByteArray role = sortRole(); + bool isFirstGroupValue = true; + QString groupValue; + const int maxIndex = count() - 1; + for (int i = 0; i <= maxIndex; ++i) { + const QString newGroupValue = m_items.at(i)->dataValue(role).toString(); + if (newGroupValue != groupValue || isFirstGroupValue) { + groupValue = newGroupValue; + groups.append(QPair<int, QVariant>(i, newGroupValue)); + isFirstGroupValue = false; + } + } + + return groups; } #include "kstandarditemmodel.moc" |
