diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,7 +83,7 @@ PURPOSE "For adding desktop-wide search and tagging support to dolphin" ) -find_package(KF5BalooWidgets 18.08.0) +find_package(KF5BalooWidgets 19.07.70) set_package_properties(KF5BalooWidgets PROPERTIES DESCRIPTION "Baloos Widgets" URL "http://www.kde.org" TYPE OPTIONAL diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -246,7 +246,6 @@ if(HAVE_BALOO) set(dolphinstatic_SRCS ${dolphinstatic_SRCS} - panels/information/filemetadataconfigurationdialog.cpp panels/information/informationpanel.cpp panels/information/informationpanelcontent.cpp panels/information/pixmapviewer.cpp diff --git a/src/panels/information/filemetadataconfigurationdialog.h b/src/panels/information/filemetadataconfigurationdialog.h deleted file mode 100644 --- a/src/panels/information/filemetadataconfigurationdialog.h +++ /dev/null @@ -1,72 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2010 by Peter Penz * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ - -#ifndef FILEMETADATACONFIGURATIONDIALOG_H -#define FILEMETADATACONFIGURATIONDIALOG_H - -#include - -#include -#include -namespace Baloo { - class FileMetaDataConfigWidget; -} - -class QLabel; - -/** - * @brief Dialog which allows to configure which meta data should be shown - * in the Baloo:FileMetaDataWidget. - */ -class FileMetaDataConfigurationDialog : public QDialog -{ - Q_OBJECT - -public: - explicit FileMetaDataConfigurationDialog(QWidget* parent = nullptr); - ~FileMetaDataConfigurationDialog() override; - - /** - * Sets the items, for which the visibility of the meta data should - * be configured. Note that the visibility of the meta data is not - * bound to the items itself, the items are only used to determine - * which meta data should be configurable. For example when a JPEG image - * is set as item, it will be configurable which EXIF data should be - * shown. If an audio file is set as item, it will be configurable - * whether the artist, album name, ... should be shown. - */ - void setItems(const KFileItemList& items); - KFileItemList items() const; - - /** - * Sets the description that is shown above the list - * of meta data. Per default the translated text for - * "Select which data should be shown." is set. - */ - void setDescription(const QString& description); - QString description() const; - -protected slots: - void slotAccepted(); -private: - QLabel* m_descriptionLabel; - Baloo::FileMetaDataConfigWidget* m_configWidget; -}; - -#endif diff --git a/src/panels/information/filemetadataconfigurationdialog.cpp b/src/panels/information/filemetadataconfigurationdialog.cpp deleted file mode 100644 --- a/src/panels/information/filemetadataconfigurationdialog.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2010 by Peter Penz * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ - -#include "filemetadataconfigurationdialog.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -FileMetaDataConfigurationDialog::FileMetaDataConfigurationDialog(QWidget* parent) : - QDialog(parent), - m_descriptionLabel(nullptr), - m_configWidget(nullptr) - -{ - setWindowTitle(i18nc("@title:window", "Configure Shown Data")); - QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel); - QVBoxLayout *mainLayout = new QVBoxLayout; - setLayout(mainLayout); - QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok); - okButton->setDefault(true); - okButton->setShortcut(Qt::CTRL + Qt::Key_Return); - connect(buttonBox, &QDialogButtonBox::accepted, this, &FileMetaDataConfigurationDialog::slotAccepted); - connect(buttonBox, &QDialogButtonBox::rejected, this, &FileMetaDataConfigurationDialog::reject); - buttonBox->button(QDialogButtonBox::Ok)->setDefault(true); - - m_descriptionLabel = new QLabel(i18nc("@label::textbox", - "Select which data should " - "be shown:"), this); - m_descriptionLabel->setWordWrap(true); - - m_configWidget = new Baloo::FileMetaDataConfigWidget(this); - - QWidget* mainWidget = new QWidget(this); - QVBoxLayout* topLayout = new QVBoxLayout(mainWidget); - topLayout->addWidget(m_descriptionLabel); - topLayout->addWidget(m_configWidget); - mainLayout->addWidget(mainWidget); - mainLayout->addWidget(buttonBox); - - - const KConfigGroup dialogConfig(KSharedConfig::openConfig(QStringLiteral("dolphinrc")), - "FileMetaDataConfigurationDialog"); - KWindowConfig::restoreWindowSize(windowHandle(), dialogConfig); -} - -FileMetaDataConfigurationDialog::~FileMetaDataConfigurationDialog() -{ - KConfigGroup dialogConfig(KSharedConfig::openConfig(QStringLiteral("dolphinrc")), - "FileMetaDataConfigurationDialog"); - KWindowConfig::saveWindowSize(windowHandle(), dialogConfig); -} - -void FileMetaDataConfigurationDialog::setItems(const KFileItemList& items) -{ - m_configWidget->setItems(items); -} - -KFileItemList FileMetaDataConfigurationDialog::items() const -{ - return m_configWidget->items(); -} - -void FileMetaDataConfigurationDialog::slotAccepted() -{ - m_configWidget->save(); - accept(); -} - -void FileMetaDataConfigurationDialog::setDescription(const QString& description) -{ - m_descriptionLabel->setText(description); -} - -QString FileMetaDataConfigurationDialog::description() const -{ - return m_descriptionLabel->text(); -} - diff --git a/src/panels/information/informationpanel.h b/src/panels/information/informationpanel.h --- a/src/panels/information/informationpanel.h +++ b/src/panels/information/informationpanel.h @@ -161,6 +161,7 @@ KIO::Job* m_folderStatJob; InformationPanelContent* m_content; + bool m_inConfigurationMode = false; }; #endif // INFORMATIONPANEL_H diff --git a/src/panels/information/informationpanel.cpp b/src/panels/information/informationpanel.cpp --- a/src/panels/information/informationpanel.cpp +++ b/src/panels/information/informationpanel.cpp @@ -36,7 +36,6 @@ #include #include "dolphin_informationpanelsettings.h" -#include "filemetadataconfigurationdialog.h" InformationPanel::InformationPanel(QWidget* parent) : Panel(parent), @@ -179,6 +178,9 @@ QAction* configureAction = popup.addAction(i18nc("@action:inmenu", "Configure...")); configureAction->setIcon(QIcon::fromTheme(QStringLiteral("configure"))); + if (m_inConfigurationMode) { + configureAction->setEnabled(false); + } QAction* dateformatAction = popup.addAction(i18nc("@action:inmenu", "Condensed Date")); dateformatAction->setIcon(QIcon::fromTheme(QStringLiteral("change-date-symbolic"))); @@ -203,13 +205,8 @@ InformationPanelSettings::setPreviewsShown(isChecked); m_content->refreshPreview(); } else if (action == configureAction) { - FileMetaDataConfigurationDialog* dialog = new FileMetaDataConfigurationDialog(this); - dialog->setDescription(i18nc("@label::textbox", - "Select which data should be shown in the information panel:")); - dialog->setItems(m_content->items()); - dialog->setAttribute(Qt::WA_DeleteOnClose); - dialog->show(); - connect(dialog, &FileMetaDataConfigurationDialog::destroyed, m_content, &InformationPanelContent::refreshMetaData); + m_inConfigurationMode = true; + m_content->configureShownProperties(); } if (action == dateformatAction) { int dateFormat = static_cast(isChecked ? Baloo::DateFormats::ShortFormat : Baloo::DateFormats::LongFormat); @@ -412,6 +409,7 @@ m_content = new InformationPanelContent(this); connect(m_content, &InformationPanelContent::urlActivated, this, &InformationPanel::urlActivated); + connect(m_content, &InformationPanelContent::configurationFinished, this, [this]() { m_inConfigurationMode = false; }); QVBoxLayout* layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); diff --git a/src/panels/information/informationpanelcontent.h b/src/panels/information/informationpanelcontent.h --- a/src/panels/information/informationpanelcontent.h +++ b/src/panels/information/informationpanelcontent.h @@ -32,6 +32,7 @@ class PixmapViewer; class PlacesItemModel; class QPixmap; +class QDialogButtonBox; class QString; class QLabel; class QScrollArea; @@ -75,8 +76,14 @@ */ void refreshPreview(); + /** + * Switch the metadatawidget into configuration mode + */ + void configureShownProperties(); + signals: void urlActivated( const QUrl& url ); + void configurationFinished(); public slots: /** @@ -136,6 +143,8 @@ QLabel* m_nameLabel; Baloo::FileMetaDataWidget* m_metaDataWidget; QScrollArea* m_metaDataArea; + QLabel* m_configureLabel; + QDialogButtonBox* m_configureButtons; PlacesItemModel* m_placesItemModel; }; diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp --- a/src/panels/information/informationpanelcontent.cpp +++ b/src/panels/information/informationpanelcontent.cpp @@ -40,6 +40,7 @@ #include #include +#include #include #include #include @@ -107,6 +108,29 @@ m_metaDataWidget->setFont(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont)); m_metaDataWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); + // Configuration + m_configureLabel = new QLabel(i18nc("@label::textbox", + "Select which data should be shown:"), this); + m_configureLabel->setWordWrap(true); + m_configureLabel->setVisible(false); + + m_configureButtons = new QDialogButtonBox(QDialogButtonBox::Save | QDialogButtonBox::Cancel); + m_configureButtons->setVisible(false); + connect(m_configureButtons, &QDialogButtonBox::accepted, this, [this]() { + m_metaDataWidget->setConfigurationMode(Baloo::ConfigurationMode::Accept); + m_configureButtons->setVisible(false); + m_configureLabel->setVisible(false); + emit configurationFinished(); + } + ); + connect(m_configureButtons, &QDialogButtonBox::rejected, this, [this]() { + m_metaDataWidget->setConfigurationMode(Baloo::ConfigurationMode::Cancel); + m_configureButtons->setVisible(false); + m_configureLabel->setVisible(false); + emit configurationFinished(); + } + ); + m_metaDataArea = new QScrollArea(parent); m_metaDataArea->setWidget(m_metaDataWidget); m_metaDataArea->setWidgetResizable(true); @@ -119,7 +143,9 @@ layout->addWidget(m_phononWidget); layout->addWidget(m_nameLabel); layout->addWidget(new KSeparator()); + layout->addWidget(m_configureLabel); layout->addWidget(m_metaDataArea); + layout->addWidget(m_configureButtons); m_placesItemModel = new PlacesItemModel(this); } @@ -200,6 +226,13 @@ } } +void InformationPanelContent::configureShownProperties() +{ + m_configureLabel->setVisible(true); + m_configureButtons->setVisible(true); + m_metaDataWidget->setConfigurationMode(Baloo::ConfigurationMode::ReStart); +} + void InformationPanelContent::refreshMetaData() { m_metaDataWidget->setDateFormat(static_cast(InformationPanelSettings::dateFormat()));