1
0
mirror of https://invent.kde.org/system/dolphin synced 2024-07-04 17:30:55 +00:00

[InformationPanel] Use the new inline configuration mode

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
This commit is contained in:
Stefan Brüns 2019-04-14 02:44:01 +02:00
parent 8dc5c7a199
commit ecf1ae6d0b
8 changed files with 50 additions and 184 deletions

View 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

View 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

View File

@ -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();
}

View File

@ -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

View 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);

View File

@ -161,6 +161,7 @@ private:
KIO::Job* m_folderStatJob;
InformationPanelContent* m_content;
bool m_inConfigurationMode = false;
};
#endif // INFORMATIONPANEL_H

View 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()));

View 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;
};