X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/3ba0f41c44e41da9606fff05cc21f4344d6f9b5f..1e27cae3e58f0be65ea6c690f9144b0621829d2b:/src/dolphinmodel.cpp diff --git a/src/dolphinmodel.cpp b/src/dolphinmodel.cpp index fc68d3977..1b94e0339 100644 --- a/src/dolphinmodel.cpp +++ b/src/dolphinmodel.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #endif #include @@ -47,6 +48,8 @@ #include #include +static const char *others = I18N_NOOP2("@title:group Name", "Others"); + DolphinModel::DolphinModel(QObject *parent) : KDirModel(parent) { @@ -58,22 +61,18 @@ DolphinModel::~DolphinModel() QVariant DolphinModel::data(const QModelIndex &index, int role) const { - if (role == KCategorizedSortFilterProxyModel::CategoryRole) - { + if (role == KCategorizedSortFilterProxyModel::CategoryDisplayRole) { QString retString; - if (!index.isValid()) - { + if (!index.isValid()) { return retString; } const KDirModel *dirModel = qobject_cast(index.model()); KFileItem item = dirModel->itemForIndex(index); - switch (index.column()) - { - case KDirModel::Name: - { + switch (index.column()) { + case KDirModel::Name: { // KDirModel checks columns to know to which role are // we talking about QModelIndex theIndex = index.model()->index(index.row(), @@ -83,41 +82,41 @@ QVariant DolphinModel::data(const QModelIndex &index, int role) const if (!theIndex.isValid()) { return retString; } - QVariant data = theIndex.model()->data(theIndex, Qt::DisplayRole); - if (data.toString().size()) - { - if (!item.isHidden() && data.toString().at(0).isLetter()) - retString = data.toString().toUpper().at(0); - else if (item.isHidden() && data.toString().at(0) == '.' && - data.toString().at(1).isLetter()) - retString = data.toString().toUpper().at(1); - else if (item.isHidden() && data.toString().at(0) == '.' && - !data.toString().at(1).isLetter()) - retString = i18nc("@title:group Name", "Others"); - else if (item.isHidden() && data.toString().at(0) != '.') - retString = data.toString().toUpper().at(0); - else if (item.isHidden()) - retString = data.toString().toUpper().at(0); - else - { + QString name = data.toString(); + if (!name.isEmpty()) { + if (!item.isHidden() && name.at(0).isLetter()) + retString = name.at(0).toUpper(); + else if (item.isHidden()) { + if (name.at(0) == '.') { + if (name.size() > 1 && name.at(1).isLetter()) { + retString = name.at(1).toUpper(); + } else { + retString = i18nc("@title:group Name", others); + } + } else { + retString = name.at(0).toUpper(); + } + } else { bool validCategory = false; - const QString str(data.toString().toUpper()); + const QString str(name.toUpper()); const QChar* currA = str.unicode(); while (!currA->isNull() && !validCategory) { - if (currA->isLetter()) + if (currA->isLetter()) { validCategory = true; - else if (currA->isDigit()) - return i18nc("@title:group", "Others"); - else + } else if (currA->isDigit()) { + return i18nc("@title:group Name", others); + } else { ++currA; + } } - if (!validCategory) - retString = i18nc("@title:group Name", "Others"); - else + if (!validCategory) { + retString = validCategory ? *currA : i18nc("@title:group Name", others); + } else { retString = *currA; + } } } break; @@ -137,8 +136,7 @@ QVariant DolphinModel::data(const QModelIndex &index, int role) const break; } - case KDirModel::ModifiedTime: - { + case KDirModel::ModifiedTime: { KDateTime modifiedTime; modifiedTime.setTime_t(item.time(KIO::UDSEntry::UDS_MODIFICATION_TIME)); modifiedTime = modifiedTime.toLocalZone(); @@ -147,8 +145,7 @@ QVariant DolphinModel::data(const QModelIndex &index, int role) const break; } - case KDirModel::Permissions: - { + case KDirModel::Permissions: { QString user; QString group; QString others; @@ -224,9 +221,9 @@ QVariant DolphinModel::data(const QModelIndex &index, int role) const case DolphinModel::Tags: { retString = tagsForIndex(index); - if (retString.isEmpty()) + if (retString.isEmpty()) { retString = i18nc("@title:group Tags", "Not yet tagged"); - + } break; } #endif @@ -234,6 +231,90 @@ 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); + + if (retVariant == i18nc("@title:group Name", others)) + retVariant = QString(QChar(QChar::ReplacementCharacter)); + + break; + } + + case KDirModel::Size: { + const int fileSize = !item.isNull() ? item.size() : -1; + if (item.isDir()) { + retVariant = 0; + } else if (fileSize < 5242880) { + retVariant = 1; + } else if (fileSize < 10485760) { + retVariant = 2; + } else { + retVariant = 3; + } + 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); } @@ -251,7 +332,7 @@ quint32 DolphinModel::ratingForIndex(const QModelIndex& index) const DolphinModel* dolphinModel = static_cast(index.model()); KFileItem item = dolphinModel->itemForIndex(index); if (!item.isNull()) { - const Nepomuk::Resource resource(item.url().url(), Nepomuk::NFO::File()); + const Nepomuk::Resource resource(item.url().url(), Soprano::Vocabulary::Xesam::File()); rating = resource.rating(); } return rating; @@ -269,7 +350,7 @@ QString DolphinModel::tagsForIndex(const QModelIndex& index) const DolphinModel* dolphinModel = static_cast(index.model()); KFileItem item = dolphinModel->itemForIndex(index); if (!item.isNull()) { - const Nepomuk::Resource resource(item.url().url(), Nepomuk::NFO::File()); + const Nepomuk::Resource resource(item.url().url(), Soprano::Vocabulary::Xesam::File()); const QList tags = resource.tags(); QStringList stringList; foreach (const Nepomuk::Tag& tag, tags) {