]> cloud.milkyroute.net Git - dolphin.git/blob - src/panels/information/kmetadataconfigurationdialog.cpp
Remove connection to non-existent slot.
[dolphin.git] / src / panels / information / kmetadataconfigurationdialog.cpp
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 version 2 as published by the Free Software Foundation. *
7 * *
8 * This library is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
11 * Library General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU Library General Public License *
14 * along with this library; see the file COPYING.LIB. If not, write to *
15 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, *
16 * Boston, MA 02110-1301, USA. *
17 *****************************************************************************/
18
19 #include "kmetadataconfigurationdialog.h"
20
21
22 #include <kfilemetainfo.h>
23 #include <kfilemetainfoitem.h>
24 #include "kmetadatamodel.h"
25 #include "kmetadatawidget.h"
26 #include "knfotranslator_p.h"
27 #include <klocale.h>
28
29 #include <config-nepomuk.h>
30 #ifdef HAVE_NEPOMUK
31 #define DISABLE_NEPOMUK_LEGACY
32 #include <nepomuk/resource.h>
33 #include <nepomuk/resourcemanager.h>
34 #include <nepomuk/property.h>
35 #include <nepomuk/variant.h>
36 #endif
37
38 #include <QLabel>
39 #include <QListWidget>
40 #include <QVBoxLayout>
41
42 class KMetaDataConfigurationDialog::Private
43 {
44 public:
45 Private(KMetaDataConfigurationDialog* parent, KMetaDataWidget* metaDataWidget);
46 ~Private();
47
48 void init();
49 void loadMetaData();
50 void addItem(const KUrl& uri);
51
52 void slotLoadingFinished();
53
54 int m_visibleDataTypes;
55 QLabel* m_descriptionLabel;
56 KMetaDataWidget* m_metaDataWidget;
57 QListWidget* m_metaDataList;
58
59 private:
60 KMetaDataConfigurationDialog* const q;
61 };
62
63 KMetaDataConfigurationDialog::Private::Private(KMetaDataConfigurationDialog* parent,
64 KMetaDataWidget* metaDataWidget) :
65 q(parent)
66 {
67 m_visibleDataTypes = 0;
68 m_metaDataWidget = metaDataWidget;
69
70 q->setCaption(i18nc("@title:window", "Configure Shown Data"));
71 q->setButtons(KDialog::Ok | KDialog::Cancel);
72 q->setDefaultButton(KDialog::Ok);
73
74 QWidget* mainWidget = new QWidget(q);
75 QVBoxLayout* topLayout = new QVBoxLayout(mainWidget);
76
77 m_descriptionLabel = new QLabel(i18nc("@label::textbox",
78 "Configure which data should "
79 "be shown"), q);
80 m_descriptionLabel->setWordWrap(true);
81
82 m_metaDataList = new QListWidget(q);
83 m_metaDataList->setSelectionMode(QAbstractItemView::NoSelection);
84 m_metaDataList->setSortingEnabled(true);
85
86 topLayout->addWidget(m_descriptionLabel);
87 topLayout->addWidget(m_metaDataList);
88
89 q->setMainWidget(mainWidget);
90
91 loadMetaData();
92
93 const KConfigGroup dialogConfig(KGlobal::config(), "Nepomuk KMetaDataConfigurationDialog");
94 q->restoreDialogSize(dialogConfig);
95 }
96
97 KMetaDataConfigurationDialog::Private::~Private()
98 {
99 KConfigGroup dialogConfig(KGlobal::config(), "Nepomuk KMetaDataConfigurationDialog");
100 q->saveDialogSize(dialogConfig, KConfigBase::Persistent);
101 }
102
103 void KMetaDataConfigurationDialog::Private::loadMetaData()
104 {
105 KConfig config("kmetainformationrc", KConfig::NoGlobals);
106 KConfigGroup settings = config.group("Show");
107
108 // Add fixed meta data items where the visibility does not
109 // depend on the currently used URL.
110 KMetaDataWidget::MetaDataTypes visibleDataTypes = KMetaDataWidget::TypeData |
111 KMetaDataWidget::SizeData |
112 KMetaDataWidget::ModifiedData |
113 KMetaDataWidget::OwnerData |
114 KMetaDataWidget::PermissionsData |
115 KMetaDataWidget::RatingData |
116 KMetaDataWidget::TagsData |
117 KMetaDataWidget::CommentData;
118 if (m_metaDataWidget != 0) {
119 visibleDataTypes = m_metaDataWidget->visibleDataTypes();
120 }
121
122 typedef QPair<QString, QString> FixedItem;
123 QList<FixedItem> fixedItems;
124 if (visibleDataTypes & KMetaDataWidget::TypeData) {
125 fixedItems.append(FixedItem("kfileitem#type", i18nc("@item::inlistbox", "Type")));
126 }
127 if (visibleDataTypes & KMetaDataWidget::SizeData) {
128 fixedItems.append(FixedItem("kfileitem#size", i18nc("@item::inlistbox", "Size")));
129 }
130 if (visibleDataTypes & KMetaDataWidget::ModifiedData) {
131 fixedItems.append(FixedItem("kfileitem#modified", i18nc("@item::inlistbox", "Modified")));
132 }
133 if (visibleDataTypes & KMetaDataWidget::OwnerData) {
134 fixedItems.append(FixedItem("kfileitem#owner", i18nc("@item::inlistbox", "Owner")));
135 }
136 if (visibleDataTypes & KMetaDataWidget::PermissionsData) {
137 fixedItems.append(FixedItem("kfileitem#permissions", i18nc("@item::inlistbox", "Permissions")));
138 }
139
140 foreach (const FixedItem& fixedItem, fixedItems) {
141 const QString key = fixedItem.first;
142 const QString label = fixedItem.second;
143 QListWidgetItem* item = new QListWidgetItem(label, m_metaDataList);
144 item->setData(Qt::UserRole, key);
145 const bool show = settings.readEntry(key, true);
146 item->setCheckState(show ? Qt::Checked : Qt::Unchecked);
147 }
148
149 #ifdef HAVE_NEPOMUK
150 if ((m_metaDataWidget == 0) || (m_metaDataWidget->items().count() != 1)) {
151 return;
152 }
153
154 // Get all meta information labels that are available for
155 // the currently shown file item and add them to the list.
156 KMetaDataModel* model = m_metaDataWidget->model();
157 if (model != 0) {
158 const QHash<KUrl, Nepomuk::Variant> data = model->data();
159 QHash<KUrl, Nepomuk::Variant>::const_iterator it = data.constBegin();
160 while (it != data.constEnd()) {
161 addItem(it.key());
162 ++it;
163 }
164 }
165 #endif
166 }
167
168 void KMetaDataConfigurationDialog::Private::addItem(const KUrl& uri)
169 {
170 // Meta information provided by Nepomuk that is already
171 // available from KFileItem as "fixed item" (see above)
172 // should not be shown as second entry.
173 static const char* const hiddenProperties[] = {
174 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#comment", // = fixed item kfileitem#comment
175 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#contentSize", // = fixed item kfileitem#size
176 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#lastModified", // = fixed item kfileitem#modified
177 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#plainTextContent" // hide this property always
178 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#mimeType", // = fixed item kfileitem#type
179 "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#fileName", // hide this property always
180 "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", // = fixed item kfileitem#type
181 0 // mandatory last entry
182 };
183
184 int i = 0;
185 const QString key = uri.url();
186 while (hiddenProperties[i] != 0) {
187 if (key == QLatin1String(hiddenProperties[i])) {
188 // the item is hidden
189 return;
190 }
191 ++i;
192 }
193
194 // the item is not hidden, add it to the list
195 KConfig config("kmetainformationrc", KConfig::NoGlobals);
196 KConfigGroup settings = config.group("Show");
197
198 const QString label = (m_metaDataWidget == 0)
199 ? KNfoTranslator::instance().translation(uri)
200 : m_metaDataWidget->label(uri);
201
202 QListWidgetItem* item = new QListWidgetItem(label, m_metaDataList);
203 item->setData(Qt::UserRole, key);
204 const bool show = settings.readEntry(key, true);
205 item->setCheckState(show ? Qt::Checked : Qt::Unchecked);
206 }
207
208 KMetaDataConfigurationDialog::KMetaDataConfigurationDialog(QWidget* parent,
209 Qt::WFlags flags) :
210 KDialog(parent, flags),
211 d(new Private(this, 0))
212 {
213 }
214
215 KMetaDataConfigurationDialog::KMetaDataConfigurationDialog(KMetaDataWidget* metaDataWidget,
216 QWidget* parent,
217 Qt::WFlags flags) :
218 KDialog(parent, flags),
219 d(new Private(this, metaDataWidget))
220 {
221 }
222
223 KMetaDataConfigurationDialog::~KMetaDataConfigurationDialog()
224 {
225 delete d;
226 }
227
228 void KMetaDataConfigurationDialog::slotButtonClicked(int button)
229 {
230 if (button == KDialog::Ok) {
231 KConfig config("kmetainformationrc", KConfig::NoGlobals);
232 KConfigGroup showGroup = config.group("Show");
233
234 const int count = d->m_metaDataList->count();
235 for (int i = 0; i < count; ++i) {
236 QListWidgetItem* item = d->m_metaDataList->item(i);
237 const bool show = (item->checkState() == Qt::Checked);
238 const QString key = item->data(Qt::UserRole).toString();
239 showGroup.writeEntry(key, show);
240 }
241
242 showGroup.sync();
243
244 if (d->m_metaDataWidget != 0) {
245 // trigger an update
246 d->m_metaDataWidget->setVisibleDataTypes(d->m_metaDataWidget->visibleDataTypes());
247 }
248 accept();
249 } else {
250 KDialog::slotButtonClicked(button);
251 }
252 }
253
254 void KMetaDataConfigurationDialog::setDescription(const QString& description)
255 {
256 d->m_descriptionLabel->setText(description);
257 }
258
259 QString KMetaDataConfigurationDialog::description() const
260 {
261 return d->m_descriptionLabel->text();
262 }
263
264 #include "kmetadataconfigurationdialog.moc"