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);
#ifdef HAVE_NEPOMUK
#define DISABLE_NEPOMUK_LEGACY
#include <Nepomuk/Resource>
+ #include <Nepomuk/ResourceManager>
#include <Nepomuk/Types/Property>
#include <Nepomuk/Variant>
#endif
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()
// 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) {
}
#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()) {
#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)
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);
#include <kdialog.h>
+class MetaDataWidget;
+
/**
* @brief Dialog which allows to configure which meta data should be shown.
*/
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);
#include "metadatawidget.h"
-#include "metadataconfigurationdialog.h"
-
#include <kconfig.h>
#include <kconfiggroup.h>
#include <kfileitem.h>
#include <Nepomuk/KRatingWidget>
#include <Nepomuk/Resource>
+ #include <Nepomuk/ResourceManager>
#include <Nepomuk/Types/Property>
#include <Nepomuk/Variant>
#include <QThread>
#endif
+#include <kdebug.h>
+
class MetaDataWidget::Private
{
public:
*/
void startChangeDataJob(KJob* job);
+ int m_hiddenData;
QList<KFileItem> m_fileItems;
QList<Row> m_rows;
};
MetaDataWidget::Private::Private(MetaDataWidget* parent) :
+ m_hiddenData(0),
m_fileItems(),
m_rows(),
m_gridLayout(0),
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();
{
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
}
}
#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
}
#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.
* 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();
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
/**
* 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
/**
* 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.
/**
* 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.