]> cloud.milkyroute.net Git - dolphin.git/commitdiff
[InformationPanel] Use the new inline configuration mode
authorStefan Brüns <stefan.bruens@rwth-aachen.de>
Sun, 14 Apr 2019 00:44:01 +0000 (02:44 +0200)
committerStefan Brüns <stefan.bruens@rwth-aachen.de>
Tue, 23 Apr 2019 10:36:14 +0000 (12:36 +0200)
Summary:
The current external configuration dialog has some issues:

- its layout is suboptimal, as its initial size is typically to small
- it is quite disassociated with the actual widget it configures, properties
  have a different order, and the property names can be quite abstract
  without the corresponding value.

Doing the visibility selection inline typically avoids the sizing problem,
as the containing application (dolphin) is often vertically maximized.
The selection becomes more obvious, as the item order is kept,
and the values are shown.

Depends on D20524

CCBUG: 389571

Reviewers: #dolphin, #baloo, #frameworks, ngraham, astippich, #vdg, elvisangelaccio

Reviewed By: #dolphin, elvisangelaccio

Subscribers: elvisangelaccio, meven, kfm-devel

Tags: #dolphin

Differential Revision: https://phabricator.kde.org/D20525

CMakeLists.txt
src/CMakeLists.txt
src/panels/information/filemetadataconfigurationdialog.cpp [deleted file]
src/panels/information/filemetadataconfigurationdialog.h [deleted file]
src/panels/information/informationpanel.cpp
src/panels/information/informationpanel.h
src/panels/information/informationpanelcontent.cpp
src/panels/information/informationpanelcontent.h

index 474fbc839199b401e1219e4fa707b9062e020d30..78a89a55821ea9eb796a8af8a7ac8969f1b35647 100644 (file)
@@ -83,7 +83,7 @@ set_package_properties(KF5Baloo PROPERTIES DESCRIPTION "Baloo Core libraries"
                        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
index dea10675faf54f5bfcbea6ad69ef95739c5261d2..63de0932438149a058de8f7ec3f16879828fffb3 100644 (file)
@@ -246,7 +246,6 @@ set(dolphinstatic_SRCS
 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.cpp b/src/panels/information/filemetadataconfigurationdialog.cpp
deleted file mode 100644 (file)
index f3ca819..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/***************************************************************************
- *   Copyright (C) 2010 by Peter Penz <peter.penz19@gmail.com>             *
- *                                                                         *
- *   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 <Baloo/FileMetaDataConfigWidget>
-#include <KConfigGroup>
-#include <KLocalizedString>
-#include <KSharedConfig>
-#include <KWindowConfig>
-
-#include <QDialogButtonBox>
-#include <QLabel>
-#include <QPushButton>
-#include <QVBoxLayout>
-
-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/filemetadataconfigurationdialog.h b/src/panels/information/filemetadataconfigurationdialog.h
deleted file mode 100644 (file)
index 0a57cf2..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/***************************************************************************
- *   Copyright (C) 2010 by Peter Penz <peter.penz19@gmail.com>             *
- *                                                                         *
- *   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 <QDialog>
-
-#include <KFileItem>
-#include <config-baloo.h>
-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
index 051134c6459009e10f536061775f678ca7e28126..9a0358df07f255fc59659b9d90690ff1f12b6100 100644 (file)
@@ -36,7 +36,6 @@
 #include <QMenu>
 
 #include "dolphin_informationpanelsettings.h"
-#include "filemetadataconfigurationdialog.h"
 
 InformationPanel::InformationPanel(QWidget* parent) :
     Panel(parent),
@@ -179,6 +178,9 @@ void InformationPanel::showContextMenu(const QPoint &pos)
 
     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 @@ void InformationPanel::showContextMenu(const QPoint &pos)
         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<int>(isChecked ? Baloo::DateFormats::ShortFormat : Baloo::DateFormats::LongFormat);
@@ -412,6 +409,7 @@ void InformationPanel::init()
 
     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);
index f63af1e53ae70a57d9386c36b4436481de9efde7..321827c5bb09551186157273ae94d6ba1475d3eb 100644 (file)
@@ -161,6 +161,7 @@ private:
     KIO::Job* m_folderStatJob;
 
     InformationPanelContent* m_content;
+    bool m_inConfigurationMode = false;
 };
 
 #endif // INFORMATIONPANEL_H
index 6e718f961dc74f0e7f366f06e1b26d0e0128f920..5b7dbbfe90464cb0c2de03fa05c68e57560bb192 100644 (file)
@@ -40,6 +40,7 @@
 #include <Phonon/MediaObject>
 
 #include <QLabel>
+#include <QDialogButtonBox>
 #include <QScrollArea>
 #include <QTextLayout>
 #include <QTimer>
@@ -107,6 +108,29 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) :
     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 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) :
     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::refreshPreview()
     }
 }
 
+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<Baloo::DateFormats>(InformationPanelSettings::dateFormat()));
index 4f88b597ed034ad0287ac2c05d67a626f5acd4b3..43410ddfae9690cff3e5be39d9712eed09c56509 100644 (file)
@@ -32,6 +32,7 @@ class PhononWidget;
 class PixmapViewer;
 class PlacesItemModel;
 class QPixmap;
+class QDialogButtonBox;
 class QString;
 class QLabel;
 class QScrollArea;
@@ -75,8 +76,14 @@ public:
      */
     void refreshPreview();
 
+    /**
+     * Switch the metadatawidget into configuration mode
+     */
+    void configureShownProperties();
+
 signals:
     void urlActivated( const QUrl& url );
+    void configurationFinished();
 
 public slots:
     /**
@@ -136,6 +143,8 @@ private:
     QLabel* m_nameLabel;
     Baloo::FileMetaDataWidget* m_metaDataWidget;
     QScrollArea* m_metaDataArea;
+    QLabel* m_configureLabel;
+    QDialogButtonBox* m_configureButtons;
 
     PlacesItemModel* m_placesItemModel;
 };