X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/a793e113215663cd5e5f31cdded4b1fe8e41ff1b..b1c9b5126d:/src/dolphincategorydrawer.cpp diff --git a/src/dolphincategorydrawer.cpp b/src/dolphincategorydrawer.cpp index 2a9642240..b06f97560 100644 --- a/src/dolphincategorydrawer.cpp +++ b/src/dolphincategorydrawer.cpp @@ -1,6 +1,6 @@ -/** +/* * This file is part of the KDE project - * Copyright (C) 2007 Rafael Fernández López + * Copyright (C) 2007 Rafael Fernández López * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -20,25 +20,28 @@ #include "dolphincategorydrawer.h" +#include + #include #include #include +#include +#include + +#ifdef HAVE_NEPOMUK +#include +#endif #include #include #include #include -#include -#ifdef HAVE_NEPOMUK -#include -#include -#include -#endif - #include "dolphinview.h" #include "dolphinmodel.h" +#define HORIZONTAL_HINT 3 + DolphinCategoryDrawer::DolphinCategoryDrawer() { } @@ -50,10 +53,12 @@ DolphinCategoryDrawer::~DolphinCategoryDrawer() void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, const QStyleOption &option, QPainter *painter) const { + Q_UNUSED(sortRole); + QRect starRect = option.rect; int iconSize = KIconLoader::global()->currentSize(KIconLoader::Small); - QVariant categoryVariant = index.model()->data(index, KCategorizedSortFilterProxyModel::CategoryRole); + QVariant categoryVariant = index.model()->data(index, KCategorizedSortFilterProxyModel::CategoryDisplayRole); if (!categoryVariant.isValid()) { @@ -79,37 +84,19 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, QStyleOptionButton opt; opt.rect = option.rect; + opt.rect.setLeft(opt.rect.left() + HORIZONTAL_HINT); + opt.rect.setRight(opt.rect.right() - HORIZONTAL_HINT); opt.palette = option.palette; opt.direction = option.direction; opt.text = category; - if (option.state & QStyle::State_Selected) - { - QColor selected = option.palette.color(QPalette::Highlight); - - QLinearGradient gradient(option.rect.topLeft(), - option.rect.bottomRight()); - gradient.setColorAt(option.direction == Qt::LeftToRight ? 0 - : 1, selected); - gradient.setColorAt(option.direction == Qt::LeftToRight ? 1 - : 0, Qt::transparent); - - painter->fillRect(option.rect, gradient); - } - else if (option.state & QStyle::State_MouseOver) - { - QColor hover = option.palette.color(QPalette::Highlight).light(); - hover.setAlpha(88); - - QLinearGradient gradient(option.rect.topLeft(), - option.rect.bottomRight()); - gradient.setColorAt(option.direction == Qt::LeftToRight ? 0 - : 1, hover); - gradient.setColorAt(option.direction == Qt::LeftToRight ? 1 - : 0, Qt::transparent); - - painter->fillRect(option.rect, gradient); - } + QStyleOptionViewItemV4 viewOptions; + viewOptions.rect = option.rect; + viewOptions.palette = option.palette; + viewOptions.direction = option.direction; + viewOptions.state = option.state; + viewOptions.viewItemPosition = QStyleOptionViewItemV4::OnlyOne; + QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &viewOptions, painter, 0); QFont painterFont = painter->font(); painterFont.setWeight(QFont::Bold); @@ -118,9 +105,9 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, QPainterPath path; path.addRect(option.rect.left(), - option.rect.bottom() - 2, + option.rect.bottom() - 1, option.rect.width(), - 2); + 1); QLinearGradient gradient(option.rect.topLeft(), option.rect.bottomRight()); @@ -134,15 +121,15 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, if (option.direction == Qt::LeftToRight) { - opt.rect.setLeft(opt.rect.left() + (iconSize / 4)); - starRect.setLeft(starRect.left() + (iconSize / 4)); - starRect.setRight(starRect.right() + (iconSize / 4)); + opt.rect.setLeft(opt.rect.left()); + starRect.setLeft(starRect.left()); + starRect.setRight(starRect.right()); } else { - opt.rect.setRight(opt.rect.width() - (iconSize / 4)); - starRect.setLeft(starRect.width() - iconSize); - starRect.setRight(starRect.width() - (iconSize / 4)); + opt.rect.setRight(opt.rect.width()); + starRect.setLeft(starRect.width()); + starRect.setRight(starRect.width()); } bool paintIcon = true; @@ -177,7 +164,7 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, } else { - icon = KIconLoader::global()->loadIcon("user", KIconLoader::NoGroup, option.fontMetrics.height()); + icon = KIconLoader::global()->loadIcon("user-identity", KIconLoader::NoGroup, option.fontMetrics.height()); } opt.rect.setTop(opt.rect.top() - icon.height()); @@ -211,80 +198,11 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, paintText = false; paintIcon = false; - starRect.setTop(option.rect.top() + (option.rect.height() / 2) - (iconSize / 2)); - starRect.setSize(QSize(iconSize, iconSize)); - - QPixmap pixmap = KIconLoader::global()->loadIcon("rating", KIconLoader::Small); - QPixmap smallPixmap = KIconLoader::global()->loadIcon("rating", KIconLoader::NoGroup, iconSize / 2); - QPixmap disabledPixmap = KIconLoader::global()->loadIcon("rating", KIconLoader::Small); - - QImage img = disabledPixmap.toImage(); - Blitz::grayscale(img); - disabledPixmap = QPixmap::fromImage(img); - - int rating = category.toInt(); - - for (int i = 0; i < rating - (rating % 2); i += 2) { - painter->drawPixmap(starRect, pixmap); - - if (option.direction == Qt::LeftToRight) - { - starRect.setLeft(starRect.left() + iconSize + (iconSize / 4) /* separator between stars */); - starRect.setRight(starRect.right() + iconSize + (iconSize / 4) /* separator between stars */); - } - else - { - starRect.setLeft(starRect.left() - iconSize - (iconSize / 4) /* separator between stars */); - starRect.setRight(starRect.right() - iconSize - (iconSize / 4) /* separator between stars */); - } - } - - if (rating && rating % 2) { - if (option.direction == Qt::RightToLeft) - { - starRect.setLeft(starRect.left() + (iconSize / 2) /* separator between stars */); - } - - starRect.setTop(option.rect.top() + (option.rect.height() / 2) - (iconSize / 4)); - starRect.setSize(QSize(iconSize / 2, iconSize / 2)); - painter->drawPixmap(starRect, smallPixmap); - starRect.setTop(opt.rect.top() + (option.rect.height() / 2) - (iconSize / 2)); - - if (option.direction == Qt::LeftToRight) - { - starRect.setLeft(starRect.left() + (iconSize / 2) + (iconSize / 4)); - starRect.setRight(starRect.right() + (iconSize / 2) + (iconSize / 4)); - } - else - { - starRect.setLeft(starRect.left() - (iconSize / 2) - (iconSize / 4)); - starRect.setRight(starRect.right() - (iconSize / 2) - (iconSize / 4)); - } - - if (option.direction == Qt::RightToLeft) - { - starRect.setLeft(starRect.left() - (iconSize / 2)); - starRect.setRight(starRect.right() - (iconSize / 2)); - } - - starRect.setSize(QSize(iconSize, iconSize)); - } - - for (int i = rating; i < 9; i += 2) { - painter->drawPixmap(starRect, disabledPixmap); - - if (option.direction == Qt::LeftToRight) - { - starRect.setLeft(starRect.left() + iconSize + (iconSize / 4)); - starRect.setRight(starRect.right() + iconSize + (iconSize / 4)); - } - else - { - starRect.setLeft(starRect.left() - iconSize - (iconSize / 4)); - starRect.setRight(starRect.right() - iconSize - (iconSize / 4)); - } - } - + painter->setLayoutDirection( option.direction ); + QRect ratingRect( option.rect ); + ratingRect.setTop(option.rect.top() + (option.rect.height() / 2) - (iconSize / 2)); + ratingRect.setHeight( iconSize ); + KRatingPainter::paintRating( painter, ratingRect, Qt::AlignLeft, category.toInt() ); break; } @@ -310,14 +228,14 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, if (paintText) { opt.rect.setTop(option.rect.top() + (iconSize / 4)); - opt.rect.setBottom(opt.rect.bottom() - 2); + opt.rect.setBottom(opt.rect.bottom() - 1); painter->setPen(color); QRect textRect = opt.rect; if (option.direction == Qt::RightToLeft) { - textRect.setWidth(textRect.width() - (paintIcon ? icon.width() + (iconSize / 2) + textRect.setWidth(textRect.width() - (paintIcon ? icon.width() + (iconSize / 4) : -(iconSize / 4))); } @@ -328,9 +246,23 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, painter->restore(); } -int DolphinCategoryDrawer::categoryHeight(const QStyleOption &option) const +int DolphinCategoryDrawer::categoryHeight(const QModelIndex &index, const QStyleOption &option) const { int iconSize = KIconLoader::global()->currentSize(KIconLoader::Small); + int heightWithoutIcon = option.fontMetrics.height() + (iconSize / 4) * 2 + 1; /* 1 pixel-width gradient */ + bool paintIcon; + + switch (index.column()) { + case KDirModel::Owner: + case KDirModel::Type: + paintIcon = true; + break; + default: + paintIcon = false; + } + + if (paintIcon) + return qMax(heightWithoutIcon, iconSize + (iconSize / 4) * 2 + 1) /* 1 pixel-width gradient */; - return qMax(option.fontMetrics.height() + (iconSize / 4) * 2 + 2, iconSize + (iconSize / 4) * 2 + 2) /* 2 gradient */; + return heightWithoutIcon; }