┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
Diffstat (limited to 'src/kitemviews')
-rw-r--r--src/kitemviews/kfileitemlistview.cpp6
-rw-r--r--src/kitemviews/kfileitemlistview.h1
-rw-r--r--src/kitemviews/kitemlistgroupheader.cpp31
-rw-r--r--src/kitemviews/kitemlistgroupheader.h9
-rw-r--r--src/kitemviews/kitemlistview.cpp2
-rw-r--r--src/kitemviews/kitemlistview.h2
-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.cpp3
-rw-r--r--src/kitemviews/kstandarditemmodel.cpp17
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 &current, const QByteArray &previous)
+void KStandardItemListGroupHeader::roleChanged(const QByteArray &current, 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 &current, 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"