1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
/*
SPDX-FileCopyrightText: 2011 Sebastian Kügler <sebas@kde.org>
SPDX-FileCopyrightText: 2011 Viranch Mehta <viranch.mehta@gmail.com>
SPDX-FileCopyrightText: 2013 Kai Uwe Broulik <kde@privat.broulik.de>
SPDX-FileCopyrightText: 2023 Natalie Clarius <natalie.clarius@kde.org>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
import QtQuick
import QtQuick.Layouts
import org.kde.plasma.plasmoid
import org.kde.plasma.core as PlasmaCore
import org.kde.plasma.workspace.components as WorkspaceComponents
import org.kde.kirigami as Kirigami
import org.kde.plasma.private.battery
MouseArea {
id: root
readonly property bool isConstrained: [PlasmaCore.Types.Vertical, PlasmaCore.Types.Horizontal].includes(Plasmoid.formFactor)
|| Plasmoid.containmentDisplayHints & PlasmaCore.Types.ContainmentForcesSquarePlasmoids
property int batteryPercent: 0
property bool batteryPluggedIn: false
property bool hasBatteries: false
property bool hasInternalBatteries: false
property bool hasCumulative: false
required property bool isSomehowFullyCharged
required property bool isDischarging
required property bool isManuallyInhibited
required property bool isInDefaultPowerProfile
required property bool isInPowersaveProfile
required property bool isInBalancedProfile
required property bool isInPerformanceProfile
property alias model: view.model
activeFocusOnTab: true
hoverEnabled: true
Accessible.name: Plasmoid.title
Accessible.description: `${toolTipMainText}; ${toolTipSubText}`
Accessible.role: Accessible.Button
property string activeProfileIconSrc: isInPowersaveProfile ? "battery-profile-powersave-symbolic"
: isInBalancedProfile ? "speedometer"
: isInPerformanceProfile ? "battery-profile-performance-symbolic"
: Plasmoid.icon
readonly property string powerModeIconSrc: isManuallyInhibited
? "system-suspend-inhibited-symbolic"
: !isInDefaultPowerProfile
? activeProfileIconSrc
: Plasmoid.icon
// Shown for no batteries or manual inhibition while not discharging
Kirigami.Icon {
id: powerModeIcon
anchors.fill: parent
visible: root.isConstrained && (!root.hasInternalBatteries || (root.isManuallyInhibited && !root.isDischarging))
source: root.powerModeIconSrc
active: root.containsMouse
}
Item {
id: overallBatteryInfo
anchors.fill: parent
visible: root.isConstrained && !powerModeIcon.visible && root.hasInternalBatteries
// Show normal battery icon
WorkspaceComponents.BatteryIcon {
id: overallBatteryIcon
anchors.fill: parent
active: root.containsMouse
hasBattery: root.hasCumulative
percent: root.batteryPercent
pluggedIn: root.batteryPluggedIn
powerProfileIconName: root.isInDefaultPowerProfile ? ""
: root.isInPowersaveProfile ? "powersave"
: root.isInBalancedProfile ? "balanced"
: root.isInPerformanceProfile ? "performance"
: ""
}
WorkspaceComponents.BadgeOverlay {
anchors.bottom: parent.bottom
anchors.right: parent.right
visible: Plasmoid.configuration.showPercentage && !root.isSomehowFullyCharged
text: i18nc("battery percentage below battery icon", "%1%", root.batteryPercent)
icon: overallBatteryIcon
}
}
//Show all batteries
GridView {
id: view
visible: !root.isConstrained
anchors.fill: parent
contentHeight: height
contentWidth: width
cellWidth: Math.min(height, width)
cellHeight: cellWidth
// Don't block events from MouseArea, and don't let users drag the batteries around
interactive: false
clip: true
// We have any batteries; show their status
delegate: Item {
id: batteryContainer
width: view.cellWidth
height: view.cellHeight
// Show normal battery icon
WorkspaceComponents.BatteryIcon {
id: batteryIcon
anchors.fill: parent
active: root.containsMouse
hasBattery: PluggedIn
percent: Percent
pluggedIn: ChargeState === BatteryControlModel.Charging
}
WorkspaceComponents.BadgeOverlay {
anchors.bottom: parent.bottom
anchors.right: parent.right
visible: Plasmoid.configuration.showPercentage && !root.isSomehowFullyCharged
text: i18nc("battery percentage below battery icon", "%1%", Percent)
icon: batteryIcon
}
}
}
}
|