svn path=/trunk/KDE/kdebase/apps/; revision=996101
#include <dolphinmodel.h>
#include <kfileitem.h>
#include <dolphinmodel.h>
#include <kfileitem.h>
+#include <kicon.h>
+#include <kiconloader.h>
#include <QAbstractItemModel>
#include <QAbstractProxyModel>
#include <QAbstractItemModel>
#include <QAbstractProxyModel>
{
const QAbstractProxyModel* proxyModel = static_cast<const QAbstractProxyModel*>(index.model());
const DolphinModel* dolphinModel = static_cast<const DolphinModel*>(proxyModel->sourceModel());
{
const QAbstractProxyModel* proxyModel = static_cast<const QAbstractProxyModel*>(index.model());
const DolphinModel* dolphinModel = static_cast<const DolphinModel*>(proxyModel->sourceModel());
- const bool useMinimizedNameColumn = m_hasMinimizedNameColumn && (index.column() == KDirModel::Name);
+ const bool isNameColumn = (index.column() == KDirModel::Name);
- if (dolphinModel->hasRevisionData()) {
+ 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->hasRevisionData() && isNameColumn) {
// The currently shown items are under revision control. Show the current revision
// The currently shown items are under revision control. Show the current revision
- // state by adjusting the text color.
+ // state by adding an emblem.
const QModelIndex dirIndex = proxyModel->mapToSource(index);
const QModelIndex revisionIndex = dolphinModel->index(dirIndex.row(), DolphinModel::Revision);
const QVariant data = dolphinModel->data(revisionIndex, Qt::DecorationRole);
const DolphinModel::RevisionState state = static_cast<DolphinModel::RevisionState>(data.toInt());
if (state != DolphinModel::LocalRevision) {
const QModelIndex dirIndex = proxyModel->mapToSource(index);
const QModelIndex revisionIndex = dolphinModel->index(dirIndex.row(), DolphinModel::Revision);
const QVariant data = dolphinModel->data(revisionIndex, Qt::DecorationRole);
const DolphinModel::RevisionState state = static_cast<DolphinModel::RevisionState>(data.toInt());
if (state != DolphinModel::LocalRevision) {
- QStyleOptionViewItemV4 opt(option);
- // TODO: use different colors for different states
- opt.palette.setColor(QPalette::Text, QColor(40, 150, 40));
- if (useMinimizedNameColumn) {
- adjustOptionWidth(opt, proxyModel, dolphinModel, index);
- }
- KFileItemDelegate::paint(painter, opt, index);
- return;
+ // TODO: extend KFileItemDelegate to be able to get the icon boundaries
+ const QRect iconRect(option.rect.x(), option.rect.y(),
+ KIconLoader::SizeSmall, KIconLoader::SizeSmall);
+ const QPixmap emblem = emblemForState(state, iconRect.size());
+ painter->drawPixmap(iconRect.x(), iconRect.y(), emblem);
- } else if (useMinimizedNameColumn) {
- QStyleOptionViewItemV4 opt(option);
- adjustOptionWidth(opt, proxyModel, dolphinModel, index);
- KFileItemDelegate::paint(painter, opt, index);
- return;
-
- KFileItemDelegate::paint(painter, option, index);
}
int DolphinFileItemDelegate::nameColumnWidth(const QString& name, const QStyleOptionViewItem& option)
}
int DolphinFileItemDelegate::nameColumnWidth(const QString& name, const QStyleOptionViewItem& option)
+QPixmap DolphinFileItemDelegate::emblemForState(DolphinModel::RevisionState state, const QSize& size)
+{
+ // TODO #1: all icons that are use here will be replaced by revision control emblems provided by the
+ // Oxygen team before KDE 4.4
+ // TODO #2: cache the icons
+ switch (state) {
+ case DolphinModel::LatestRevision:
+ return KIcon("dialog-ok-apply").pixmap(size);
+ break;
+
+ case DolphinModel::ConflictingRevision:
+ return KIcon("emblem-important").pixmap(size);
+ break;
+
+ // ...
+
+ default:
+ break;
+ }
+ return QPixmap();
+}
+
#ifndef DOLPHINFILEITEMDELEGATE_H
#define DOLPHINFILEITEMDELEGATE_H
#ifndef DOLPHINFILEITEMDELEGATE_H
#define DOLPHINFILEITEMDELEGATE_H
+#include <dolphinmodel.h>
#include <kfileitemdelegate.h>
#include <kfileitemdelegate.h>
class QAbstractProxyModel;
/**
class QAbstractProxyModel;
/**
const DolphinModel* dolphinModel,
const QModelIndex& index);
const DolphinModel* dolphinModel,
const QModelIndex& index);
+ static QPixmap emblemForState(DolphinModel::RevisionState state, const QSize& size);
+
private:
bool m_hasMinimizedNameColumn;
};
private:
bool m_hasMinimizedNameColumn;
};
enum RevisionState {
LocalRevision,
enum RevisionState {
LocalRevision,
+ LatestRevision,
+ ConflictingRevision
enum RevisionState
{
LocalRevision,
enum RevisionState
{
LocalRevision,
+ LatestRevision,
+ ConflictingRevision