┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2012-04-24 23:16:35 +0200
committerPeter Penz <[email protected]>2012-04-24 23:18:34 +0200
commitd9de39172033c28b8f9a7c1573130cf2124b4f7a (patch)
tree8292181d95b92f9a5cb9544bd62d83ca8189c1a1 /src/kitemviews
parentba2593247b7f11c68419bf1fc24cc5ddcaf8e69f (diff)
Provide additional default groups for the Places Panel
If Nepomuk is enabled, it is now possible to easily search for some most common queries by having additional groups.
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"