21 #include "kfilemetadatawidget.h"
24 #include <kconfiggroup.h>
27 #include <QGridLayout>
33 #include <config-kdelibs4support.h>
35 #define DISABLE_NEPOMUK_LEGACY
40 #include <QSpacerItem>
42 #include "kfilemetadataprovider_p.h"
61 void initMetaInfoSettings();
68 void updateFileItemRowsVisibility();
72 void slotLoadingFinished();
73 void slotLinkActivated(
const QString &link);
74 void slotDataChangeStarted();
75 void slotDataChangeFinished();
84 bool hasNepomukUris()
const;
89 KFileMetaDataProvider *m_provider;
102 m_gridLayout(nullptr),
105 initMetaInfoSettings();
110 m_provider =
new KFileMetaDataProvider(q);
111 connect(m_provider, SIGNAL(loadingFinished()), q, SLOT(slotLoadingFinished()));
112 connect(m_provider, SIGNAL(urlActivated(
QUrl)), q, SIGNAL(urlActivated(
QUrl)));
116 KFileMetaDataWidget::Private::~Private()
120 void KFileMetaDataWidget::Private::initMetaInfoSettings()
122 const int currentVersion = 3;
126 if (
config.group(
"Misc").readEntry(
"version", 0) < currentVersion) {
131 config.deleteGroup(
"Show");
134 static const char *
const disabledProperties[] = {
135 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#comment",
136 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#contentSize",
137 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#depends",
138 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#isPartOf",
139 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#lastModified",
140 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#mimeType",
141 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#plainTextContent",
142 "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#url",
143 "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#averageBitrate",
144 "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#channels",
145 "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#fileName",
146 "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#apertureValue",
147 "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#exposureBiasValue",
148 "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#exposureTime",
149 "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#flash",
150 "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#focalLength",
151 "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#focalLengthIn35mmFilm",
152 "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#isoSpeedRatings",
153 "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#make",
154 "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#meteringMode",
155 "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#model",
156 "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#orientation",
157 "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#whiteBalance",
158 "http://www.semanticdesktop.org/ontologies/2007/08/15/nao#description",
159 "http://www.semanticdesktop.org/ontologies/2007/08/15/nao#hasTag",
160 "http://www.semanticdesktop.org/ontologies/2007/08/15/nao#lastModified",
161 "http://www.semanticdesktop.org/ontologies/2007/08/15/nao#numericRating",
162 "http://www.w3.org/1999/02/22-rdf-syntax-ns#type",
164 "kfileitem#permissions",
168 for (
int i = 0; disabledProperties[i] !=
nullptr; ++i) {
169 settings.
writeEntry(disabledProperties[i],
false);
173 config.group(
"Misc").writeEntry(
"version", currentVersion);
177 void KFileMetaDataWidget::Private::deleteRows()
179 foreach (
const Row &row, m_rows) {
186 void KFileMetaDataWidget::Private::slotLoadingFinished()
191 if (!hasNepomukUris()) {
193 emit q->metaDataRequestFinished(m_provider->items());
197 if (m_gridLayout == 0) {
199 m_gridLayout->setContentsMargins(0, 0, 0, 0);
200 m_gridLayout->setSpacing(q->fontMetrics().height() / 4);
209 while (it != data.
end()) {
211 if (!settings.
readEntry(uriString,
true) ||
212 !Nepomuk::Types::Property(it.
key()).userVisible()) {
223 foreach (
const QUrl &key, keys) {
224 const Nepomuk::Variant value = data[key];
225 QString itemLabel = m_provider->label(key);
231 label->setForegroundRole(q->foregroundRole());
232 label->setFont(q->font());
233 label->setWordWrap(
true);
237 QWidget *valueWidget = m_provider->createValueWidget(key, value, q);
242 m_gridLayout->addItem(
new QSpacerItem(spacerWidth, 1), rowIndex, 1);
243 m_gridLayout->addWidget(valueWidget, rowIndex, 2,
Qt::AlignLeft);
248 row.value = valueWidget;
257 emit q->metaDataRequestFinished(m_provider->items());
261 void KFileMetaDataWidget::Private::slotLinkActivated(
const QString &link)
263 const QUrl url(link);
265 emit q->urlActivated(url);
269 void KFileMetaDataWidget::Private::slotDataChangeStarted()
271 q->setEnabled(
false);
274 void KFileMetaDataWidget::Private::slotDataChangeFinished()
291 QString key = m_provider->group(uri);
292 key += m_provider->label(uri);
294 map.insert(key, uri);
302 while (mapIt !=
map.constEnd()) {
310 bool KFileMetaDataWidget::Private::hasNepomukUris()
const
312 foreach (
const KFileItem &fileItem, m_provider->items()) {
313 if (fileItem.nepomukUri().isValid()) {
321 KFileMetaDataWidget::KFileMetaDataWidget(
QWidget *parent) :
327 KFileMetaDataWidget::~KFileMetaDataWidget()
337 d->m_provider->setItems(items);
344 return d->m_provider->items();
355 d->m_provider->setReadOnly(readOnly);
359 bool KFileMetaDataWidget::isReadOnly()
const
362 return d->m_provider->isReadOnly();
370 if (d->m_gridLayout ==
nullptr) {
375 int leftWidthMax = 0;
376 int rightWidthMax = 0;
377 int rightWidthAverage = 0;
378 foreach (
const Private::Row &row, d->m_rows) {
379 const QWidget *valueWidget = row.value;
380 const int rightWidth = valueWidget->
sizeHint().width();
381 rightWidthAverage += rightWidth;
382 if (rightWidth > rightWidthMax) {
383 rightWidthMax = rightWidth;
386 const int leftWidth = row.label->sizeHint().width();
387 if (leftWidth > leftWidthMax) {
388 leftWidthMax = leftWidth;
395 if (d->m_rows.count() > 1) {
396 rightWidthAverage /= d->m_rows.count();
397 if (rightWidthMax > rightWidthAverage * 2) {
398 rightWidthMax = rightWidthAverage * 2;
403 int height = d->m_gridLayout->margin() * 2 + d->m_gridLayout->spacing() * (d->m_rows.count() - 1);
404 foreach (
const Private::Row &row, d->m_rows) {
405 const QWidget *valueWidget = row.value;
406 const int rowHeight = qMax(row.label->heightForWidth(leftWidthMax),
411 const int width = d->m_gridLayout->margin() * 2 + leftWidthMax +
412 d->m_gridLayout->spacing() + rightWidthMax;
417 bool KFileMetaDataWidget::event(
QEvent *event)
422 #include "moc_kfilemetadatawidget.cpp"