]> cloud.milkyroute.net Git - dolphin.git/commitdiff
I guess most developers use the Details View with very small icons (16 x 16) for...
authorPeter Penz <peter.penz19@gmail.com>
Sat, 12 Dec 2009 14:16:02 +0000 (14:16 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Sat, 12 Dec 2009 14:16:02 +0000 (14:16 +0000)
So the text color gets tinted a little bit now to notice the difference...

svn path=/trunk/KDE/kdebase/apps/; revision=1061618

src/dolphinfileitemdelegate.cpp
src/dolphinfileitemdelegate.h

index 1c920b8532ad53254b385aee9ad160967f21aed7..87ea774f85c2d222a3e9f2c4a72b2a6d05742f07 100644 (file)
@@ -51,27 +51,30 @@ void DolphinFileItemDelegate::paint(QPainter* painter,
     const DolphinModel* dolphinModel = static_cast<const DolphinModel*>(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<KVersionControlPlugin::VersionState>(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);
index 287136862bfff212950fda6d1d60a8d52f4c6dbf..405f24916f2743f01aae7e6ba100aeadc30e3dcd 100644 (file)
@@ -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: