-#include "kpixmapmodifier_p.h"
-
-#include <KIcon>
-#include <KIconEffect>
-#include <KIconLoader>
-#include <KLocale>
-#include <KStringHandler>
-#include <KDebug>
-
-#include <QFontMetricsF>
-#include <QGraphicsSceneResizeEvent>
-#include <QPainter>
-#include <QStyleOption>
-#include <QTextLayout>
-#include <QTextLine>
-
-//#define KFILEITEMLISTWIDGET_DEBUG
-
-KFileItemListWidget::KFileItemListWidget(QGraphicsItem* parent) :
- KItemListWidget(parent),
- m_isDir(false),
- m_dirtyLayout(true),
- m_dirtyContent(true),
- m_dirtyContentRoles(),
- m_layout(IconsLayout),
- m_pixmapPos(),
- m_pixmap(),
- m_scaledPixmapSize(),
- m_hoverPixmapRect(),
- m_hoverPixmap(),
- m_textPos(),
- m_text(),
- m_textBoundingRect(),
- m_sortedVisibleRoles(),
- m_expansionArea(),
- m_customTextColor(),
- m_additionalInfoTextColor(),
- m_overlay()
-{
- for (int i = 0; i < TextIdCount; ++i) {
- m_text[i].setTextFormat(Qt::PlainText);
- m_text[i].setPerformanceHint(QStaticText::AggressiveCaching);
- }
-}
-
-KFileItemListWidget::~KFileItemListWidget()
-{
-}
-
-void KFileItemListWidget::setLayout(Layout layout)
-{
- if (m_layout != layout) {
- m_layout = layout;
- m_dirtyLayout = true;
- update();
- }
-}
-
-KFileItemListWidget::Layout KFileItemListWidget::layout() const
-{
- return m_layout;
-}
-
-void KFileItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
-{
- KItemListWidget::paint(painter, option, widget);
-
- const_cast<KFileItemListWidget*>(this)->updateCache();
-
- // Draw expansion toggle '>' or 'V'
- if (m_isDir && !m_expansionArea.isEmpty()) {
- QStyleOption arrowOption;
- arrowOption.rect = m_expansionArea.toRect();
- const QStyle::PrimitiveElement arrow = data()["isExpanded"].toBool()
- ? QStyle::PE_IndicatorArrowDown : QStyle::PE_IndicatorArrowRight;
- style()->drawPrimitive(arrow, &arrowOption, painter);
- }
-
- const KItemListStyleOption& itemListStyleOption = styleOption();
- if (isHovered()) {
- // Blend the unhovered and hovered pixmap if the hovering
- // animation is ongoing
- if (hoverOpacity() < 1.0) {
- drawPixmap(painter, m_pixmap);
- }
-
- const qreal opacity = painter->opacity();
- painter->setOpacity(hoverOpacity() * opacity);
- drawPixmap(painter, m_hoverPixmap);
- painter->setOpacity(opacity);
- } else {
- drawPixmap(painter, m_pixmap);
- }
-
- painter->setFont(itemListStyleOption.font);
- painter->setPen(textColor());
- painter->drawStaticText(m_textPos[Name], m_text[Name]);
-
- painter->setPen(m_additionalInfoTextColor);
- painter->setFont(itemListStyleOption.font);
- for (int i = Name + 1; i < TextIdCount; ++i) {
- painter->drawStaticText(m_textPos[i], m_text[i]);
- }
-
-#ifdef KFILEITEMLISTWIDGET_DEBUG
- painter->setPen(Qt::red);
- painter->setBrush(Qt::NoBrush);
- painter->drawText(QPointF(0, itemListStyleOption.fontMetrics.height()), QString::number(index()));
- painter->drawRect(rect());
-#endif
-}
-
-QRectF KFileItemListWidget::iconBoundingRect() const
-{
- const_cast<KFileItemListWidget*>(this)->updateCache();
-
- QRectF bounds = m_hoverPixmapRect;
- const qreal margin = styleOption().margin;
- bounds.adjust(-margin, -margin, margin, margin);
- return bounds;
-}
-
-QRectF KFileItemListWidget::textBoundingRect() const
-{
- const_cast<KFileItemListWidget*>(this)->updateCache();
- return m_textBoundingRect;
-}
-
-QRectF KFileItemListWidget::expansionToggleRect() const
-{
- const_cast<KFileItemListWidget*>(this)->updateCache();
- return m_isDir ? m_expansionArea : QRectF();
-}
-
-void KFileItemListWidget::setTextColor(const QColor& color)
-{
- if (color != m_customTextColor) {
- m_customTextColor = color;
- updateAdditionalInfoTextColor();
- update();
- }
-}
-
-QColor KFileItemListWidget::textColor() const
-{
- return m_customTextColor.isValid() ? m_customTextColor : styleOption().palette.text().color();
-}