diff options
| -rw-r--r-- | src/CMakeLists.txt | 8 | ||||
| -rw-r--r-- | src/dolphinmainwindow.cpp | 1 | ||||
| -rw-r--r-- | src/panels/information/informationpanel.cpp | 8 | ||||
| -rw-r--r-- | src/panels/information/informationpanel.h | 6 | ||||
| -rw-r--r-- | src/settings/interface/interfacesettingspage.cpp | 16 | ||||
| -rw-r--r-- | src/settings/interface/panelsettingspage.cpp | 105 | ||||
| -rw-r--r-- | src/settings/interface/panelsettingspage.h | 44 |
7 files changed, 187 insertions, 1 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 021491e40..4c2c3cb6c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -383,11 +383,18 @@ if(HAVE_BALOO) panels/information/informationpanelcontent.cpp panels/information/pixmapviewer.cpp panels/information/phononwidget.cpp + settings/interface/panelsettingspage.cpp panels/information/informationpanel.h panels/information/informationpanelcontent.h panels/information/pixmapviewer.h panels/information/phononwidget.h + settings/interface/panelsettingspage.h ) + + kconfig_add_kcfg_files(dolphinstatic + panels/information/dolphin_informationpanelsettings.kcfgc + ) + endif() if(HAVE_KUSERFEEDBACK) @@ -405,7 +412,6 @@ endif() kconfig_add_kcfg_files(dolphinstatic panels/folders/dolphin_folderspanelsettings.kcfgc - panels/information/dolphin_informationpanelsettings.kcfgc panels/places/dolphin_placespanelsettings.kcfgc settings/dolphin_compactmodesettings.kcfgc settings/dolphin_detailsmodesettings.kcfgc diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 49e656ce7..47a74742b 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -2162,6 +2162,7 @@ void DolphinMainWindow::setupDockWidgets() connect(this, &DolphinMainWindow::selectionChanged, infoPanel, &InformationPanel::setSelection); connect(this, &DolphinMainWindow::requestItemInfo, infoPanel, &InformationPanel::requestDelayedItemInfo); connect(this, &DolphinMainWindow::fileItemsChanged, infoPanel, &InformationPanel::slotFilesItemChanged); + connect(this, &DolphinMainWindow::settingsChanged, infoPanel, &InformationPanel::readSettings); #endif // i18n: This is the last paragraph for the "What's This"-texts of all four panels. diff --git a/src/panels/information/informationpanel.cpp b/src/panels/information/informationpanel.cpp index c1b7a5612..02fe3e308 100644 --- a/src/panels/information/informationpanel.cpp +++ b/src/panels/information/informationpanel.cpp @@ -378,6 +378,14 @@ void InformationPanel::markUrlAsInvalid() m_resetUrlTimer->start(); } +void InformationPanel::readSettings() +{ + if (m_initialized) { + m_content->refreshPreview(); + m_content->refreshMetaData(); + } +} + void InformationPanel::init() { m_infoTimer = new QTimer(this); diff --git a/src/panels/information/informationpanel.h b/src/panels/information/informationpanel.h index ee405cb39..eda70759a 100644 --- a/src/panels/information/informationpanel.h +++ b/src/panels/information/informationpanel.h @@ -28,6 +28,12 @@ public: explicit InformationPanel(QWidget *parent = nullptr); ~InformationPanel() override; + /** + * Refreshes the view to get synchronized with the settings (e.g. icons size, + * font, ...). + */ + void readSettings() override; + Q_SIGNALS: void urlActivated(const QUrl &url); diff --git a/src/settings/interface/interfacesettingspage.cpp b/src/settings/interface/interfacesettingspage.cpp index 0159f822c..3f8e69ada 100644 --- a/src/settings/interface/interfacesettingspage.cpp +++ b/src/settings/interface/interfacesettingspage.cpp @@ -11,6 +11,10 @@ #include "previewssettingspage.h" #include "statusandlocationbarssettingspage.h" +#if HAVE_BALOO +#include "panelsettingspage.h" +#endif + #include <KLocalizedString> #include <QTabWidget> @@ -41,6 +45,13 @@ InterfaceSettingsPage::InterfaceSettingsPage(QWidget *parent) tabWidget->addTab(confirmationsPage, i18nc("@title:tab Confirmations settings", "Confirmations")); connect(confirmationsPage, &ConfirmationsSettingsPage::changed, this, &InterfaceSettingsPage::changed); +#if HAVE_BALOO + // initialize 'Panel' tab + PanelSettingsPage *panelPage = new PanelSettingsPage(tabWidget); + tabWidget->addTab(panelPage, i18nc("@title:tab Panels settings", "Panels")); + connect(panelPage, &PanelSettingsPage::changed, this, &InterfaceSettingsPage::changed); +#endif + // initialize 'Status & location bars' tab StatusAndLocationBarsSettingsPage *statusAndLocationBarsPage = new StatusAndLocationBarsSettingsPage(tabWidget, foldersTabsPage); tabWidget->addTab(statusAndLocationBarsPage, i18nc("@title:tab Status & Location bars settings", "Status && Location bars")); @@ -49,6 +60,11 @@ InterfaceSettingsPage::InterfaceSettingsPage(QWidget *parent) m_pages.append(foldersTabsPage); m_pages.append(previewsPage); m_pages.append(confirmationsPage); + +#if HAVE_BALOO + m_pages.append(panelPage); +#endif + m_pages.append(statusAndLocationBarsPage); topLayout->addWidget(tabWidget, 0, {}); diff --git a/src/settings/interface/panelsettingspage.cpp b/src/settings/interface/panelsettingspage.cpp new file mode 100644 index 000000000..3cd153656 --- /dev/null +++ b/src/settings/interface/panelsettingspage.cpp @@ -0,0 +1,105 @@ +/* + * SPDX-FileCopyrightText: 2024 Benedikt Thiemer <[email protected]> + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include "panelsettingspage.h" +#include "dolphin_informationpanelsettings.h" +#include "global.h" +#include "kformat.h" +#include "qbuttongroup.h" + +#include <KLocalizedString> + +#include <QCheckBox> +#include <QFormLayout> +#include <QLabel> +#include <QRadioButton> +#include <QSpacerItem> + +PanelSettingsPage::PanelSettingsPage(QWidget *parent) + : SettingsPageBase(parent) + , m_showPreview(nullptr) + , m_autoPlayMedia(nullptr) + , m_showHovered(nullptr) + , m_dateFormatLong(nullptr) + , m_dateFormatShort(nullptr) + +{ + QFormLayout *topLayout = new QFormLayout(this); + + QString m_longDateTime = (new KFormat)->formatRelativeDateTime(QDateTime(QDate(2024, 02, 28), QTime(10, 0)), QLocale::LongFormat); + QString m_shortDateTime = (new KFormat)->formatRelativeDateTime(QDateTime(QDate(2024, 02, 28), QTime(10, 0)), QLocale::ShortFormat); + + m_showPreview = new QCheckBox(i18nc("@option:check", "Show previews"), this); + m_autoPlayMedia = new QCheckBox(i18nc("@option:check", "Auto-play media files"), this); + m_showHovered = new QCheckBox(i18nc("@option:check", "Show item on hover"), this); + m_dateFormatLong = new QRadioButton(i18nc("@option:check", "Use &long date, for example '%1'", m_longDateTime), this); + m_dateFormatShort = new QRadioButton(i18nc("@option:check", "Use &condensed date, for example '%1'", m_shortDateTime), this); + + QButtonGroup *dateFormatGroup = new QButtonGroup(this); + dateFormatGroup->addButton(m_dateFormatLong); + dateFormatGroup->addButton(m_dateFormatShort); + + topLayout->addRow(i18nc("@label:checkbox", "Information Panel:"), m_showPreview); + topLayout->addRow(QString(), m_autoPlayMedia); + topLayout->addRow(QString(), m_showHovered); + topLayout->addRow(QString(), m_dateFormatLong); + topLayout->addRow(QString(), m_dateFormatShort); + topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); + + QLabel *contextMenuHint = + new QLabel(i18nc("@info", "Panel settings are also available through their context menu. Open it by pressing the right mouse button on a panel."), + this); + contextMenuHint->setWordWrap(true); + topLayout->addRow(contextMenuHint); + + loadSettings(); + + connect(m_showPreview, &QCheckBox::toggled, this, &PanelSettingsPage::changed); + connect(m_showPreview, &QCheckBox::toggled, this, &PanelSettingsPage::showPreviewToggled); + connect(m_autoPlayMedia, &QCheckBox::toggled, this, &PanelSettingsPage::changed); + connect(m_showHovered, &QCheckBox::toggled, this, &PanelSettingsPage::changed); + connect(m_dateFormatLong, &QRadioButton::toggled, this, &PanelSettingsPage::changed); + connect(m_dateFormatShort, &QRadioButton::toggled, this, &PanelSettingsPage::changed); +} + +PanelSettingsPage::~PanelSettingsPage() +{ +} + +void PanelSettingsPage::applySettings() +{ + InformationPanelSettings *settings = InformationPanelSettings::self(); + settings->setPreviewsShown(m_showPreview->isChecked()); + settings->setPreviewsAutoPlay(m_autoPlayMedia->isChecked()); + settings->setShowHovered(m_showHovered->isChecked()); + settings->setDateFormat(m_dateFormatShort->isChecked()); + settings->save(); +} + +void PanelSettingsPage::restoreDefaults() +{ + InformationPanelSettings *settings = InformationPanelSettings::self(); + settings->useDefaults(true); + loadSettings(); + settings->useDefaults(false); +} + +void PanelSettingsPage::loadSettings() +{ + m_showPreview->setChecked(InformationPanelSettings::previewsShown()); + m_autoPlayMedia->setChecked(InformationPanelSettings::previewsAutoPlay()); + m_autoPlayMedia->setEnabled(InformationPanelSettings::previewsShown()); + m_showHovered->setChecked(InformationPanelSettings::showHovered()); + m_dateFormatLong->setChecked(!InformationPanelSettings::dateFormat()); + m_dateFormatShort->setChecked(InformationPanelSettings::dateFormat()); +} + +void PanelSettingsPage::showPreviewToggled() +{ + const bool checked = m_showPreview->isChecked(); + m_autoPlayMedia->setEnabled(checked); +} + +#include "moc_panelsettingspage.cpp" diff --git a/src/settings/interface/panelsettingspage.h b/src/settings/interface/panelsettingspage.h new file mode 100644 index 000000000..b2d0265f1 --- /dev/null +++ b/src/settings/interface/panelsettingspage.h @@ -0,0 +1,44 @@ +/* + * SPDX-FileCopyrightText: 2024 Benedikt Thiemer <[email protected]> + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef PANELSETTINGSPAGE_H +#define PANELSETTINGSPAGE_H + +#include "config-dolphin.h" +#include "settings/settingspagebase.h" + +class QCheckBox; +class QRadioButton; + +/** + * @brief Page for the information panel. + */ +class PanelSettingsPage : public SettingsPageBase +{ + Q_OBJECT + +public: + explicit PanelSettingsPage(QWidget *parent = nullptr); + ~PanelSettingsPage() override; + + /** @see SettingsPageBase::applySettings() */ + void applySettings() override; + + /** @see SettingsPageBase::restoreDefaults() */ + void restoreDefaults() override; + +private: + void loadSettings(); + void showPreviewToggled(); + +private: + QCheckBox *m_showPreview; + QCheckBox *m_autoPlayMedia; + QCheckBox *m_showHovered; + QRadioButton *m_dateFormatLong; + QRadioButton *m_dateFormatShort; +}; + +#endif |
