diff --git a/components/mobileshell/qml/statusbar/indicators/BatteryIndicator.qml b/components/mobileshell/qml/statusbar/indicators/BatteryIndicator.qml index 752cfcf9..b6cc48f8 100644 --- a/components/mobileshell/qml/statusbar/indicators/BatteryIndicator.qml +++ b/components/mobileshell/qml/statusbar/indicators/BatteryIndicator.qml @@ -13,6 +13,7 @@ import org.kde.kirigami 2.20 as Kirigami import org.kde.plasma.components 3.0 as PlasmaComponents import org.kde.plasma.workspace.components 2.0 as PW +import org.kde.plasma.private.mobileshell.shellsettingsplugin as ShellSettings import org.kde.plasma.private.mobileshell as MobileShell import org.kde.plasma.private.battery // needed for charging state @@ -24,30 +25,31 @@ RowLayout { ListView { id: batteryRepeater - property int batteryWidth: 0 - - spacing: root.elementSpacing + spacing: 0 model: MobileShell.BatteryInfo.batteries orientation: ListView.Horizontal Layout.alignment: Qt.AlignVCenter - Layout.preferredWidth: (batteryRepeater.batteryWidth + root.elementSpacing) * batteryRepeater.count + Layout.preferredWidth: contentItem.childrenRect.width Layout.fillHeight: true Layout.fillWidth: false delegate: RowLayout { + id: batteryBase - Layout.preferredWidth: batteryRepeater.batteryWidth + width: (batteryBase.visible ? ((batteryLabel.visible ? batteryLabel.width : 0) + battery.width) + (ShellSettings.Settings.showBatteryPercentage ? root.elementSpacing : 0) : 0) Layout.fillHeight: false Layout.alignment: Qt.AlignVCenter height: batteryRepeater.height + visible: Type === "Battery" // only show the internal battery + PW.BatteryIcon { id: battery Layout.alignment: Qt.AlignVCenter - height: batteryLabel.height + Layout.fillHeight: true width: batteryLabel.height hasBattery: PluggedIn @@ -59,16 +61,12 @@ RowLayout { id: batteryLabel text: i18n("%1%", Percent) Layout.alignment: Qt.AlignVCenter + Layout.fillHeight: true color: Kirigami.Theme.textColor + visible: ShellSettings.Settings.showBatteryPercentage font.pixelSize: textPixelSize } - - Component.onCompleted: { - // ListView & RowLayout have problems with childrenRect size, - // set it here so it propagates up nicely - batteryRepeater.batteryWidth = batteryLabel.width + battery.width - } } } } diff --git a/components/shellsettingsplugin/mobileshellsettings.cpp b/components/shellsettingsplugin/mobileshellsettings.cpp index b637e7a7..7c210419 100644 --- a/components/shellsettingsplugin/mobileshellsettings.cpp +++ b/components/shellsettingsplugin/mobileshellsettings.cpp @@ -33,6 +33,7 @@ MobileShellSettings::MobileShellSettings(QObject *parent) Q_EMIT animationsEnabledChanged(); Q_EMIT dateInStatusBarChanged(); Q_EMIT statusBarScaleFactorChanged(); + Q_EMIT showBatteryPercentageChanged(); Q_EMIT navigationPanelEnabledChanged(); Q_EMIT alwaysShowKeyboardToggleOnNavigationPanelChanged(); Q_EMIT keyboardButtonEnabledChanged(); @@ -114,6 +115,19 @@ void MobileShellSettings::setStatusBarScaleFactor(float statusBarScaleFactor) m_config->sync(); } +bool MobileShellSettings::showBatteryPercentage() const +{ + auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP}; + return group.readEntry("showBatteryPercentage", false); +} + +void MobileShellSettings::setShowBatteryPercentage(bool showBatteryPercentage) +{ + auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP}; + group.writeEntry("showBatteryPercentage", showBatteryPercentage, KConfigGroup::Notify); + m_config->sync(); +} + bool MobileShellSettings::navigationPanelEnabled() const { auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP}; @@ -254,4 +268,4 @@ void MobileShellSettings::setLockscreenRightButtonAction(const LockscreenButtonA auto group = KConfigGroup{m_config, LOCKSCREEN_CONFIG_GROUP}; group.writeEntry("lockscreenRightButtonAction", (int)action, KConfigGroup::Notify); m_config->sync(); -} \ No newline at end of file +} diff --git a/components/shellsettingsplugin/mobileshellsettings.h b/components/shellsettingsplugin/mobileshellsettings.h index 1d8fe06e..d87cc99b 100644 --- a/components/shellsettingsplugin/mobileshellsettings.h +++ b/components/shellsettingsplugin/mobileshellsettings.h @@ -32,11 +32,11 @@ class MobileShellSettings : public QObject // status bar Q_PROPERTY(bool dateInStatusBar READ dateInStatusBar WRITE setDateInStatusBar NOTIFY dateInStatusBarChanged) Q_PROPERTY(float statusBarScaleFactor READ statusBarScaleFactor WRITE setStatusBarScaleFactor NOTIFY statusBarScaleFactorChanged) + Q_PROPERTY(bool showBatteryPercentage READ showBatteryPercentage WRITE setShowBatteryPercentage NOTIFY showBatteryPercentageChanged) // navigation panel Q_PROPERTY(bool navigationPanelEnabled READ navigationPanelEnabled WRITE setNavigationPanelEnabled NOTIFY navigationPanelEnabledChanged) - Q_PROPERTY(bool alwaysShowKeyboardToggleOnNavigationPanel READ alwaysShowKeyboardToggleOnNavigationPanel WRITE setAlwaysShowKeyboardToggleOnNavigationPanel - NOTIFY alwaysShowKeyboardToggleOnNavigationPanelChanged) + Q_PROPERTY(bool alwaysShowKeyboardToggleOnNavigationPanel READ alwaysShowKeyboardToggleOnNavigationPanel WRITE setAlwaysShowKeyboardToggleOnNavigationPanel NOTIFY alwaysShowKeyboardToggleOnNavigationPanelChanged) // action drawer Q_PROPERTY(ActionDrawerMode actionDrawerTopLeftMode READ actionDrawerTopLeftMode WRITE setActionDrawerTopLeftMode NOTIFY actionDrawerTopLeftModeChanged) @@ -49,10 +49,8 @@ class MobileShellSettings : public QObject Q_PROPERTY(bool allowLogout READ allowLogout READ allowLogout NOTIFY allowLogoutChanged) // locksreen shortcut icons - Q_PROPERTY(LockscreenButtonAction lockscreenLeftButtonAction READ lockscreenLeftButtonAction WRITE setLockscreenLeftButtonAction NOTIFY - lockscreenLeftButtonActionChanged) - Q_PROPERTY(LockscreenButtonAction lockscreenRightButtonAction READ lockscreenRightButtonAction WRITE setLockscreenRightButtonAction NOTIFY - lockscreenRightButtonActionChanged) + Q_PROPERTY(LockscreenButtonAction lockscreenLeftButtonAction READ lockscreenLeftButtonAction WRITE setLockscreenLeftButtonAction NOTIFY lockscreenLeftButtonActionChanged) + Q_PROPERTY(LockscreenButtonAction lockscreenRightButtonAction READ lockscreenRightButtonAction WRITE setLockscreenRightButtonAction NOTIFY lockscreenRightButtonActionChanged) public: MobileShellSettings(QObject *parent = nullptr); @@ -140,6 +138,20 @@ public: */ void setStatusBarScaleFactor(float statusBarScaleFactor); + /** + * Whether the battery percentage is shown in the status bar. + * + * If true, the percentage will be shown next to the battery in the status bar. + */ + bool showBatteryPercentage() const; + + /** + * Set whether the battery percentage is shown in the status bar. + * + * @param showBatteryPercentage Whether the battery percentage is shown in the status bar. + */ + void setShowBatteryPercentage(bool showBatteryPercentage); + /** * Whether the navigation panel is enabled. * @@ -245,6 +257,7 @@ Q_SIGNALS: void animationsEnabledChanged(); void dateInStatusBarChanged(); void statusBarScaleFactorChanged(); + void showBatteryPercentageChanged(); void taskSwitcherPreviewsEnabledChanged(); void actionDrawerTopLeftModeChanged(); void actionDrawerTopRightModeChanged(); diff --git a/kcms/mobileshell/ui/main.qml b/kcms/mobileshell/ui/main.qml index 27eeb1c8..3032fa50 100644 --- a/kcms/mobileshell/ui/main.qml +++ b/kcms/mobileshell/ui/main.qml @@ -68,6 +68,20 @@ KCM.SimpleKCM { FormCard.FormDelegateSeparator { above: quickSettingsButton; below: topLeftActionDrawerModeDelegate } + FormCard.FormSwitchDelegate { + id: showBatteryPercentage + text: i18n("Battery Percentage") + description: i18n("Show battery percentage in the status bar.") + checked: ShellSettings.Settings.showBatteryPercentage + onCheckedChanged: { + if (checked != ShellSettings.Settings.showBatteryPercentage) { + ShellSettings.Settings.showBatteryPercentage = checked; + } + } + } + + FormCard.FormDelegateSeparator { above: quickSettingsButton; below: topLeftActionDrawerModeDelegate } + FormCard.FormComboBoxDelegate { id: statusBarScaleFactorDelegate @@ -239,7 +253,7 @@ KCM.SimpleKCM { } onCurrentValueChanged: ShellSettings.Settings.lockscreenLeftButtonAction = currentValue } - + FormCard.FormDelegateSeparator { above: lockscreenRightButtonDelegate; below: lockscreenLeftButtonDelegate } FormCard.FormComboBoxDelegate {