From: Peter Penz Date: Sat, 17 Oct 2009 12:23:38 +0000 (+0000) Subject: * get rid of MetaDataWidget::openConfigurationDialog() X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/998b88f304a79ba4e2ac67455bad4d69bffa8919 * get rid of MetaDataWidget::openConfigurationDialog() * allow to hide specific data for applications * check whether Nepomuk has been activated (the check with #idfef HAVE_NEPOMUK is not sufficient in the case if Nepomok is available but not activated) svn path=/trunk/KDE/kdebase/apps/; revision=1036556 --- 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 + #include #include #include #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 FixedItem; QList 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 properties = res.properties(); QHash::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 +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 #include #include @@ -44,6 +42,7 @@ #include #include + #include #include #include @@ -53,6 +52,8 @@ #include #endif +#include + class MetaDataWidget::Private { public: @@ -95,6 +96,7 @@ public: */ void startChangeDataJob(KJob* job); + int m_hiddenData; QList m_fileItems; QList 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&)), - q, SLOT(slotTagsChanged(const QList&))); - - 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&)), + q, SLOT(slotTagsChanged(const QList&))); + + 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 urls; - foreach (const KFileItem& item, items) { - const KUrl url = item.nepomukUri(); - if (url.isValid()) { - urls.append(url); + if (Nepomuk::ResourceManager::instance()->init() == 0) { + QList 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& 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 + #include #include -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& 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.