X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/9ed99a5ebb93eb4730da5ff0b1f4d54e579b1aeb..0fc7e4af53e6f97c42fbd9df43ba80ff185600fb:/src/dolphinmodel.cpp diff --git a/src/dolphinmodel.cpp b/src/dolphinmodel.cpp index c71062860..f541fe20c 100644 --- a/src/dolphinmodel.cpp +++ b/src/dolphinmodel.cpp @@ -1,6 +1,6 @@ /** * This file is part of the KDE project - * Copyright (C) 2007 Rafael Fernández López + * Copyright (C) 2007 Rafael Fernández López * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -20,10 +20,6 @@ #include "dolphinmodel.h" -extern "C" { -#include -} - #include "dolphinsortfilterproxymodel.h" #include "kcategorizedview.h" @@ -44,12 +40,12 @@ extern "C" { #include #include #include -#include #include #include #include #include +#include DolphinModel::DolphinModel(QObject *parent) : KDirModel(parent) @@ -62,7 +58,7 @@ DolphinModel::~DolphinModel() QVariant DolphinModel::data(const QModelIndex &index, int role) const { - if (role == KCategorizedSortFilterProxyModel::CategoryRole) + if (role == KCategorizedSortFilterProxyModel::CategoryDisplayRole) { QString retString; @@ -147,18 +143,7 @@ QVariant DolphinModel::data(const QModelIndex &index, int role) const modifiedTime.setTime_t(item.time(KIO::UDSEntry::UDS_MODIFICATION_TIME)); modifiedTime = modifiedTime.toLocalZone(); - if (modifiedTime.daysTo(KDateTime::currentLocalDateTime()) == 0) - retString = i18nc("@title:group Date", "Today"); - else if (modifiedTime.daysTo(KDateTime::currentLocalDateTime()) == 1) - retString = i18nc("@title:group Date", "Yesterday"); - else if (modifiedTime.daysTo(KDateTime::currentLocalDateTime()) < 7) - retString = i18nc("@title:group Date", "Less than a week"); - else if (modifiedTime.daysTo(KDateTime::currentLocalDateTime()) < 31) - retString = i18nc("@title:group Date", "Less than a month"); - else if (modifiedTime.daysTo(KDateTime::currentLocalDateTime()) < 365) - retString = i18nc("@title:group Date", "Less than a year"); - else - retString = i18nc("@title:group Date", "More than a year"); + retString = modifiedTime.toString(i18nc("Prints out the month and year: %B is full month name in current locale, and %Y is full year number", "%B, %Y")); break; } @@ -168,15 +153,15 @@ QVariant DolphinModel::data(const QModelIndex &index, int role) const QString group; QString others; - mode_t permissions = item.permissions(); + QFileInfo info(item.url().pathOrUrl()); - if (permissions & S_IRUSR) + if (info.permission(QFile::ReadUser)) user = i18n("Read, "); - if (permissions & S_IWUSR) + if (info.permission(QFile::WriteUser)) user += i18n("Write, "); - if (permissions & S_IXUSR) + if (info.permission(QFile::ExeUser)) user += i18n("Execute, "); if (user.isEmpty()) @@ -184,13 +169,13 @@ QVariant DolphinModel::data(const QModelIndex &index, int role) const else user = user.mid(0, user.count() - 2); - if (permissions & S_IRGRP) + if (info.permission(QFile::ReadGroup)) group = i18n("Read, "); - if (permissions & S_IWGRP) + if (info.permission(QFile::WriteGroup)) group += i18n("Write, "); - if (permissions & S_IXGRP) + if (info.permission(QFile::ExeGroup)) group += i18n("Execute, "); if (group.isEmpty()) @@ -198,13 +183,13 @@ QVariant DolphinModel::data(const QModelIndex &index, int role) const else group = group.mid(0, group.count() - 2); - if (permissions & S_IROTH) + if (info.permission(QFile::ReadOther)) others = i18n("Read, "); - if (permissions & S_IWOTH) + if (info.permission(QFile::WriteOther)) others += i18n("Write, "); - if (permissions & S_IXOTH) + if (info.permission(QFile::ExeOther)) others += i18n("Execute, "); if (others.isEmpty()) @@ -249,6 +234,82 @@ QVariant DolphinModel::data(const QModelIndex &index, int role) const return retString; } + else if (role == KCategorizedSortFilterProxyModel::CategorySortRole) + { + QVariant retVariant; + + if (!index.isValid()) + { + return retVariant; + } + + const KDirModel *dirModel = qobject_cast(index.model()); + KFileItem item = dirModel->itemForIndex(index); + + switch (index.column()) { + case KDirModel::Name: { + retVariant = data(index, KCategorizedSortFilterProxyModel::CategoryDisplayRole); + break; + } + + case KDirModel::Size: { + const int fileSize = !item.isNull() ? item.size() : -1; + retVariant = fileSize; + break; + } + + case KDirModel::ModifiedTime: + { + KDateTime modifiedTime; + modifiedTime.setTime_t(item.time(KIO::UDSEntry::UDS_MODIFICATION_TIME)); + modifiedTime = modifiedTime.toLocalZone(); + + retVariant = modifiedTime.date().year() * 100 + modifiedTime.date().month(); + break; + } + + case KDirModel::Permissions: + { + QFileInfo info(item.url().pathOrUrl()); + + retVariant = -KDirSortFilterProxyModel::pointsForPermissions(info); + break; + } + + case KDirModel::Owner: + retVariant = item.user(); + break; + + case KDirModel::Group: + retVariant = item.group(); + break; + + case KDirModel::Type: + if (item.isDir()) + retVariant = QString(); // when sorting we want folders to be placed first + else + retVariant = item.mimeComment(); + break; + +#ifdef HAVE_NEPOMUK + case DolphinModel::Rating: { + retVariant = ratingForIndex(index); + break; + } + + case DolphinModel::Tags: { + retVariant = tagsForIndex(index).count(); + break; + } +#endif + + default: + break; + + } + + return retVariant; + } return KDirModel::data(index, role); }