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

KIO

  • sources
  • kde-4.12
  • kdelibs
  • 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 
57 namespace {
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.
85 class ValueWidget : public QLabel
86 {
87 public:
88  explicit ValueWidget(QWidget* parent = 0);
89  virtual QSize sizeHint() const;
90 };
91 
92 ValueWidget::ValueWidget(QWidget* parent) :
93  QLabel(parent)
94 {
95 }
96 
97 QSize 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 
109 class KFileMetaDataProvider::Private
110 {
111 
112 public:
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 
161 private:
162  KFileMetaDataProvider* const q;
163 };
164 
165 KFileMetaDataProvider::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 
184 KFileMetaDataProvider::Private::~Private()
185 {
186 #ifndef KIO_NO_NEPOMUK
187  qDeleteAll(m_metaDataReaders);
188 #endif
189 }
190 
191 void 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 
248 void 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 
258 void 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 
272 void 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 
282 void 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 
291 void KFileMetaDataProvider::Private::slotLinkActivated(const QString& link)
292 {
293  emit q->urlActivated(KUrl(link));
294 }
295 
296 void 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
305 QList<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 
316 QWidget* 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 
334 QWidget* 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 
352 QWidget* 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 
367 QWidget* 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 
377 KFileMetaDataProvider::KFileMetaDataProvider(QObject* parent) :
378  QObject(parent),
379  d(new Private(this))
380 {
381 }
382 
383 KFileMetaDataProvider::~KFileMetaDataProvider()
384 {
385  delete d;
386 }
387 
388 void 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 
414 QString 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 
452 QString 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 
470 KFileItemList KFileMetaDataProvider::items() const
471 {
472  return d->m_fileItems;
473 }
474 
475 void KFileMetaDataProvider::setReadOnly(bool readOnly)
476 {
477  d->m_readOnly = readOnly;
478 }
479 
480 bool KFileMetaDataProvider::isReadOnly() const
481 {
482  return d->m_readOnly;
483 }
484 
485 #ifndef KIO_NO_NEPOMUK
486 QHash<KUrl, Nepomuk::Variant> KFileMetaDataProvider::data() const
487 {
488  return d->m_data;
489 }
490 
491 QWidget* 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 
526 int 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"
KRatingWidget::setRating
void setRating(int rating)
KFileMetaDataReader
Provides metadata extracted from files.
Definition: kfilemetadatareader_p.h:43
KFileItem::isDir
bool isDir() const
Returns true if this item represents a directory.
Definition: kfileitem.cpp:1147
KRatingWidget::setAlignment
void setAlignment(Qt::Alignment align)
KFileMetaDataProvider
Provides the data for the KMetaDataWidget.
Definition: kfilemetadataprovider_p.h:50
KFileItem::nepomukUri
KUrl nepomukUri() const
Returns the resource URI to be used for Nepomuk annotations.
Definition: kfileitem.cpp:1622
KCommentWidget::setReadOnly
void setReadOnly(bool readOnly)
If set to true, the comment cannot be changed by the user.
Definition: kcommentwidget.cpp:85
KCommentWidget
Allows to edit and show a comment as part of KMetaDataWidget.
Definition: kcommentwidget_p.h:32
kurl.h
KFileItem::user
QString user() const
Returns the owner of the file.
Definition: kfileitem.cpp:681
QWidget
KRatingWidget::setPixmapSize
void setPixmapSize(int size)
QString
QHash< KUrl, Nepomuk::Variant >
QObject
klocale.h
KUrl
i18nc
QString i18nc(const char *ctxt, const char *text)
kcommentwidget_p.h
KFileMetaDataProvider::items
KFileItemList items() const
Definition: kfilemetadataprovider.cpp:470
KFileMetaDataProvider::~KFileMetaDataProvider
virtual ~KFileMetaDataProvider()
Definition: kfilemetadataprovider.cpp:383
I18N_NOOP2_NOSTRIP
#define I18N_NOOP2_NOSTRIP(ctxt, text)
kfilemetadatareader_p.h
KFileMetaDataProvider::data
virtual QHash< KUrl, Nepomuk::Variant > data() const
Definition: kfilemetadataprovider.cpp:486
KFileItem::ModificationTime
Definition: kfileitem.h:58
i18ncp
QString i18ncp(const char *ctxt, const char *sing, const char *plur, const A1 &a1)
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
QStringList
KUrl::pathOrUrl
QString pathOrUrl() const
KFileItemList
List of KFileItems, which adds a few helper methods to QList.
Definition: kfileitem.h:674
KFileItem::mimeComment
QString mimeComment() const
Returns the user-readable string representing the type of this file, like "OpenDocument Text File"...
Definition: kfileitem.cpp:823
KIO::link
CopyJob * link(const KUrl &src, const KUrl &destDir, JobFlags flags=DefaultFlags)
Create a link.
Definition: copyjob.cpp:2212
KFileMetaDataReader::metaData
QHash< KUrl, Nepomuk::Variant > metaData() const
Definition: kfilemetadatareader.cpp:141
KFileItem::size
KIO::filesize_t size() const
Returns the size of the file, if known.
Definition: kfileitem.cpp:610
KRatingWidget::layoutDirection
Qt::LayoutDirection layoutDirection() const
KFileItem::permissionsString
QString permissionsString() const
Returns the access permissions for the file as a string.
Definition: kfileitem.cpp:1409
KNfoTranslator::translation
QString translation(const KUrl &uri) const
Definition: knfotranslator.cpp:126
KFileMetaDataProvider::createValueWidget
virtual QWidget * createValueWidget(const KUrl &metaDataUri, const Nepomuk::Variant &value, QWidget *parent) const
Definition: kfilemetadataprovider.cpp:491
KFileItem::isLink
bool isLink() const
Returns true if this item represents a link in the UNIX sense of a link.
Definition: kfileitem.cpp:1573
KGlobal::locale
KLocale * locale()
KNfoTranslator::instance
static KNfoTranslator & instance()
Definition: knfotranslator.cpp:121
KFileItem::time
KDateTime time(FileTimes which) const
Requests the modification, access or creation time, depending on which.
Definition: kfileitem.cpp:655
KRecentDirs::dir
QString dir(const QString &fileClass)
Returns the most recently used directory accociated with this file-class.
Definition: krecentdirs.cpp:68
KFileMetaDataProvider::label
virtual QString label(const KUrl &metaDataUri) const
Definition: kfilemetadataprovider.cpp:414
KFileMetaDataProvider::setItems
void setItems(const KFileItemList &items)
Sets the items, where the meta data should be requested.
Definition: kfilemetadataprovider.cpp:388
kstandarddirs.h
quint64
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
QLabel
KFileMetaDataProvider::KFileMetaDataProvider
KFileMetaDataProvider(QObject *parent=0)
Definition: kfilemetadataprovider.cpp:377
KRatingWidget
KFileMetaDataProvider::isReadOnly
bool isReadOnly() const
Definition: kfilemetadataprovider.cpp:480
QSize
knfotranslator_p.h
KUrl::url
QString url(AdjustPathOption trailing=LeaveTrailingSlash) const
kratingwidget.h
kfilemetadataprovider_p.h
KLocale::FancyLongDate
KIO::convertSize
QString convertSize(KIO::filesize_t size)
Converts size from bytes to the string representation.
Definition: global.cpp:53
KCommentWidget::setText
void setText(const QString &comment)
Definition: kcommentwidget.cpp:58
KJob
kfileitem.h
KFileItem::url
KUrl url() const
Returns the url of the file.
Definition: kfileitem.cpp:1549
KFileItem
A KFileItem is a generic class to handle a file, local or remote.
Definition: kfileitem.h:45
QList
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-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:50:02 by doxygen 1.8.7 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 API Reference

Skip menu "kdelibs 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
  • kjsembed
  •   WTF
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Nepomuk-Core
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



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