]>
cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/kfileitemlistwidget.cpp
1 /***************************************************************************
2 * Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com> *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
20 #include "kfileitemlistwidget.h"
21 #include "kfileitemmodel.h"
22 #include "kitemlistview.h"
24 #include "dolphin_detailsmodesettings.h"
27 #include <KLocalizedString>
29 #include <QMimeDatabase>
31 KFileItemListWidgetInformant::KFileItemListWidgetInformant() :
32 KStandardItemListWidgetInformant()
36 KFileItemListWidgetInformant::~KFileItemListWidgetInformant()
40 QString
KFileItemListWidgetInformant::itemText(int index
, const KItemListView
* view
) const
42 Q_ASSERT(qobject_cast
<KFileItemModel
*>(view
->model()));
43 KFileItemModel
* fileItemModel
= static_cast<KFileItemModel
*>(view
->model());
45 const KFileItem item
= fileItemModel
->fileItem(index
);
49 bool KFileItemListWidgetInformant::itemIsLink(int index
, const KItemListView
* view
) const
51 Q_ASSERT(qobject_cast
<KFileItemModel
*>(view
->model()));
52 KFileItemModel
* fileItemModel
= static_cast<KFileItemModel
*>(view
->model());
54 const KFileItem item
= fileItemModel
->fileItem(index
);
58 QString
KFileItemListWidgetInformant::roleText(const QByteArray
& role
,
59 const QHash
<QByteArray
, QVariant
>& values
) const
62 const QVariant roleValue
= values
.value(role
);
64 // Implementation note: In case if more roles require a custom handling
65 // use a hash + switch for a linear runtime.
68 if (values
.value("isDir").toBool()) {
69 // The item represents a directory.
70 if (!roleValue
.isNull()) {
71 const int count
= values
.value("count").toInt();
73 text
= i18nc("@item:intable", "Unknown");
75 if (DetailsModeSettings::directorySizeCount()) {
76 // Show the number of sub directories instead of the file size of the directory.
77 text
= i18ncp("@item:intable", "%1 item", "%1 items", count
);
79 // if we have directory size available
80 if (roleValue
== -1) {
81 text
= i18nc("@item:intable", "Unknown");
83 const KIO::filesize_t size
= roleValue
.value
<KIO::filesize_t
>();
84 text
= KFormat().formatByteSize(size
);
90 const KIO::filesize_t size
= roleValue
.value
<KIO::filesize_t
>();
91 text
= KFormat().formatByteSize(size
);
93 } else if (role
== "modificationtime" || role
== "creationtime" || role
== "accesstime") {
95 const long long time
= roleValue
.toLongLong(&ok
);
96 if (ok
&& time
!= -1) {
97 return QLocale().toString(QDateTime::fromSecsSinceEpoch(time
), QLocale::ShortFormat
);
99 } else if (role
== "deletiontime" || role
== "imageDateTime") {
100 const QDateTime dateTime
= roleValue
.toDateTime();
101 text
= QLocale().toString(dateTime
, QLocale::ShortFormat
);
103 text
= KStandardItemListWidgetInformant::roleText(role
, values
);
109 QFont
KFileItemListWidgetInformant::customizedFontForLinks(const QFont
& baseFont
) const
111 // The customized font should be italic if the file is a symbolic link.
112 QFont
font(baseFont
);
113 font
.setItalic(true);
118 KFileItemListWidget::KFileItemListWidget(KItemListWidgetInformant
* informant
, QGraphicsItem
* parent
) :
119 KStandardItemListWidget(informant
, parent
)
123 KFileItemListWidget::~KFileItemListWidget()
127 KItemListWidgetInformant
* KFileItemListWidget::createInformant()
129 return new KFileItemListWidgetInformant();
132 bool KFileItemListWidget::isRoleRightAligned(const QByteArray
& role
) const
134 return role
== "size";
137 bool KFileItemListWidget::isHidden() const
139 return data().value("isHidden").toBool();
142 QFont
KFileItemListWidget::customizedFont(const QFont
& baseFont
) const
144 // The customized font should be italic if the file is a symbolic link.
145 QFont
font(baseFont
);
146 font
.setItalic(data().value("isLink").toBool());
150 int KFileItemListWidget::selectionLength(const QString
& text
) const
152 // Select the text without MIME-type extension
153 int selectionLength
= text
.length();
155 // If item is a directory, use the whole text length for
156 // selection (ignore all points)
157 if(data().value("isDir").toBool()) {
158 return selectionLength
;
162 const QString extension
= db
.suffixForFileName(text
);
163 if (extension
.isEmpty()) {
164 // For an unknown extension just exclude the extension after
165 // the last point. This does not work for multiple extensions like
166 // *.tar.gz but usually this is anyhow a known extension.
167 selectionLength
= text
.lastIndexOf(QLatin1Char('.'));
169 // If no point could be found, use whole text length for selection.
170 if (selectionLength
< 1) {
171 selectionLength
= text
.length();
175 selectionLength
-= extension
.length() + 1;
178 return selectionLength
;