diff options
| author | Peter Penz <[email protected]> | 2012-04-24 23:16:35 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2012-04-24 23:18:34 +0200 |
| commit | d9de39172033c28b8f9a7c1573130cf2124b4f7a (patch) | |
| tree | 8292181d95b92f9a5cb9544bd62d83ca8189c1a1 /src/kitemviews | |
| parent | ba2593247b7f11c68419bf1fc24cc5ddcaf8e69f (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.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" |
