• 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
kfilemetadataconfigurationwidget.cpp
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (C) 2009 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 "kfilemetadataconfigurationwidget.h"
21 
22 #include <kconfig.h>
23 #include <kconfiggroup.h>
24 #include <kfilemetainfo.h>
25 #include <kfilemetainfoitem.h>
26 #include "knfotranslator_p.h"
27 #include <klocale.h>
28 
29 #include <config-kio.h>
30 #ifndef KIO_NO_NEPOMUK
31  #define DISABLE_NEPOMUK_LEGACY
32  #include <resource.h>
33  #include <resourcemanager.h>
34  #include <property.h>
35  #include <variant.h>
36 
37  #include "kfilemetadataprovider_p.h"
38 #endif
39 
40 #include <QEvent>
41 #include <QListWidget>
42 #include <QVBoxLayout>
43 
44 class KFileMetaDataConfigurationWidget::Private
45 {
46 public:
47  Private(KFileMetaDataConfigurationWidget* parent);
48  ~Private();
49 
50  void init();
51  void loadMetaData();
52  void addItem(const KUrl& uri);
53 
59  void slotLoadingFinished();
60 
61  int m_visibleDataTypes;
62  KFileItemList m_fileItems;
63 #ifndef KIO_NO_NEPOMUK
64  KFileMetaDataProvider* m_provider;
65 #endif
66  QListWidget* m_metaDataList;
67 
68 private:
69  KFileMetaDataConfigurationWidget* const q;
70 };
71 
72 KFileMetaDataConfigurationWidget::Private::Private(KFileMetaDataConfigurationWidget* parent) :
73  m_visibleDataTypes(0),
74  m_fileItems(),
75 #ifndef KIO_NO_NEPOMUK
76  m_provider(0),
77 #endif
78  m_metaDataList(0),
79  q(parent)
80 {
81  m_metaDataList = new QListWidget(q);
82  m_metaDataList->setSelectionMode(QAbstractItemView::NoSelection);
83  m_metaDataList->setSortingEnabled(true);
84 
85  QVBoxLayout* layout = new QVBoxLayout(q);
86  layout->addWidget(m_metaDataList);
87 
88 #ifndef KIO_NO_NEPOMUK
89  m_provider = new KFileMetaDataProvider(q);
90 #endif
91 }
92 
93 KFileMetaDataConfigurationWidget::Private::~Private()
94 {
95 }
96 
97 void KFileMetaDataConfigurationWidget::Private::loadMetaData()
98 {
99 #ifndef KIO_NO_NEPOMUK
100  m_provider->setItems(m_fileItems);
101  connect(m_provider, SIGNAL(loadingFinished()),
102  q, SLOT(slotLoadingFinished()));
103 #endif
104 }
105 
106 void KFileMetaDataConfigurationWidget::Private::addItem(const KUrl& uri)
107 {
108  // Meta information provided by Nepomuk that is already
109  // available from KFileItem as "fixed item" (see above)
110  // should not be shown as second entry.
111  static const char* const hiddenProperties[] = {
112  "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#comment", // = fixed item kfileitem#comment
113  "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#contentSize", // = fixed item kfileitem#size
114  "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#lastModified", // = fixed item kfileitem#modified
115  "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#plainTextContent" // hide this property always
116  "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#mimeType", // = fixed item kfileitem#type
117  "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#fileName", // hide this property always
118  "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", // = fixed item kfileitem#type
119  0 // mandatory last entry
120  };
121 
122  int i = 0;
123  const QString key = uri.url();
124  while (hiddenProperties[i] != 0) {
125  if (key == QLatin1String(hiddenProperties[i])) {
126  // the item is hidden
127  return;
128  }
129  ++i;
130  }
131 
132  // the item is not hidden, add it to the list
133  KConfig config("kmetainformationrc", KConfig::NoGlobals);
134  KConfigGroup settings = config.group("Show");
135 
136 #ifndef KIO_NO_NEPOMUK
137  const QString label = (m_provider == 0)
138  ? KNfoTranslator::instance().translation(uri)
139  : m_provider->label(uri);
140 #else
141  const QString label = KNfoTranslator::instance().translation(uri);
142 #endif
143 
144  QListWidgetItem* item = new QListWidgetItem(label, m_metaDataList);
145  item->setData(Qt::UserRole, key);
146  const bool show = settings.readEntry(key, true);
147  item->setCheckState(show ? Qt::Checked : Qt::Unchecked);
148 }
149 
150 void KFileMetaDataConfigurationWidget::Private::slotLoadingFinished()
151 {
152 #ifndef KIO_NO_NEPOMUK
153  // Get all meta information labels that are available for
154  // the currently shown file item and add them to the list.
155  Q_ASSERT(m_provider != 0);
156 
157  const QHash<KUrl, Nepomuk::Variant> data = m_provider->data();
158  QHash<KUrl, Nepomuk::Variant>::const_iterator it = data.constBegin();
159  while (it != data.constEnd()) {
160  addItem(it.key());
161  ++it;
162  }
163 #endif
164 }
165 
166 KFileMetaDataConfigurationWidget::KFileMetaDataConfigurationWidget(QWidget* parent) :
167  QWidget(parent),
168  d(new Private(this))
169 {
170 }
171 
172 KFileMetaDataConfigurationWidget::~KFileMetaDataConfigurationWidget()
173 {
174  delete d;
175 }
176 
177 void KFileMetaDataConfigurationWidget::setItems(const KFileItemList& items)
178 {
179  d->m_fileItems = items;
180 }
181 
182 KFileItemList KFileMetaDataConfigurationWidget::items() const
183 {
184  return d->m_fileItems;
185 }
186 
187 void KFileMetaDataConfigurationWidget::save()
188 {
189  KConfig config("kmetainformationrc", KConfig::NoGlobals);
190  KConfigGroup showGroup = config.group("Show");
191 
192  const int count = d->m_metaDataList->count();
193  for (int i = 0; i < count; ++i) {
194  QListWidgetItem* item = d->m_metaDataList->item(i);
195  const bool show = (item->checkState() == Qt::Checked);
196  const QString key = item->data(Qt::UserRole).toString();
197  showGroup.writeEntry(key, show);
198  }
199 
200  showGroup.sync();
201 }
202 
203 bool KFileMetaDataConfigurationWidget::event(QEvent* event)
204 {
205  if (event->type() == QEvent::Polish) {
206  // loadMetaData() must be invoked asynchronously, as the list
207  // must finish it's initialization first
208  QMetaObject::invokeMethod(this, "loadMetaData", Qt::QueuedConnection);
209  }
210  return QWidget::event(event);;
211 }
212 
213 QSize KFileMetaDataConfigurationWidget::sizeHint() const
214 {
215  return d->m_metaDataList->sizeHint();
216 }
217 
218 
219 #include "kfilemetadataconfigurationwidget.moc"
KFileMetaDataProvider
Provides the data for the KMetaDataWidget.
Definition: kfilemetadataprovider_p.h:50
KFileMetaDataConfigurationWidget::save
void save()
Saves the modified configuration.
Definition: kfilemetadataconfigurationwidget.cpp:187
label
QString label(StandardShortcut id)
kconfig.h
QWidget
QListWidget
KFileMetaDataConfigurationWidget
Widget which allows to configure which meta data should be shown in the KFileMetaDataWidget.
Definition: kfilemetadataconfigurationwidget.h:46
KConfig::group
KConfigGroup group(const QByteArray &group)
KConfigGroup::writeEntry
void writeEntry(const QString &key, const QVariant &value, WriteConfigFlags pFlags=Normal)
KFileMetaDataConfigurationWidget::~KFileMetaDataConfigurationWidget
virtual ~KFileMetaDataConfigurationWidget()
Definition: kfilemetadataconfigurationwidget.cpp:172
QString
QHash< KUrl, Nepomuk::Variant >
klocale.h
KUrl
config
KSharedConfigPtr config()
KConfig::NoGlobals
KFileMetaDataConfigurationWidget::sizeHint
virtual QSize sizeHint() const
Definition: kfilemetadataconfigurationwidget.cpp:213
KFileItemList
List of KFileItems, which adds a few helper methods to QList.
Definition: kfileitem.h:674
kfilemetadataconfigurationwidget.h
KFileMetaDataConfigurationWidget::event
virtual bool event(QEvent *event)
Definition: kfilemetadataconfigurationwidget.cpp:203
KNfoTranslator::translation
QString translation(const KUrl &uri) const
Definition: knfotranslator.cpp:126
kfilemetainfoitem.h
KFileMetaDataConfigurationWidget::KFileMetaDataConfigurationWidget
KFileMetaDataConfigurationWidget(QWidget *parent=0)
Definition: kfilemetadataconfigurationwidget.cpp:166
KConfigGroup
KConfig
KNfoTranslator::instance
static KNfoTranslator & instance()
Definition: knfotranslator.cpp:121
kfilemetainfo.h
KFileMetaDataConfigurationWidget::items
KFileItemList items() const
Definition: kfilemetadataconfigurationwidget.cpp:182
QSize
KFileMetaDataConfigurationWidget::setItems
void setItems(const KFileItemList &items)
Sets the items, for which the visibility of the meta data should be configured.
Definition: kfilemetadataconfigurationwidget.cpp:177
knfotranslator_p.h
KUrl::url
QString url(AdjustPathOption trailing=LeaveTrailingSlash) const
KConfigGroup::sync
void sync()
kfilemetadataprovider_p.h
KConfigGroup::readEntry
T readEntry(const QString &key, const T &aDefault) const
kconfiggroup.h
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