]>
cloud.milkyroute.net Git - dolphin.git/blob - src/dolphinmodel.cpp
2 * This file is part of the KDE project
3 * Copyright (C) 2007 Rafael Fernández López <ereslibre@gmail.com>
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
15 * You should have received a copy of the GNU Library General Public License
16 * along with this library; see the file COPYING.LIB. If not, write to
17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
21 #include "dolphinmodel.h"
23 #include "dolphinsortfilterproxymodel.h"
25 #include "kcategorizedview.h"
27 #include <config-nepomuk.h>
29 #include <nepomuk/global.h>
30 #include <nepomuk/resource.h>
31 #include <nepomuk/tag.h>
34 #include <kdatetime.h>
35 #include <kdirmodel.h>
36 #include <kfileitem.h>
37 #include <kiconloader.h>
41 #include <kmimetype.h>
42 #include <kstandarddirs.h>
43 #include <kpixmapeffect.h>
46 #include <QSortFilterProxyModel>
50 DolphinModel::DolphinModel(QObject
*parent
)
55 DolphinModel::~DolphinModel()
59 QVariant
DolphinModel::data(const QModelIndex
&index
, int role
) const
61 if (role
== KCategorizedSortFilterProxyModel::CategoryRole
)
70 const KDirModel
*dirModel
= qobject_cast
<const KDirModel
*>(index
.model());
71 KFileItem item
= dirModel
->itemForIndex(index
);
73 switch (index
.column())
77 // KDirModel checks columns to know to which role are
79 QModelIndex theIndex
= index
.model()->index(index
.row(),
83 if (!theIndex
.isValid()) {
87 QVariant data
= theIndex
.model()->data(theIndex
, Qt::DisplayRole
);
88 if (data
.toString().size())
90 if (!item
.isHidden() && data
.toString().at(0).isLetter())
91 retString
= data
.toString().toUpper().at(0);
92 else if (item
.isHidden() && data
.toString().at(0) == '.' &&
93 data
.toString().at(1).isLetter())
94 retString
= data
.toString().toUpper().at(1);
95 else if (item
.isHidden() && data
.toString().at(0) == '.' &&
96 !data
.toString().at(1).isLetter())
97 retString
= i18nc("@title:group Name", "Others");
98 else if (item
.isHidden() && data
.toString().at(0) != '.')
99 retString
= data
.toString().toUpper().at(0);
100 else if (item
.isHidden())
101 retString
= data
.toString().toUpper().at(0);
104 bool validCategory
= false;
106 const QString
str(data
.toString().toUpper());
107 const QChar
* currA
= str
.unicode();
108 while (!currA
->isNull() && !validCategory
) {
109 if (currA
->isLetter())
110 validCategory
= true;
111 else if (currA
->isDigit())
112 return i18nc("@title:group", "Others");
118 retString
= i18nc("@title:group Name", "Others");
126 case KDirModel::Size
: {
127 const int fileSize
= !item
.isNull() ? item
.size() : -1;
128 if (!item
.isNull() && item
.isDir()) {
129 retString
= i18nc("@title:group Size", "Folders");
130 } else if (fileSize
< 5242880) {
131 retString
= i18nc("@title:group Size", "Small");
132 } else if (fileSize
< 10485760) {
133 retString
= i18nc("@title:group Size", "Medium");
135 retString
= i18nc("@title:group Size", "Big");
140 case KDirModel::ModifiedTime
:
142 KDateTime modifiedTime
;
143 modifiedTime
.setTime_t(item
.time(KIO::UDSEntry::UDS_MODIFICATION_TIME
));
144 modifiedTime
= modifiedTime
.toLocalZone();
146 if (modifiedTime
.daysTo(KDateTime::currentLocalDateTime()) == 0)
147 retString
= i18nc("@title:group Date", "Today");
148 else if (modifiedTime
.daysTo(KDateTime::currentLocalDateTime()) == 1)
149 retString
= i18nc("@title:group Date", "Yesterday");
150 else if (modifiedTime
.daysTo(KDateTime::currentLocalDateTime()) < 7)
151 retString
= i18nc("@title:group Date", "Less than a week");
152 else if (modifiedTime
.daysTo(KDateTime::currentLocalDateTime()) < 31)
153 retString
= i18nc("@title:group Date", "Less than a month");
154 else if (modifiedTime
.daysTo(KDateTime::currentLocalDateTime()) < 365)
155 retString
= i18nc("@title:group Date", "Less than a year");
157 retString
= i18nc("@title:group Date", "More than a year");
161 case KDirModel::Permissions
:
162 retString
= item
.permissionsString();
165 case KDirModel::Owner
:
166 retString
= item
.user();
169 case KDirModel::Group
:
170 retString
= item
.group();
173 case KDirModel::Type
:
174 retString
= item
.mimeComment();
178 case DolphinModel::Rating
: {
179 const quint32 rating
= ratingForIndex(index
);
181 retString
= QString::number(rating
);
185 case DolphinModel::Tags
: {
186 retString
= tagsForIndex(index
);
188 if (retString
.isEmpty())
189 retString
= i18nc("@title:group Tags", "Not yet tagged");
199 return KDirModel::data(index
, role
);
202 int DolphinModel::columnCount(const QModelIndex
&parent
) const
204 return KDirModel::columnCount(parent
) + (ExtraColumnCount
- ColumnCount
);
207 quint32
DolphinModel::ratingForIndex(const QModelIndex
& index
)
212 const DolphinModel
* dolphinModel
= static_cast<const DolphinModel
*>(index
.model());
213 KFileItem item
= dolphinModel
->itemForIndex(index
);
214 if (!item
.isNull()) {
215 const Nepomuk::Resource
resource(item
.url().url(), Nepomuk::NFO::File());
216 rating
= resource
.rating();
225 QString
DolphinModel::tagsForIndex(const QModelIndex
& index
)
230 const DolphinModel
* dolphinModel
= static_cast<const DolphinModel
*>(index
.model());
231 KFileItem item
= dolphinModel
->itemForIndex(index
);
232 if (!item
.isNull()) {
233 const Nepomuk::Resource
resource(item
.url().url(), Nepomuk::NFO::File());
234 const QList
<Nepomuk::Tag
> tags
= resource
.tags();
235 QStringList stringList
;
236 foreach (const Nepomuk::Tag
& tag
, tags
) {
237 stringList
.append(tag
.label());
241 foreach (const QString
& str
, stringList
) {
246 if (!tagsString
.isEmpty()) {
247 tagsString
.resize(tagsString
.size() - 2);