- Use the widget style to draw the item background in the delegate.

- Enable alternating row colors in the view instead of drawing a divider line.

Reviewed by Chani.

svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=784857
This commit is contained in:
Fredrik Höglund 2008-03-12 17:14:15 +00:00
parent e702ebca9a
commit f17c8c6676
2 changed files with 27 additions and 37 deletions

View File

@ -65,6 +65,7 @@ KCategorizedItemsView::KCategorizedItemsView(QWidget * parent, Qt::WindowFlags f
comboFilters->setItemDelegate(new KCategorizedItemsViewFilterDelegate(this));
itemsView->viewport()->setAttribute(Qt::WA_Hover);
itemsView->setAlternatingRowColors(true);
QAction * find = KStandardAction::find(textSearch, SLOT(setFocus()), this);
addAction(find);

View File

@ -50,17 +50,9 @@ void KCategorizedItemsViewDelegate::paint(QPainter *painter,
getItemByProxyIndex(index);
if (!item) return;
// Preparing needed data for painting
int left = option.rect.left();
int top = option.rect.top();
int width = option.rect.width();
int height = option.rect.height();
QColor backgroundColor = (option.state.testFlag(QStyle::State_Selected))?
option.palette.color(QPalette::Highlight):option.palette.color(QPalette::Base);
// Base Background
painter->fillRect(option.rect, QBrush(backgroundColor));
QStyleOptionViewItemV4 opt(option);
QStyle *style = opt.widget ? opt.widget->style() : QApplication::style();
style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget);
switch (index.column()) {
case 0:
@ -75,13 +67,6 @@ void KCategorizedItemsViewDelegate::paint(QPainter *painter,
default:
kDebug() << "unexpected column";
}
// Dividing line
backgroundColor = option.palette.color(QPalette::Highlight);
backgroundColor.setAlpha(100);
painter->setPen(backgroundColor);
painter->drawLine(left, top + height - 1, left + width, top + height - 1);
}
void KCategorizedItemsViewDelegate::paintColMain(QPainter *painter,
@ -94,8 +79,6 @@ void KCategorizedItemsViewDelegate::paintColMain(QPainter *painter,
bool leftToRight = (painter->layoutDirection() == Qt::LeftToRight);
QIcon::Mode iconMode = QIcon::Normal;
QColor backgroundColor = (option.state.testFlag(QStyle::State_Selected))?
option.palette.color(QPalette::Highlight):option.palette.color(QPalette::Base);
QColor foregroundColor = (option.state.testFlag(QStyle::State_Selected))?
option.palette.color(QPalette::HighlightedText):option.palette.color(QPalette::Text);
@ -106,6 +89,11 @@ void KCategorizedItemsViewDelegate::paintColMain(QPainter *painter,
local_option_title.font.setBold(true);
local_option_title.font.setPointSize(local_option_title.font.pointSize() + 2);
QPixmap pixmap(option.rect.size());
pixmap.fill(Qt::transparent);
QPainter p(&pixmap);
p.translate(-option.rect.topLeft());
QLinearGradient gradient;
QString title = item->name();
@ -116,22 +104,22 @@ void KCategorizedItemsViewDelegate::paintColMain(QPainter *painter,
// Text
int textInner = 2 * UNIVERSAL_PADDING + MAIN_ICON_SIZE;
painter->setPen(foregroundColor);
painter->setFont(local_option_title.font);
painter->drawText(
p.setPen(foregroundColor);
p.setFont(local_option_title.font);
p.drawText(
left + (leftToRight ? textInner : 0),
top + UNIVERSAL_PADDING,
width - textInner, MAIN_ICON_SIZE / 2,
Qt::AlignBottom | Qt::AlignLeft, title);
painter->setFont(local_option_normal.font);
painter->drawText(
p.setFont(local_option_normal.font);
p.drawText(
left + (leftToRight ? textInner : 0),
top + UNIVERSAL_PADDING + MAIN_ICON_SIZE / 2,
width - textInner, MAIN_ICON_SIZE / 2,
Qt::AlignTop | Qt::AlignLeft, description);
// Main icon
item->icon().paint(painter,
item->icon().paint(&p,
leftToRight ? left + UNIVERSAL_PADDING : left + width - UNIVERSAL_PADDING - MAIN_ICON_SIZE,
top + UNIVERSAL_PADDING,
MAIN_ICON_SIZE, MAIN_ICON_SIZE, Qt::AlignCenter, iconMode);
@ -147,21 +135,18 @@ void KCategorizedItemsViewDelegate::paintColMain(QPainter *painter,
if (leftToRight) {
gradient = QLinearGradient(left + width - UNIVERSAL_PADDING - FADE_LENGTH, 0,
left + width - UNIVERSAL_PADDING, 0);
gradient.setColorAt(1, backgroundColor);
backgroundColor.setAlpha(0);
gradient.setColorAt(0, backgroundColor);
gradient.setColorAt(0, Qt::white);
gradient.setColorAt(1, Qt::transparent);
} else {
gradient = QLinearGradient(left + UNIVERSAL_PADDING, 0,
left + UNIVERSAL_PADDING + FADE_LENGTH, 0);
gradient.setColorAt(0, backgroundColor);
backgroundColor.setAlpha(0);
gradient.setColorAt(1, backgroundColor);
gradient.setColorAt(0, Qt::transparent);
gradient.setColorAt(1, Qt::white);
}
QRect paintRect = option.rect;
painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
painter->fillRect(paintRect, gradient);
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
p.fillRect(paintRect, gradient);
if (leftToRight) {
gradient.setStart(left + width
@ -175,13 +160,14 @@ void KCategorizedItemsViewDelegate::paintColMain(QPainter *painter,
+ emblemCount * (UNIVERSAL_PADDING + EMBLEM_ICON_SIZE) + FADE_LENGTH, 0);
}
paintRect.setHeight(UNIVERSAL_PADDING + MAIN_ICON_SIZE / 2);
painter->fillRect(paintRect, gradient);
p.fillRect(paintRect, gradient);
// Emblems icons
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
int emblemLeft = leftToRight ? (left + width - EMBLEM_ICON_SIZE) : left; // - FAV_ICON_SIZE - 2 * UNIVERSAL_PADDING
foreach (emblem, m_parent->m_emblems) {
if (item->passesFiltering(emblem.first)) {
emblem.second->paint(painter,
emblem.second->paint(&p,
emblemLeft, top + UNIVERSAL_PADDING,
EMBLEM_ICON_SIZE, EMBLEM_ICON_SIZE, Qt::AlignCenter, iconMode);
if (leftToRight) {
@ -191,6 +177,9 @@ void KCategorizedItemsViewDelegate::paintColMain(QPainter *painter,
}
}
}
p.end();
painter->drawPixmap(option.rect.topLeft(), pixmap);
}
void KCategorizedItemsViewDelegate::paintColFav(QPainter *painter,