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

KIO

  • 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
44class KFileMetaDataConfigurationWidget::Private
45{
46public:
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
68private:
69 KFileMetaDataConfigurationWidget* const q;
70};
71
72KFileMetaDataConfigurationWidget::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
93KFileMetaDataConfigurationWidget::Private::~Private()
94{
95}
96
97void 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
106void 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
150void 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
166KFileMetaDataConfigurationWidget::KFileMetaDataConfigurationWidget(QWidget* parent) :
167 QWidget(parent),
168 d(new Private(this))
169{
170}
171
172KFileMetaDataConfigurationWidget::~KFileMetaDataConfigurationWidget()
173{
174 delete d;
175}
176
177void KFileMetaDataConfigurationWidget::setItems(const KFileItemList& items)
178{
179 d->m_fileItems = items;
180}
181
182KFileItemList KFileMetaDataConfigurationWidget::items() const
183{
184 return d->m_fileItems;
185}
186
187void 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
203bool 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
213QSize KFileMetaDataConfigurationWidget::sizeHint() const
214{
215 return d->m_metaDataList->sizeHint();
216}
217
218
219#include "kfilemetadataconfigurationwidget.moc"
KConfigGroup
KConfigGroup::writeEntry
void writeEntry(const char *key, const char *value, WriteConfigFlags pFlags=Normal)
KConfigGroup::readEntry
QString readEntry(const char *key, const char *aDefault=0) const
KConfigGroup::sync
void sync()
KConfig
KConfig::NoGlobals
NoGlobals
KFileItemList
List of KFileItems, which adds a few helper methods to QList<KFileItem>.
Definition: kfileitem.h:675
KFileMetaDataConfigurationWidget
Widget which allows to configure which meta data should be shown in the KFileMetaDataWidget.
Definition: kfilemetadataconfigurationwidget.h:47
KFileMetaDataConfigurationWidget::~KFileMetaDataConfigurationWidget
virtual ~KFileMetaDataConfigurationWidget()
Definition: kfilemetadataconfigurationwidget.cpp:172
KFileMetaDataConfigurationWidget::event
virtual bool event(QEvent *event)
Definition: kfilemetadataconfigurationwidget.cpp:203
KFileMetaDataConfigurationWidget::save
void save()
Saves the modified configuration.
Definition: kfilemetadataconfigurationwidget.cpp:187
KFileMetaDataConfigurationWidget::KFileMetaDataConfigurationWidget
KFileMetaDataConfigurationWidget(QWidget *parent=0)
Definition: kfilemetadataconfigurationwidget.cpp:166
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
KFileMetaDataConfigurationWidget::items
KFileItemList items() const
Definition: kfilemetadataconfigurationwidget.cpp:182
KFileMetaDataConfigurationWidget::sizeHint
virtual QSize sizeHint() const
Definition: kfilemetadataconfigurationwidget.cpp:213
KFileMetaDataProvider
Provides the data for the KMetaDataWidget.
Definition: kfilemetadataprovider_p.h:51
KNfoTranslator::instance
static KNfoTranslator & instance()
Definition: knfotranslator.cpp:121
KNfoTranslator::translation
QString translation(const KUrl &uri) const
Definition: knfotranslator.cpp:126
KUrl
KUrl::url
QString url(AdjustPathOption trailing=LeaveTrailingSlash) const
QHash
QListWidget
QWidget
kconfig.h
kconfiggroup.h
kfilemetadataconfigurationwidget.h
kfilemetadataprovider_p.h
kfilemetainfo.h
kfilemetainfoitem.h
klocale.h
knfotranslator_p.h
config
KSharedConfigPtr config()
label
QString label(StandardShortcut id)
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