┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/panels/information/informationpanelcontent.cpp3
-rw-r--r--src/panels/information/metadataconfigurationdialog.cpp135
-rw-r--r--src/panels/information/metadataconfigurationdialog.h20
-rw-r--r--src/panels/information/metadatawidget.cpp135
-rw-r--r--src/panels/information/metadatawidget.h67
5 files changed, 259 insertions, 101 deletions
diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp
index 41f9e2c5a..b47ee7840 100644
--- a/src/panels/information/informationpanelcontent.cpp
+++ b/src/panels/information/informationpanelcontent.cpp
@@ -307,7 +307,8 @@ void InformationPanelContent::configureSettings()
m_previewSeparator->setVisible(isChecked);
InformationPanelSettings::setShowPreview(isChecked);
} else if (action == configureAction) {
- m_metaDataWidget->openConfigurationDialog();
+ MetaDataConfigurationDialog dialog(m_metaDataWidget, this, Qt::Dialog);
+ dialog.exec();
}
showItem(m_item);
diff --git a/src/panels/information/metadataconfigurationdialog.cpp b/src/panels/information/metadataconfigurationdialog.cpp
index ec6f4d1a2..7dbacd164 100644
--- a/src/panels/information/metadataconfigurationdialog.cpp
+++ b/src/panels/information/metadataconfigurationdialog.cpp
@@ -27,6 +27,7 @@
#ifdef HAVE_NEPOMUK
#define DISABLE_NEPOMUK_LEGACY
#include <Nepomuk/Resource>
+ #include <Nepomuk/ResourceManager>
#include <Nepomuk/Types/Property>
#include <Nepomuk/Variant>
#endif
@@ -38,25 +39,56 @@
class MetaDataConfigurationDialog::Private
{
public:
- Private(MetaDataConfigurationDialog* parent);
+ Private(MetaDataConfigurationDialog* parent, MetaDataWidget* metaDataWidget);
~Private();
+ void init();
void loadMetaData();
- KUrl m_url;
+ int m_hiddenData;
+ MetaDataWidget* m_metaDataWidget;
QListWidget* m_metaDataList;
private:
MetaDataConfigurationDialog* const q;
};
-MetaDataConfigurationDialog::Private::Private(MetaDataConfigurationDialog* parent) :
+MetaDataConfigurationDialog::Private::Private(MetaDataConfigurationDialog* parent,
+ MetaDataWidget* metaDataWidget) :
q(parent)
{
+ m_hiddenData = 0;
+ m_metaDataWidget = metaDataWidget;
+
+ q->setCaption(i18nc("@title:window", "Configure Shown Data"));
+ q->setButtons(KDialog::Ok | KDialog::Cancel);
+ q->setDefaultButton(KDialog::Ok);
+
+ QWidget* mainWidget = new QWidget(q);
+ QVBoxLayout* topLayout = new QVBoxLayout(mainWidget);
+
+ QLabel* label = new QLabel(i18nc("@label:textbox",
+ "Configure which data should "
+ "be shown."), q);
+
+ m_metaDataList = new QListWidget(q);
+ m_metaDataList->setSelectionMode(QAbstractItemView::NoSelection);
+
+ topLayout->addWidget(label);
+ topLayout->addWidget(m_metaDataList);
+
+ q->setMainWidget(mainWidget);
+
+ loadMetaData();
+
+ const KConfigGroup dialogConfig(KGlobal::config(), "Nepomuk MetaDataConfigurationDialog");
+ q->restoreDialogSize(dialogConfig);
}
MetaDataConfigurationDialog::Private::~Private()
{
+ KConfigGroup dialogConfig(KGlobal::config(), "Nepomuk MetaDataConfigurationDialog");
+ q->saveDialogSize(dialogConfig, KConfigBase::Persistent);
}
void MetaDataConfigurationDialog::Private::loadMetaData()
@@ -66,17 +98,40 @@ void MetaDataConfigurationDialog::Private::loadMetaData()
// Add fixed meta data items where the visibility does not
// depend on the currently used URL.
+ int hiddenData = 0;
+ if (m_metaDataWidget != 0) {
+ hiddenData = m_metaDataWidget->hiddenData();
+ }
+
typedef QPair<QString, QString> FixedItem;
QList<FixedItem> fixedItems;
- fixedItems.append(FixedItem("type", i18nc("@item::inlistbox", "Type")));
- fixedItems.append(FixedItem("size", i18nc("@item::inlistbox", "Size")));
- fixedItems.append(FixedItem("modified", i18nc("@item::inlistbox", "Modified")));
- fixedItems.append(FixedItem("owner", i18nc("@item::inlistbox", "Owner")));
- fixedItems.append(FixedItem("permissions", i18nc("@item::inlistbox", "Permissions")));
+ if (!(hiddenData & MetaDataWidget::TypeData)) {
+ fixedItems.append(FixedItem("type", i18nc("@item::inlistbox", "Type")));
+ }
+ if (!(hiddenData & MetaDataWidget::SizeData)) {
+ fixedItems.append(FixedItem("size", i18nc("@item::inlistbox", "Size")));
+ }
+ if (!(hiddenData & MetaDataWidget::ModifiedData)) {
+ fixedItems.append(FixedItem("modified", i18nc("@item::inlistbox", "Modified")));
+ }
+ if (!(hiddenData & MetaDataWidget::OwnerData)) {
+ fixedItems.append(FixedItem("owner", i18nc("@item::inlistbox", "Owner")));
+ }
+ if (!(hiddenData & MetaDataWidget::PermissionsData)) {
+ fixedItems.append(FixedItem("permissions", i18nc("@item::inlistbox", "Permissions")));
+ }
#ifdef HAVE_NEPOMUK
- fixedItems.append(FixedItem("rating", i18nc("@item::inlistbox", "Rating")));
- fixedItems.append(FixedItem("tags", i18nc("@item::inlistbox", "Tags")));
- fixedItems.append(FixedItem("comment", i18nc("@item::inlistbox", "Comment")));
+ if (Nepomuk::ResourceManager::instance()->init() == 0) {
+ if (!(hiddenData & MetaDataWidget::RatingData)) {
+ fixedItems.append(FixedItem("rating", i18nc("@item::inlistbox", "Rating")));
+ }
+ if (!(hiddenData & MetaDataWidget::TagsData)) {
+ fixedItems.append(FixedItem("tags", i18nc("@item::inlistbox", "Tags")));
+ }
+ if (!(hiddenData & MetaDataWidget::CommentData)) {
+ fixedItems.append(FixedItem("comment", i18nc("@item::inlistbox", "Comment")));
+ }
+ }
#endif
foreach (const FixedItem& fixedItem, fixedItems) {
@@ -89,14 +144,25 @@ void MetaDataConfigurationDialog::Private::loadMetaData()
}
#ifdef HAVE_NEPOMUK
+ if (Nepomuk::ResourceManager::instance()->init() != 0) {
+ return;
+ }
+
// Get all meta information labels that are available for
// the currently shown file item and add them to the list.
- if (m_url.isEmpty()) {
+ if (m_metaDataWidget == 0) {
// TODO: in this case all available meta data from the system
// should be added.
return;
}
- Nepomuk::Resource res(m_url);
+
+ const KFileItemList items = m_metaDataWidget->items();
+ if (items.count() != 1) {
+ // TODO: handle als usecases for more than one item:
+ return;
+ }
+ Nepomuk::Resource res(items.first().nepomukUri());
+
QHash<QUrl, Nepomuk::Variant> properties = res.properties();
QHash<QUrl, Nepomuk::Variant>::const_iterator it = properties.constBegin();
while (it != properties.constEnd()) {
@@ -141,43 +207,23 @@ void MetaDataConfigurationDialog::Private::loadMetaData()
#endif
}
-MetaDataConfigurationDialog::MetaDataConfigurationDialog(const KUrl& url,
- QWidget* parent,
+MetaDataConfigurationDialog::MetaDataConfigurationDialog(QWidget* parent,
Qt::WFlags flags) :
KDialog(parent, flags),
- d(new Private(this))
+ d(new Private(this, 0))
{
- d->m_url = url;
-
- setCaption(i18nc("@title:window", "Configure Shown Data"));
- setButtons(KDialog::Ok | KDialog::Cancel);
- setDefaultButton(KDialog::Ok);
-
- QWidget* mainWidget = new QWidget(this);
- QVBoxLayout* topLayout = new QVBoxLayout(mainWidget);
-
- QLabel* label = new QLabel(i18nc("@label:textbox",
- "Configure which data should "
- "be shown."), this);
-
- d->m_metaDataList = new QListWidget(this);
- d->m_metaDataList->setSelectionMode(QAbstractItemView::NoSelection);
-
- topLayout->addWidget(label);
- topLayout->addWidget(d->m_metaDataList);
-
- setMainWidget(mainWidget);
-
- d->loadMetaData();
+}
- const KConfigGroup dialogConfig(KGlobal::config(), "Nepomuk MetaDataConfigurationDialog");
- restoreDialogSize(dialogConfig);
+MetaDataConfigurationDialog::MetaDataConfigurationDialog(MetaDataWidget* metaDataWidget,
+ QWidget* parent,
+ Qt::WFlags flags) :
+ KDialog(parent, flags),
+ d(new Private(this, metaDataWidget))
+{
}
MetaDataConfigurationDialog::~MetaDataConfigurationDialog()
{
- KConfigGroup dialogConfig(KGlobal::config(), "Nepomuk MetaDataConfigurationDialog");
- saveDialogSize(dialogConfig, KConfigBase::Persistent);
}
void MetaDataConfigurationDialog::slotButtonClicked(int button)
@@ -196,6 +242,11 @@ void MetaDataConfigurationDialog::slotButtonClicked(int button)
showGroup.sync();
+ if (d->m_metaDataWidget != 0) {
+ // trigger an update
+ const int data = d->m_metaDataWidget->hiddenData();
+ d->m_metaDataWidget->setHiddenData(data);
+ }
accept();
} else {
KDialog::slotButtonClicked(button);
diff --git a/src/panels/information/metadataconfigurationdialog.h b/src/panels/information/metadataconfigurationdialog.h
index 9dda9c190..82dc06ddf 100644
--- a/src/panels/information/metadataconfigurationdialog.h
+++ b/src/panels/information/metadataconfigurationdialog.h
@@ -22,6 +22,8 @@
#include <kdialog.h>
+class MetaDataWidget;
+
/**
* @brief Dialog which allows to configure which meta data should be shown.
*/
@@ -31,13 +33,19 @@ class MetaDataConfigurationDialog : public KDialog
public:
/**
- * @param url URL for which should be configured what kind of meta data is
- * shown. If the URL is empty, the configuration dialog will contain
- * all available meta data from the system.
- * @param parent Parent widget which opens the dialog.
- * @param flags Window flags for the dialog.
+ * Allows to configure the visibility of all available meta
+ * data.
+ */
+ MetaDataConfigurationDialog(QWidget* parent = 0,
+ Qt::WFlags flags = 0);
+
+ /**
+ * Allows to configure the visibility of the meta data
+ * shown by the meta data widget. The number of offered
+ * meta data is optimized for the set of file items
+ * that are applied to the meta data widget.
*/
- MetaDataConfigurationDialog(const KUrl& url,
+ MetaDataConfigurationDialog(MetaDataWidget* metaDataWidget,
QWidget* parent = 0,
Qt::WFlags flags = 0);
diff --git a/src/panels/information/metadatawidget.cpp b/src/panels/information/metadatawidget.cpp
index 4228ea4ea..8126292d7 100644
--- a/src/panels/information/metadatawidget.cpp
+++ b/src/panels/information/metadatawidget.cpp
@@ -20,8 +20,6 @@
#include "metadatawidget.h"
-#include "metadataconfigurationdialog.h"
-
#include <kconfig.h>
#include <kconfiggroup.h>
#include <kfileitem.h>
@@ -44,6 +42,7 @@
#include <Nepomuk/KRatingWidget>
#include <Nepomuk/Resource>
+ #include <Nepomuk/ResourceManager>
#include <Nepomuk/Types/Property>
#include <Nepomuk/Variant>
@@ -53,6 +52,8 @@
#include <QThread>
#endif
+#include <kdebug.h>
+
class MetaDataWidget::Private
{
public:
@@ -95,6 +96,7 @@ public:
*/
void startChangeDataJob(KJob* job);
+ int m_hiddenData;
QList<KFileItem> m_fileItems;
QList<Row> m_rows;
@@ -167,6 +169,7 @@ private:
};
MetaDataWidget::Private::Private(MetaDataWidget* parent) :
+ m_hiddenData(0),
m_fileItems(),
m_rows(),
m_gridLayout(0),
@@ -193,35 +196,38 @@ MetaDataWidget::Private::Private(MetaDataWidget* parent) :
m_modifiedInfo = new QLabel(parent);
m_ownerInfo = new QLabel(parent);
m_permissionsInfo = new QLabel(parent);
-#ifdef HAVE_NEPOMUK
- const QFontMetrics fontMetrics(KGlobalSettings::smallestReadableFont());
- m_ratingWidget = new KRatingWidget(parent);
- m_ratingWidget->setFixedHeight(fontMetrics.height());
- connect(m_ratingWidget, SIGNAL(ratingChanged(unsigned int)),
- q, SLOT(slotRatingChanged(unsigned int)));
-
- m_taggingWidget = new TaggingWidget(parent);
- connect(m_taggingWidget, SIGNAL(tagsChanged(const QList<Nepomuk::Tag>&)),
- q, SLOT(slotTagsChanged(const QList<Nepomuk::Tag>&)));
-
- m_commentWidget = new CommentWidget(parent);
- connect(m_commentWidget, SIGNAL(commentChanged(const QString&)),
- q, SLOT(slotCommentChanged(const QString&)));
-#endif
addRow(new QLabel(i18nc("@label", "Type:"), parent), m_typeInfo);
addRow(m_sizeLabel, m_sizeInfo);
addRow(new QLabel(i18nc("@label", "Modified:"), parent), m_modifiedInfo);
addRow(new QLabel(i18nc("@label", "Owner:"), parent), m_ownerInfo);
addRow(new QLabel(i18nc("@label", "Permissions:"), parent), m_permissionsInfo);
+
#ifdef HAVE_NEPOMUK
- addRow(new QLabel(i18nc("@label", "Rating:"), parent), m_ratingWidget);
- addRow(new QLabel(i18nc("@label", "Tags:"), parent), m_taggingWidget);
- addRow(new QLabel(i18nc("@label", "Comment:"), parent), m_commentWidget);
+ if (Nepomuk::ResourceManager::instance()->init() == 0) {
+ const QFontMetrics fontMetrics(KGlobalSettings::smallestReadableFont());
+ m_ratingWidget = new KRatingWidget(parent);
+ m_ratingWidget->setFixedHeight(fontMetrics.height());
+ connect(m_ratingWidget, SIGNAL(ratingChanged(unsigned int)),
+ q, SLOT(slotRatingChanged(unsigned int)));
+
+ m_taggingWidget = new TaggingWidget(parent);
+ connect(m_taggingWidget, SIGNAL(tagsChanged(const QList<Nepomuk::Tag>&)),
+ q, SLOT(slotTagsChanged(const QList<Nepomuk::Tag>&)));
+
+ m_commentWidget = new CommentWidget(parent);
+ connect(m_commentWidget, SIGNAL(commentChanged(const QString&)),
+ q, SLOT(slotCommentChanged(const QString&)));
+
+ addRow(new QLabel(i18nc("@label", "Rating:"), parent), m_ratingWidget);
+ addRow(new QLabel(i18nc("@label", "Tags:"), parent), m_taggingWidget);
+ addRow(new QLabel(i18nc("@label", "Comment:"), parent), m_commentWidget);
+
+ m_loadFilesThread = new LoadFilesThread(&m_sharedData, &m_mutex);
+ connect(m_loadFilesThread, SIGNAL(finished()), q, SLOT(slotLoadingFinished()));
+ }
m_sharedData.rating = 0;
- m_loadFilesThread = new LoadFilesThread(&m_sharedData, &m_mutex);
- connect(m_loadFilesThread, SIGNAL(finished()), q, SLOT(slotLoadingFinished()));
#endif
initMetaInfoSettings();
@@ -311,15 +317,33 @@ void MetaDataWidget::Private::updateRowsVisibility()
{
KConfig config("kmetainformationrc", KConfig::NoGlobals);
KConfigGroup settings = config.group("Show");
- setRowVisible(m_typeInfo, settings.readEntry("type", true));
- setRowVisible(m_sizeInfo, settings.readEntry("size", true));
- setRowVisible(m_modifiedInfo, settings.readEntry("modified", true));
- setRowVisible(m_ownerInfo, settings.readEntry("owner", true));
- setRowVisible(m_permissionsInfo, settings.readEntry("permissions", true));
+ setRowVisible(m_typeInfo,
+ !(m_hiddenData & MetaDataWidget::TypeData) &&
+ settings.readEntry("type", true));
+ setRowVisible(m_sizeInfo,
+ !(m_hiddenData & MetaDataWidget::SizeData) &&
+ settings.readEntry("size", true));
+ setRowVisible(m_modifiedInfo,
+ !(m_hiddenData & MetaDataWidget::ModifiedData) &&
+ settings.readEntry("modified", true));
+ setRowVisible(m_ownerInfo,
+ !(m_hiddenData & MetaDataWidget::OwnerData) &&
+ settings.readEntry("owner", true));
+ setRowVisible(m_permissionsInfo,
+ !(m_hiddenData & MetaDataWidget::PermissionsData) &&
+ settings.readEntry("permissions", true));
#ifdef HAVE_NEPOMUK
- setRowVisible(m_ratingWidget, settings.readEntry("rating", true));
- setRowVisible(m_taggingWidget, settings.readEntry("tagging", true));
- setRowVisible(m_commentWidget, settings.readEntry("comment", true));
+ if (Nepomuk::ResourceManager::instance()->init() == 0) {
+ setRowVisible(m_ratingWidget,
+ !(m_hiddenData & MetaDataWidget::RatingData) &&
+ settings.readEntry("rating", true));
+ setRowVisible(m_taggingWidget,
+ !(m_hiddenData & MetaDataWidget::TagsData) &&
+ settings.readEntry("tagging", true));
+ setRowVisible(m_commentWidget,
+ !(m_hiddenData & MetaDataWidget::CommentData) &&
+ settings.readEntry("comment", true));
+ }
#endif
}
@@ -593,28 +617,51 @@ void MetaDataWidget::setItems(const KFileItemList& items)
}
#ifdef HAVE_NEPOMUK
- QList<KUrl> urls;
- foreach (const KFileItem& item, items) {
- const KUrl url = item.nepomukUri();
- if (url.isValid()) {
- urls.append(url);
+ if (Nepomuk::ResourceManager::instance()->init() == 0) {
+ QList<KUrl> urls;
+ foreach (const KFileItem& item, items) {
+ const KUrl url = item.nepomukUri();
+ if (url.isValid()) {
+ urls.append(url);
+ }
}
+ d->m_loadFilesThread->loadFiles(urls);
}
- d->m_loadFilesThread->loadFiles(urls);
#endif
}
-void MetaDataWidget::openConfigurationDialog()
+void MetaDataWidget::setItem(const KUrl& url)
{
- const KUrl url = d->m_fileItems[0].nepomukUri();
- if (!url.isValid()) {
- return;
- }
+ KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url);
+ item.refresh();
+ setItem(item);
+}
- MetaDataConfigurationDialog dialog(url, this, Qt::Dialog);
- if (dialog.exec() == KDialog::Accepted) {
- d->updateRowsVisibility();
+void MetaDataWidget::setItems(const QList<KUrl>& urls)
+{
+ KFileItemList items;
+ foreach (const KUrl& url, urls) {
+ KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url);
+ item.refresh();
+ items.append(item);
}
+ setItems(items);
+}
+
+KFileItemList MetaDataWidget::items() const
+{
+ return d->m_fileItems;
+}
+
+void MetaDataWidget::setHiddenData(int data)
+{
+ d->m_hiddenData = data;
+ d->updateRowsVisibility();
+}
+
+int MetaDataWidget::hiddenData() const
+{
+ return d->m_hiddenData;
}
unsigned int MetaDataWidget::rating() const
diff --git a/src/panels/information/metadatawidget.h b/src/panels/information/metadatawidget.h
index 232ebe71d..cbd77fc12 100644
--- a/src/panels/information/metadatawidget.h
+++ b/src/panels/information/metadatawidget.h
@@ -33,11 +33,12 @@
}
#endif
+#include <kfileitem.h>
+
#include <QList>
#include <QWidget>
-class KFileItem;
-class KFileItemList;
+class KUrl;
/**
* @brief Shows the meta data of one or more file items.
@@ -46,13 +47,32 @@ class KFileItemList;
* shown as several rows containing a description and
* the meta data value. It is possible for the user
* to change specific meta data like rating, tags and
- * comment.
+ * comment. The changes are stored automatically by the
+ * meta data widget.
*/
class MetaDataWidget : public QWidget
{
Q_OBJECT
public:
+ /**
+ * Allows to specifiy which general data should be hidden
+ * by the meta data widget.
+ * @see MetaDataWidget::setHiddenData()
+ * @see MetaDataWidget::hiddenData()
+ */
+ enum Data
+ {
+ TypeData = 1,
+ SizeData= 2,
+ ModifiedData = 4,
+ OwnerData = 8,
+ PermissionsData = 16,
+ RatingData = 32,
+ TagsData = 64,
+ CommentData = 128
+ };
+
explicit MetaDataWidget(QWidget* parent = 0);
virtual ~MetaDataWidget();
@@ -73,10 +93,35 @@ public:
void setItems(const KFileItemList& items);
/**
- * Opens a dialog which allows to configure the visibility
- * of meta data.
+ * Convenience method for MetaDataWidget::setItem(const KFileItem&),
+ * if the application has only an URL and no file item.
+ * For performance reason it is recommended to use this convenience
+ * method only if the application does not have a file item already.
+ */
+ void setItem(const KUrl& url);
+
+ /**
+ * Convenience method for MetaDataWidget::setItems(const KFileItemList&),
+ * if the application has only URLs and no file items.
+ * For performance reason it is recommended to use this convenience
+ * method only if the application does not have a file items already.
+ */
+ void setItems(const QList<KUrl>& urls);
+
+ KFileItemList items() const;
+
+ /**
+ * Specifies which kind of data should be hidden (@see MetaDataWidget::Data).
+ * Example: metaDataWidget->setHiddenData(MetaDataWidget::TypeData | ModifiedData);
+ * Per default no data is hidden.
+ */
+ void setHiddenData(int data);
+
+ /**
+ * Returns which kind of data is hidden (@see MetaDataWidget::Data).
+ * Example: if (metaDataWidget->hiddenData() & MetaDataWidget::TypeData) ...
*/
- void openConfigurationDialog();
+ int hiddenData() const;
/**
* Returns the rating for the currently set item(s). It is required
@@ -108,6 +153,8 @@ signals:
/**
* Is emitted after the user has changed the rating.
+ * The changed rating is automatically stored already by
+ * the meta data widget.
* Note that the signal is not emitted if the rating has
* indirectly been changed by MetaDataWidget::setItem() or
* MetaDataWidget::setItems(). In this case connect to
@@ -117,7 +164,9 @@ signals:
/**
* Is emitted after the user has changed the tags.
- * Note that the signal is not emitted if the rating has
+ * The changed tags are automatically stored already by
+ * the meta data widget.
+ * Note that the signal is not emitted if the tags have
* indirectly been changed by MetaDataWidget::setItem() or
* MetaDataWidget::setItems(). In this case connect to
* the signal loadingFinished() instead.
@@ -126,7 +175,9 @@ signals:
/**
* Is emitted after the user has changed the comment.
- * Note that the signal is not emitted if the rating has
+ * The changed comment is automatically stored already by
+ * the meta data widget.
+ * Note that the signal is not emitted if the comment has
* indirectly been changed by MetaDataWidget::setItem() or
* MetaDataWidget::setItems(). In this case connect to
* the signal loadingFinished() instead.