• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

KIO

  • kio
  • kfile
kfilemetadataprovider.cpp
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright (C) 2010 by Peter Penz <peter.penz@gmx.at> *
3 * *
4 * This library is free software; you can redistribute it and/or *
5 * modify it under the terms of the GNU Library General Public *
6 * License as published by the Free Software Foundation; either *
7 * version 2 of the License, or (at your option) any later version. *
8 * *
9 * This library 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 GNU *
12 * Library General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU Library General Public License *
15 * along with this library; see the file COPYING.LIB. If not, write to *
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, *
17 * Boston, MA 02110-1301, USA. *
18 *****************************************************************************/
19
20#include "kfilemetadataprovider_p.h"
21
22#include <kfileitem.h>
23#include <kfilemetadatareader_p.h>
24#include "knfotranslator_p.h"
25#include <klocale.h>
26#include <kstandarddirs.h>
27#include <kurl.h>
28
29#ifndef KIO_NO_NEPOMUK
30 #define DISABLE_NEPOMUK_LEGACY
31 #include "nepomukmassupdatejob.h"
32 #include "tagwidget.h"
33 #include "tag.h"
34 #include "kratingwidget.h"
35 #include "resource.h"
36 #include "resourcemanager.h"
37
38 #include "kcommentwidget_p.h"
39#else
40 namespace Nepomuk
41 {
42 typedef int Tag;
43 }
44#endif
45
46#include <QEvent>
47#include <QLabel>
48
49// Required includes for subDirectoriesCount():
50#ifdef Q_WS_WIN
51 #include <QDir>
52#else
53 #include <dirent.h>
54 #include <QFile>
55#endif
56
57namespace {
58 static QString plainText(const QString& richText)
59 {
60 QString plainText;
61 plainText.reserve(richText.length());
62
63 bool skip = false;
64 for (int i = 0; i < richText.length(); ++i) {
65 const QChar c = richText.at(i);
66 if (c == QLatin1Char('<')) {
67 skip = true;
68 } else if (c == QLatin1Char('>')) {
69 skip = false;
70 } else if (!skip) {
71 plainText.append(c);
72 }
73 }
74
75 return plainText;
76 }
77}
78
79// The default size hint of QLabel tries to return a square size.
80// This does not work well in combination with layouts that use
81// heightForWidth(): In this case it is possible that the content
82// of a label might get clipped. By specifying a size hint
83// with a maximum width that is necessary to contain the whole text,
84// using heightForWidth() assures having a non-clipped text.
85class ValueWidget : public QLabel
86{
87public:
88 explicit ValueWidget(QWidget* parent = 0);
89 virtual QSize sizeHint() const;
90};
91
92ValueWidget::ValueWidget(QWidget* parent) :
93 QLabel(parent)
94{
95}
96
97QSize ValueWidget::sizeHint() const
98{
99 QFontMetrics metrics(font());
100 // TODO: QLabel internally provides already a method sizeForWidth(),
101 // that would be sufficient. However this method is not accessible, so
102 // as workaround the tags from a richtext are removed manually here to
103 // have a proper size hint.
104 return metrics.size(Qt::TextSingleLine, plainText(text()));
105}
106
107
108
109class KFileMetaDataProvider::Private
110{
111
112public:
113 Private(KFileMetaDataProvider* parent);
114 ~Private();
115
116 void slotLoadingFinished();
117
118 void slotRatingChanged(unsigned int rating);
119 void slotTagsChanged(const QList<Nepomuk::Tag>& tags);
120 void slotCommentChanged(const QString& comment);
121
122 void slotMetaDataUpdateDone();
123 void slotTagClicked(const Nepomuk::Tag& tag);
124 void slotLinkActivated(const QString& link);
125
131 void startChangeDataJob(KJob* job);
132
133#ifndef KIO_NO_NEPOMUK
134 QList<Nepomuk::Resource> resourceList() const;
135 QWidget* createRatingWidget(int rating, QWidget* parent);
136 QWidget* createTagWidget(const QList<Nepomuk::Tag>& tags, QWidget* parent);
137 QWidget* createCommentWidget(const QString& comment, QWidget* parent);
138#endif
139 QWidget* createValueWidget(const QString& value, QWidget* parent);
140
141 /*
142 * @return The number of subdirectories for the directory \a path.
143 */
144 static int subDirectoriesCount(const QString &path);
145
146 bool m_readOnly;
147 bool m_nepomukActivated;
148 QList<KFileItem> m_fileItems;
149
150#ifndef KIO_NO_NEPOMUK
151 QHash<KUrl, Nepomuk::Variant> m_data;
152
153 QList<KFileMetaDataReader*> m_metaDataReaders;
154 KFileMetaDataReader* m_latestMetaDataReader;
155
156 QWeakPointer<KRatingWidget> m_ratingWidget;
157 QWeakPointer<Nepomuk::TagWidget> m_tagWidget;
158 QWeakPointer<KCommentWidget> m_commentWidget;
159#endif
160
161private:
162 KFileMetaDataProvider* const q;
163};
164
165KFileMetaDataProvider::Private::Private(KFileMetaDataProvider* parent) :
166 m_readOnly(false),
167 m_nepomukActivated(false),
168 m_fileItems(),
169#ifndef KIO_NO_NEPOMUK
170 m_data(),
171 m_metaDataReaders(),
172 m_latestMetaDataReader(0),
173 m_ratingWidget(),
174 m_tagWidget(),
175 m_commentWidget(),
176#endif
177 q(parent)
178{
179#ifndef KIO_NO_NEPOMUK
180 m_nepomukActivated = Nepomuk::ResourceManager::instance()->initialized();
181#endif
182}
183
184KFileMetaDataProvider::Private::~Private()
185{
186#ifndef KIO_NO_NEPOMUK
187 qDeleteAll(m_metaDataReaders);
188#endif
189}
190
191void KFileMetaDataProvider::Private::slotLoadingFinished()
192{
193#ifndef KIO_NO_NEPOMUK
194 KFileMetaDataReader* finishedMetaDataReader = qobject_cast<KFileMetaDataReader*>(q->sender());
195 // The process that has emitted the finished() signal
196 // will get deleted and removed from m_metaDataReaders.
197 for (int i = 0; i < m_metaDataReaders.count(); ++i) {
198 KFileMetaDataReader* metaDataReader = m_metaDataReaders[i];
199 if (metaDataReader == finishedMetaDataReader) {
200 m_metaDataReaders.removeAt(i);
201 if (metaDataReader != m_latestMetaDataReader) {
202 // Ignore data of older processs, as the data got
203 // obsolete by m_latestMetaDataReader.
204 metaDataReader->deleteLater();
205 return;
206 }
207 }
208 }
209
210 m_data = m_latestMetaDataReader->metaData();
211 m_latestMetaDataReader->deleteLater();
212
213 if (m_fileItems.count() == 1) {
214 // TODO: Handle case if remote URLs are used properly. isDir() does
215 // not work, the modification date needs also to be adjusted...
216 const KFileItem& item = m_fileItems.first();
217
218 if (item.isDir()) {
219 const int count = subDirectoriesCount(item.url().pathOrUrl());
220 if (count == -1) {
221 m_data.insert(KUrl("kfileitem#size"), QString("Unknown"));
222 } else {
223 const QString itemCountString = i18ncp("@item:intable", "%1 item", "%1 items", count);
224 m_data.insert(KUrl("kfileitem#size"), itemCountString);
225 }
226 } else {
227 m_data.insert(KUrl("kfileitem#size"), KIO::convertSize(item.size()));
228 }
229 m_data.insert(KUrl("kfileitem#type"), item.mimeComment());
230 m_data.insert(KUrl("kfileitem#modified"), KGlobal::locale()->formatDateTime(item.time(KFileItem::ModificationTime), KLocale::FancyLongDate));
231 m_data.insert(KUrl("kfileitem#owner"), item.user());
232 m_data.insert(KUrl("kfileitem#permissions"), item.permissionsString());
233 } else if (m_fileItems.count() > 1) {
234 // Calculate the size of all items
235 quint64 totalSize = 0;
236 foreach (const KFileItem& item, m_fileItems) {
237 if (!item.isDir() && !item.isLink()) {
238 totalSize += item.size();
239 }
240 }
241 m_data.insert(KUrl("kfileitem#totalSize"), KIO::convertSize(totalSize));
242 }
243#endif
244
245 emit q->loadingFinished();
246}
247
248void KFileMetaDataProvider::Private::slotRatingChanged(unsigned int rating)
249{
250#ifndef KIO_NO_NEPOMUK
251 Nepomuk::MassUpdateJob* job = Nepomuk::MassUpdateJob::rateResources(resourceList(), rating);
252 startChangeDataJob(job);
253#else
254 Q_UNUSED(rating);
255#endif
256}
257
258void KFileMetaDataProvider::Private::slotTagsChanged(const QList<Nepomuk::Tag>& tags)
259{
260#ifndef KIO_NO_NEPOMUK
261 if (!m_tagWidget.isNull()) {
262 m_tagWidget.data()->setSelectedTags(tags);
263
264 Nepomuk::MassUpdateJob* job = Nepomuk::MassUpdateJob::tagResources(resourceList(), tags);
265 startChangeDataJob(job);
266 }
267#else
268 Q_UNUSED(tags);
269#endif
270}
271
272void KFileMetaDataProvider::Private::slotCommentChanged(const QString& comment)
273{
274#ifndef KIO_NO_NEPOMUK
275 Nepomuk::MassUpdateJob* job = Nepomuk::MassUpdateJob::commentResources(resourceList(), comment);
276 startChangeDataJob(job);
277#else
278 Q_UNUSED(comment);
279#endif
280}
281
282void KFileMetaDataProvider::Private::slotTagClicked(const Nepomuk::Tag& tag)
283{
284#ifndef KIO_NO_NEPOMUK
285 emit q->urlActivated(tag.resourceUri());
286#else
287 Q_UNUSED(tag);
288#endif
289}
290
291void KFileMetaDataProvider::Private::slotLinkActivated(const QString& link)
292{
293 emit q->urlActivated(KUrl(link));
294}
295
296void KFileMetaDataProvider::Private::startChangeDataJob(KJob* job)
297{
298 connect(job, SIGNAL(result(KJob*)),
299 q, SIGNAL(dataChangeFinished()));
300 emit q->dataChangeStarted();
301 job->start();
302}
303
304#ifndef KIO_NO_NEPOMUK
305QList<Nepomuk::Resource> KFileMetaDataProvider::Private::resourceList() const
306{
307 QList<Nepomuk::Resource> list;
308 foreach (const KFileItem& item, m_fileItems) {
309 const KUrl url = item.nepomukUri();
310 if(url.isValid())
311 list.append(Nepomuk::Resource(url));
312 }
313 return list;
314}
315
316QWidget* KFileMetaDataProvider::Private::createRatingWidget(int rating, QWidget* parent)
317{
318 KRatingWidget* ratingWidget = new KRatingWidget(parent);
319 const Qt::Alignment align = (ratingWidget->layoutDirection() == Qt::LeftToRight) ?
320 Qt::AlignLeft : Qt::AlignRight;
321 ratingWidget->setAlignment(align);
322 ratingWidget->setRating(rating);
323 const QFontMetrics metrics(parent->font());
324 ratingWidget->setPixmapSize(metrics.height());
325
326 connect(ratingWidget, SIGNAL(ratingChanged(uint)),
327 q, SLOT(slotRatingChanged(uint)));
328
329 m_ratingWidget = ratingWidget;
330
331 return ratingWidget;
332}
333
334QWidget* KFileMetaDataProvider::Private::createTagWidget(const QList<Nepomuk::Tag>& tags, QWidget* parent)
335{
336 Nepomuk::TagWidget* tagWidget = new Nepomuk::TagWidget(parent);
337 tagWidget->setModeFlags(m_readOnly
338 ? Nepomuk::TagWidget::MiniMode | Nepomuk::TagWidget::ReadOnly
339 : Nepomuk::TagWidget::MiniMode);
340 tagWidget->setSelectedTags(tags);
341
342 connect(tagWidget, SIGNAL(selectionChanged(QList<Nepomuk::Tag>)),
343 q, SLOT(slotTagsChanged(QList<Nepomuk::Tag>)));
344 connect(tagWidget, SIGNAL(tagClicked(Nepomuk::Tag)),
345 q, SLOT(slotTagClicked(Nepomuk::Tag)));
346
347 m_tagWidget = tagWidget;
348
349 return tagWidget;
350}
351
352QWidget* KFileMetaDataProvider::Private::createCommentWidget(const QString& comment, QWidget* parent)
353{
354 KCommentWidget* commentWidget = new KCommentWidget(parent);
355 commentWidget->setText(comment);
356 commentWidget->setReadOnly(m_readOnly);
357
358 connect(commentWidget, SIGNAL(commentChanged(QString)),
359 q, SLOT(slotCommentChanged(QString)));
360
361 m_commentWidget = commentWidget;
362
363 return commentWidget;
364}
365#endif
366
367QWidget* KFileMetaDataProvider::Private::createValueWidget(const QString& value, QWidget* parent)
368{
369 ValueWidget* valueWidget = new ValueWidget(parent);
370 valueWidget->setWordWrap(true);
371 valueWidget->setAlignment(Qt::AlignTop | Qt::AlignLeft);
372 valueWidget->setText(m_readOnly ? plainText(value) : value);
373 connect(valueWidget, SIGNAL(linkActivated(QString)), q, SLOT(slotLinkActivated(QString)));
374 return valueWidget;
375}
376
377KFileMetaDataProvider::KFileMetaDataProvider(QObject* parent) :
378 QObject(parent),
379 d(new Private(this))
380{
381}
382
383KFileMetaDataProvider::~KFileMetaDataProvider()
384{
385 delete d;
386}
387
388void KFileMetaDataProvider::setItems(const KFileItemList& items)
389{
390 d->m_fileItems = items;
391
392#ifndef KIO_NO_NEPOMUK
393 if (items.isEmpty()) {
394 return;
395 }
396 Q_PRIVATE_SLOT(d,void slotDataChangeStarted())
397 Q_PRIVATE_SLOT(d,void slotDataChangeFinished())
398 QList<KUrl> urls;
399 foreach (const KFileItem& item, items) {
400 const KUrl url = item.nepomukUri();
401 if (url.isValid()) {
402 urls.append(url);
403 }
404 }
405
406 d->m_latestMetaDataReader = new KFileMetaDataReader(urls);
407 d->m_latestMetaDataReader->setReadContextData(d->m_nepomukActivated);
408 connect(d->m_latestMetaDataReader, SIGNAL(finished()), this, SLOT(slotLoadingFinished()));
409 d->m_metaDataReaders.append(d->m_latestMetaDataReader);
410 d->m_latestMetaDataReader->start();
411#endif
412}
413
414QString KFileMetaDataProvider::label(const KUrl& metaDataUri) const
415{
416 struct TranslationItem {
417 const char* const key;
418 const char* const context;
419 const char* const value;
420 };
421
422 static const TranslationItem translations[] = {
423 { "kfileitem#comment", I18N_NOOP2_NOSTRIP("@label", "Comment") },
424 { "kfileitem#modified", I18N_NOOP2_NOSTRIP("@label", "Modified") },
425 { "kfileitem#owner", I18N_NOOP2_NOSTRIP("@label", "Owner") },
426 { "kfileitem#permissions", I18N_NOOP2_NOSTRIP("@label", "Permissions") },
427 { "kfileitem#rating", I18N_NOOP2_NOSTRIP("@label", "Rating") },
428 { "kfileitem#size", I18N_NOOP2_NOSTRIP("@label", "Size") },
429 { "kfileitem#tags", I18N_NOOP2_NOSTRIP("@label", "Tags") },
430 { "kfileitem#totalSize", I18N_NOOP2_NOSTRIP("@label", "Total Size") },
431 { "kfileitem#type", I18N_NOOP2_NOSTRIP("@label", "Type") },
432 { 0, 0, 0} // Mandatory last entry
433 };
434
435 static QHash<QString, QString> hash;
436 if (hash.isEmpty()) {
437 const TranslationItem* item = &translations[0];
438 while (item->key != 0) {
439 hash.insert(item->key, i18nc(item->context, item->value));
440 ++item;
441 }
442 }
443
444 QString value = hash.value(metaDataUri.url());
445 if (value.isEmpty()) {
446 value = KNfoTranslator::instance().translation(metaDataUri);
447 }
448
449 return value;
450}
451
452QString KFileMetaDataProvider::group(const KUrl& metaDataUri) const
453{
454 QString group; // return value
455
456 const QString uri = metaDataUri.url();
457 if (uri == QLatin1String("kfileitem#type")) {
458 group = QLatin1String("0FileItemA");
459 } else if (uri == QLatin1String("kfileitem#size")) {
460 group = QLatin1String("0FileItemB");
461 } else if (uri == QLatin1String("http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#width")) {
462 group = QLatin1String("0SizeA");
463 } else if (uri == QLatin1String("http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#height")) {
464 group = QLatin1String("0SizeB");
465 }
466
467 return group;
468}
469
470KFileItemList KFileMetaDataProvider::items() const
471{
472 return d->m_fileItems;
473}
474
475void KFileMetaDataProvider::setReadOnly(bool readOnly)
476{
477 d->m_readOnly = readOnly;
478}
479
480bool KFileMetaDataProvider::isReadOnly() const
481{
482 return d->m_readOnly;
483}
484
485#ifndef KIO_NO_NEPOMUK
486QHash<KUrl, Nepomuk::Variant> KFileMetaDataProvider::data() const
487{
488 return d->m_data;
489}
490
491QWidget* KFileMetaDataProvider::createValueWidget(const KUrl& metaDataUri,
492 const Nepomuk::Variant& value,
493 QWidget* parent) const
494{
495 Q_ASSERT(parent != 0);
496 QWidget* widget = 0;
497
498 if (d->m_nepomukActivated) {
499 const QString uri = metaDataUri.url();
500 if (uri == QLatin1String("kfileitem#rating")) {
501 widget = d->createRatingWidget(value.toInt(), parent);
502 } else if (uri == QLatin1String("kfileitem#tags")) {
503 const QStringList tagNames = value.toStringList();
504 QList<Nepomuk::Tag> tags;
505 foreach (const QString& tagName, tagNames) {
506 tags.append(Nepomuk::Tag(tagName));
507 }
508
509 widget = d->createTagWidget(tags, parent);
510 } else if (uri == QLatin1String("kfileitem#comment")) {
511 widget = d->createCommentWidget(value.toString(), parent);
512 }
513 }
514
515 if (widget == 0) {
516 widget = d->createValueWidget(value.toString(), parent);
517 }
518
519 widget->setForegroundRole(parent->foregroundRole());
520 widget->setFont(parent->font());
521
522 return widget;
523}
524#endif
525
526int KFileMetaDataProvider::Private::subDirectoriesCount(const QString& path)
527{
528#ifdef Q_WS_WIN
529 QDir dir(path);
530 return dir.entryList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::System).count();
531#else
532 // Taken from kdelibs/kio/kio/kdirmodel.cpp
533 // Copyright (C) 2006 David Faure <faure@kde.org>
534
535 int count = -1;
536 DIR* dir = ::opendir(QFile::encodeName(path));
537 if (dir) {
538 count = 0;
539 struct dirent *dirEntry = 0;
540 while ((dirEntry = ::readdir(dir))) { // krazy:exclude=syscalls
541 if (dirEntry->d_name[0] == '.') {
542 if (dirEntry->d_name[1] == '\0') {
543 // Skip "."
544 continue;
545 }
546 if (dirEntry->d_name[1] == '.' && dirEntry->d_name[2] == '\0') {
547 // Skip ".."
548 continue;
549 }
550 }
551 ++count;
552 }
553 ::closedir(dir);
554 }
555 return count;
556#endif
557}
558
559#include "kfilemetadataprovider_p.moc"
KCommentWidget
Allows to edit and show a comment as part of KMetaDataWidget.
Definition: kcommentwidget_p.h:33
KCommentWidget::setText
void setText(const QString &comment)
Definition: kcommentwidget.cpp:58
KCommentWidget::setReadOnly
void setReadOnly(bool readOnly)
If set to true, the comment cannot be changed by the user.
Definition: kcommentwidget.cpp:85
KFileItemList
List of KFileItems, which adds a few helper methods to QList<KFileItem>.
Definition: kfileitem.h:675
KFileItem
A KFileItem is a generic class to handle a file, local or remote.
Definition: kfileitem.h:46
KFileItem::time
KDateTime time(FileTimes which) const
Requests the modification, access or creation time, depending on which.
Definition: kfileitem.cpp:655
KFileItem::user
QString user() const
Returns the owner of the file.
Definition: kfileitem.cpp:681
KFileItem::size
KIO::filesize_t size() const
Returns the size of the file, if known.
Definition: kfileitem.cpp:610
KFileItem::ModificationTime
@ ModificationTime
Definition: kfileitem.h:58
KFileItem::isLink
bool isLink() const
Returns true if this item represents a link in the UNIX sense of a link.
Definition: kfileitem.cpp:1567
KFileItem::nepomukUri
KUrl nepomukUri() const
Returns the resource URI to be used for Nepomuk annotations.
Definition: kfileitem.cpp:1616
KFileItem::isDir
bool isDir() const
Returns true if this item represents a directory.
Definition: kfileitem.cpp:1141
KFileItem::url
KUrl url() const
Returns the url of the file.
Definition: kfileitem.cpp:1543
KFileItem::permissionsString
QString permissionsString() const
Returns the access permissions for the file as a string.
Definition: kfileitem.cpp:1403
KFileItem::mimeComment
QString mimeComment() const
Returns the user-readable string representing the type of this file, like "OpenDocument Text File".
Definition: kfileitem.cpp:823
KFileMetaDataProvider
Provides the data for the KMetaDataWidget.
Definition: kfilemetadataprovider_p.h:51
KFileMetaDataProvider::setReadOnly
void setReadOnly(bool readOnly)
If set to true, data such as the comment, tag or rating cannot be changed by the user.
Definition: kfilemetadataprovider.cpp:475
KFileMetaDataProvider::isReadOnly
bool isReadOnly() const
Definition: kfilemetadataprovider.cpp:480
KFileMetaDataProvider::data
virtual QHash< KUrl, Nepomuk::Variant > data() const
Definition: kfilemetadataprovider.cpp:486
KFileMetaDataProvider::label
virtual QString label(const KUrl &metaDataUri) const
Definition: kfilemetadataprovider.cpp:414
KFileMetaDataProvider::group
virtual QString group(const KUrl &metaDataUri) const
Meta data items are sorted alphabetically by their translated label per default.
Definition: kfilemetadataprovider.cpp:452
KFileMetaDataProvider::KFileMetaDataProvider
KFileMetaDataProvider(QObject *parent=0)
Definition: kfilemetadataprovider.cpp:377
KFileMetaDataProvider::setItems
void setItems(const KFileItemList &items)
Sets the items, where the meta data should be requested.
Definition: kfilemetadataprovider.cpp:388
KFileMetaDataProvider::items
KFileItemList items() const
Definition: kfilemetadataprovider.cpp:470
KFileMetaDataProvider::createValueWidget
virtual QWidget * createValueWidget(const KUrl &metaDataUri, const Nepomuk::Variant &value, QWidget *parent) const
Definition: kfilemetadataprovider.cpp:491
KFileMetaDataProvider::~KFileMetaDataProvider
virtual ~KFileMetaDataProvider()
Definition: kfilemetadataprovider.cpp:383
KFileMetaDataReader
Provides metadata extracted from files.
Definition: kfilemetadatareader_p.h:44
KFileMetaDataReader::metaData
QHash< KUrl, Nepomuk::Variant > metaData() const
Definition: kfilemetadatareader.cpp:141
KJob
KJob::start
virtual void start()=0
KLocale::FancyLongDate
FancyLongDate
KNfoTranslator::instance
static KNfoTranslator & instance()
Definition: knfotranslator.cpp:121
KNfoTranslator::translation
QString translation(const KUrl &uri) const
Definition: knfotranslator.cpp:126
KRatingWidget
KRatingWidget::setAlignment
void setAlignment(Qt::Alignment align)
KRatingWidget::setRating
void setRating(int rating)
KRatingWidget::setPixmapSize
void setPixmapSize(int size)
KRatingWidget::layoutDirection
Qt::LayoutDirection layoutDirection() const
KUrl
KUrl::pathOrUrl
QString pathOrUrl() const
KUrl::url
QString url(AdjustPathOption trailing=LeaveTrailingSlash) const
QHash
QLabel
QList
QObject
QWidget
kcommentwidget_p.h
kfileitem.h
kfilemetadataprovider_p.h
kfilemetadatareader_p.h
klocale.h
I18N_NOOP2_NOSTRIP
#define I18N_NOOP2_NOSTRIP(ctxt, text)
i18nc
QString i18nc(const char *ctxt, const char *text)
i18ncp
QString i18ncp(const char *ctxt, const char *sing, const char *plur, const A1 &a1)
knfotranslator_p.h
kratingwidget.h
kstandarddirs.h
kurl.h
KGlobal::locale
KLocale * locale()
KIO::convertSize
QString convertSize(KIO::filesize_t size)
Converts size from bytes to the string representation.
Definition: global.cpp:53
group
group
KRecentDirs::list
QStringList list(const QString &fileClass)
Returns a list of directories associated with this file-class.
Definition: krecentdirs.cpp:60
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KIO

Skip menu "KIO"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal