From a27443d904bc220615f2c4e8df74187b0c806d8a Mon Sep 17 00:00:00 2001 From: Akseli Lahtinen Date: Mon, 24 Feb 2025 18:39:22 +0000 Subject: Add smaller statusbar and set it as default - Statusbar has three modes: Small, FullWidth and Disabled - FullWidth is the original statusbar - Small is the new default statusbar - This statusbar overlays on top of the items instead of taking space - It changes size according to content - Disabled turns statusbar completely off - Zoom slider and space information is only shown in full-width statusbar - Space information is now always on - If user navigates with keyboard, or scrolls to selection, the scrolling will take the statusbar into account - This makes sure the statusbar does not cover any items Related discussion: https://invent.kde.org/system/dolphin/-/issues/50 --- .../statusandlocationbarssettingspage.cpp | 49 +++++++++++++++------- 1 file changed, 33 insertions(+), 16 deletions(-) (limited to 'src/settings/interface/statusandlocationbarssettingspage.cpp') diff --git a/src/settings/interface/statusandlocationbarssettingspage.cpp b/src/settings/interface/statusandlocationbarssettingspage.cpp index 5e0536a6e..14b5c8188 100644 --- a/src/settings/interface/statusandlocationbarssettingspage.cpp +++ b/src/settings/interface/statusandlocationbarssettingspage.cpp @@ -14,16 +14,21 @@ #include #include +#include #include #include +#include +#include StatusAndLocationBarsSettingsPage::StatusAndLocationBarsSettingsPage(QWidget *parent, FoldersTabsSettingsPage *foldersPage) : SettingsPageBase(parent) , m_editableUrl(nullptr) , m_showFullPath(nullptr) - , m_showStatusBar(nullptr) + , m_statusBarButtonGroup(nullptr) + , m_showStatusBarSmall(nullptr) + , m_showStatusBarFullWidth(nullptr) , m_showZoomSlider(nullptr) - , m_showSpaceInfo(nullptr) + , m_disableStatusBar(nullptr) { // We need to update some urls at the Folders & Tabs tab. We get that from foldersPage and set it on a private attribute // foldersTabsPage. That way, we can modify the necessary stuff from here. Specifically, any changes on locationUpdateInitialViewOptions() @@ -33,14 +38,30 @@ StatusAndLocationBarsSettingsPage::StatusAndLocationBarsSettingsPage(QWidget *pa QFormLayout *topLayout = new QFormLayout(this); // Status bar - m_showStatusBar = new QCheckBox(i18nc("@option:check", "Show status bar"), this); + m_statusBarButtonGroup = new QButtonGroup(this); + m_showStatusBarSmall = new QRadioButton(i18nc("@option:radio", "Small"), this); + m_showStatusBarFullWidth = new QRadioButton(i18nc("@option:radio", "Full width"), this); m_showZoomSlider = new QCheckBox(i18nc("@option:check", "Show zoom slider"), this); - m_showSpaceInfo = new QCheckBox(i18nc("@option:check", "Show space information"), this); + m_disableStatusBar = new QRadioButton(i18nc("@option:check", "Disabled"), this); - topLayout->addRow(i18nc("@title:group", "Status Bar: "), m_showStatusBar); - topLayout->addRow(QString(), m_showZoomSlider); - topLayout->addRow(QString(), m_showSpaceInfo); + m_statusBarButtonGroup->addButton(m_showStatusBarSmall, GeneralSettings::EnumShowStatusBar::Small); + m_statusBarButtonGroup->addButton(m_showStatusBarFullWidth, GeneralSettings::EnumShowStatusBar::FullWidth); + m_statusBarButtonGroup->addButton(m_disableStatusBar, GeneralSettings::EnumShowStatusBar::Disabled); + topLayout->addRow(i18nc("@title:group", "Status Bar:"), m_showStatusBarSmall); + topLayout->addRow(QString(), m_showStatusBarFullWidth); + + // Indent the m_showZoomSlider checkbox under m_showStatusBarFullWidth. + QHBoxLayout *zoomSliderLayout = new QHBoxLayout; + QStyleOption opt; + opt.initFrom(this); + zoomSliderLayout->addItem( + new QSpacerItem(style()->pixelMetric(QStyle::PM_IndicatorWidth, &opt, this), Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); + zoomSliderLayout->addWidget(m_showZoomSlider); + + topLayout->addRow(QString(), zoomSliderLayout); + + topLayout->addRow(QString(), m_disableStatusBar); topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); // Location bar @@ -57,10 +78,9 @@ StatusAndLocationBarsSettingsPage::StatusAndLocationBarsSettingsPage(QWidget *pa connect(m_editableUrl, &QCheckBox::toggled, this, &StatusAndLocationBarsSettingsPage::locationSlotSettingsChanged); connect(m_showFullPath, &QCheckBox::toggled, this, &StatusAndLocationBarsSettingsPage::locationSlotSettingsChanged); - connect(m_showStatusBar, &QCheckBox::toggled, this, &StatusAndLocationBarsSettingsPage::changed); - connect(m_showStatusBar, &QCheckBox::toggled, this, &StatusAndLocationBarsSettingsPage::onShowStatusBarToggled); + connect(m_statusBarButtonGroup, &QButtonGroup::idClicked, this, &StatusAndLocationBarsSettingsPage::changed); + connect(m_statusBarButtonGroup, &QButtonGroup::idClicked, this, &StatusAndLocationBarsSettingsPage::onShowStatusBarToggled); connect(m_showZoomSlider, &QCheckBox::toggled, this, &StatusAndLocationBarsSettingsPage::changed); - connect(m_showSpaceInfo, &QCheckBox::toggled, this, &StatusAndLocationBarsSettingsPage::changed); } StatusAndLocationBarsSettingsPage::~StatusAndLocationBarsSettingsPage() @@ -74,18 +94,16 @@ void StatusAndLocationBarsSettingsPage::applySettings() settings->setEditableUrl(m_editableUrl->isChecked()); settings->setShowFullPath(m_showFullPath->isChecked()); - settings->setShowStatusBar(m_showStatusBar->isChecked()); + settings->setShowStatusBar(m_statusBarButtonGroup->checkedId()); settings->setShowZoomSlider(m_showZoomSlider->isChecked()); - settings->setShowSpaceInfo(m_showSpaceInfo->isChecked()); settings->save(); } void StatusAndLocationBarsSettingsPage::onShowStatusBarToggled() { - const bool checked = m_showStatusBar->isChecked(); + const bool checked = (m_statusBarButtonGroup->checkedId() == GeneralSettings::EnumShowStatusBar::FullWidth); m_showZoomSlider->setEnabled(checked); - m_showSpaceInfo->setEnabled(checked); } void StatusAndLocationBarsSettingsPage::restoreDefaults() @@ -118,9 +136,8 @@ void StatusAndLocationBarsSettingsPage::loadSettings() { m_editableUrl->setChecked(GeneralSettings::editableUrl()); m_showFullPath->setChecked(GeneralSettings::showFullPath()); - m_showStatusBar->setChecked(GeneralSettings::showStatusBar()); + m_statusBarButtonGroup->button(GeneralSettings::showStatusBar())->setChecked(true); m_showZoomSlider->setChecked(GeneralSettings::showZoomSlider()); - m_showSpaceInfo->setChecked(GeneralSettings::showSpaceInfo()); onShowStatusBarToggled(); } -- cgit v1.3