From: Peter Penz Date: Sat, 12 Dec 2009 14:16:02 +0000 (+0000) Subject: I guess most developers use the Details View with very small icons (16 x 16) for... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/0ca68f6a562de0ccd671715ea6e98ee2504dbb6b I guess most developers use the Details View with very small icons (16 x 16) for viewing their versioned code (at least I do ;-)). In this case the version control emblems are very small and it is easy to miss that there are locally changed files or that an update is required (Nuno and I tried different sizes, but for 16 x 16 icons there is really less room for variants). So the text color gets tinted a little bit now to notice the difference... svn path=/trunk/KDE/kdebase/apps/; revision=1061618 --- diff --git a/src/dolphinfileitemdelegate.cpp b/src/dolphinfileitemdelegate.cpp index 1c920b853..87ea774f8 100644 --- a/src/dolphinfileitemdelegate.cpp +++ b/src/dolphinfileitemdelegate.cpp @@ -51,27 +51,30 @@ void DolphinFileItemDelegate::paint(QPainter* painter, const DolphinModel* dolphinModel = static_cast(proxyModel->sourceModel()); const bool isNameColumn = (index.column() == KDirModel::Name); + QStyleOptionViewItemV4 opt(option); if (m_hasMinimizedNameColumn && isNameColumn) { - QStyleOptionViewItemV4 opt(option); adjustOptionWidth(opt, proxyModel, dolphinModel, index); - KFileItemDelegate::paint(painter, opt, index); - } else { - KFileItemDelegate::paint(painter, option, index); } if (dolphinModel->hasVersionData() && isNameColumn) { // The currently shown items are under revision control. Show the current revision - // state by adding an emblem. + // state by adding an emblem and changing the text tintColor. const QModelIndex dirIndex = proxyModel->mapToSource(index); const QModelIndex revisionIndex = dolphinModel->index(dirIndex.row(), DolphinModel::Version, dirIndex.parent()); const QVariant data = dolphinModel->data(revisionIndex, Qt::DecorationRole); const KVersionControlPlugin::VersionState state = static_cast(data.toInt()); + adjustOptionTextColor(opt, state); + + KFileItemDelegate::paint(painter, opt, index); + if (state != KVersionControlPlugin::UnversionedVersion) { const QRect rect = iconRect(option, index); const QPixmap emblem = emblemForState(state, rect.size()); painter->drawPixmap(rect.x(), rect.y() + rect.height() - emblem.height(), emblem); } + } else { + KFileItemDelegate::paint(painter, opt, index); } } @@ -105,12 +108,41 @@ void DolphinFileItemDelegate::adjustOptionWidth(QStyleOptionViewItemV4& option, } } +void DolphinFileItemDelegate::adjustOptionTextColor(QStyleOptionViewItemV4& option, + KVersionControlPlugin::VersionState state) +{ + QColor tintColor; + + // Using hardcoded colors is generally a bad idea. In this case the colors just act + // as tint colors and are mixed with the current set text color. The tint colors + // have been optimized for the base colors of the corresponding Oxygen emblems. + switch (state) { + case KVersionControlPlugin::UpdateRequiredVersion: tintColor = Qt::yellow; break; + case KVersionControlPlugin::LocallyModifiedVersion: tintColor = Qt::green; break; + case KVersionControlPlugin::AddedVersion: tintColor = Qt::darkGreen; break; + case KVersionControlPlugin::RemovedVersion: tintColor = Qt::darkRed; break; + case KVersionControlPlugin::ConflictingVersion: tintColor = Qt::red; break; + case KVersionControlPlugin::UnversionedVersion: + case KVersionControlPlugin::NormalVersion: + default: + // use the default text color + return; + } + + QPalette palette = option.palette; + const QColor textColor = palette.color(QPalette::Text); + tintColor = QColor((tintColor.red() + textColor.red()) / 2, + (tintColor.green() + textColor.green()) / 2, + (tintColor.blue() + textColor.blue()) / 2, + (tintColor.alpha() + textColor.alpha()) / 2); + palette.setColor(QPalette::Text, tintColor); + option.palette = palette; +} + QPixmap DolphinFileItemDelegate::emblemForState(KVersionControlPlugin::VersionState state, const QSize& size) const { - // TODO: all icons that are use here will be replaced by revision control emblems provided by the - // Oxygen team before KDE 4.4 Q_ASSERT(state <= KVersionControlPlugin::ConflictingVersion); - if ((m_cachedSize != size) || m_cachedEmblems[state].isNull()) { + if (m_cachedSize != size) { m_cachedSize = size; const int iconHeight = size.height(); @@ -126,15 +158,17 @@ QPixmap DolphinFileItemDelegate::emblemForState(KVersionControlPlugin::VersionSt } const QSize emblemSize(emblemHeight, emblemHeight); - for (int i = 0; i <= KVersionControlPlugin::ConflictingVersion; ++i) { + for (int i = KVersionControlPlugin::NormalVersion; i <= KVersionControlPlugin::ConflictingVersion; ++i) { QString iconName; - switch (state) { + switch (i) { case KVersionControlPlugin::NormalVersion: iconName = "vcs-normal"; break; case KVersionControlPlugin::UpdateRequiredVersion: iconName = "vcs-update-required"; break; case KVersionControlPlugin::LocallyModifiedVersion: iconName = "vcs-locally-modified"; break; case KVersionControlPlugin::AddedVersion: iconName = "vcs-added"; break; + case KVersionControlPlugin::RemovedVersion: iconName = "vcs-removed"; break; case KVersionControlPlugin::ConflictingVersion: iconName = "vcs-conflicting"; break; - default: Q_ASSERT(false); break; + case KVersionControlPlugin::UnversionedVersion: + default: Q_ASSERT(false); break; } m_cachedEmblems[i] = KIcon(iconName).pixmap(emblemSize); diff --git a/src/dolphinfileitemdelegate.h b/src/dolphinfileitemdelegate.h index 287136862..405f24916 100644 --- a/src/dolphinfileitemdelegate.h +++ b/src/dolphinfileitemdelegate.h @@ -66,6 +66,9 @@ private: const DolphinModel* dolphinModel, const QModelIndex& index); + static void adjustOptionTextColor(QStyleOptionViewItemV4& option, + KVersionControlPlugin::VersionState state); + QPixmap emblemForState(KVersionControlPlugin::VersionState state, const QSize& size) const; private: