1 diff --git a/plasma/generic/dataengines/powermanagement/powermanagementengine.cpp b/plasma/generic/dataengines/powermanagement/powermanagementengine.cpp
2 index d1b9519..a79f5ab 100644
3 --- a/plasma/generic/dataengines/powermanagement/powermanagementengine.cpp
4 +++ b/plasma/generic/dataengines/powermanagement/powermanagementengine.cpp
5 @@ -115,27 +115,31 @@ bool PowermanagementEngine::sourceRequestEvent(const QString &name)
6 foreach (const Solid::Device &deviceBattery, listBattery) {
7 const Solid::Battery* battery = deviceBattery.as<Solid::Battery>();
9 - if (battery && (battery->type() == Solid::Battery::PrimaryBattery ||
10 - battery->type() == Solid::Battery::UpsBattery)) {
11 - const QString source = QString("Battery%1").arg(index++);
13 - batterySources << source;
14 - m_batterySources[deviceBattery.udi()] = source;
16 - connect(battery, SIGNAL(chargeStateChanged(int,QString)), this,
17 - SLOT(updateBatteryChargeState(int,QString)));
18 - connect(battery, SIGNAL(chargePercentChanged(int,QString)), this,
19 - SLOT(updateBatteryChargePercent(int,QString)));
20 - connect(battery, SIGNAL(plugStateChanged(bool,QString)), this,
21 - SLOT(updateBatteryPlugState(bool,QString)));
23 - // Set initial values
24 - updateBatteryChargeState(battery->chargeState(), deviceBattery.udi());
25 - updateBatteryChargePercent(battery->chargePercent(), deviceBattery.udi());
26 - updateBatteryPlugState(battery->isPlugged(), deviceBattery.udi());
28 + const QString source = QString("Battery%1").arg(index++);
30 + batterySources << source;
31 + m_batterySources[deviceBattery.udi()] = source;
33 + connect(battery, SIGNAL(chargeStateChanged(int,QString)), this,
34 + SLOT(updateBatteryChargeState(int,QString)));
35 + connect(battery, SIGNAL(chargePercentChanged(int,QString)), this,
36 + SLOT(updateBatteryChargePercent(int,QString)));
37 + connect(battery, SIGNAL(plugStateChanged(bool,QString)), this,
38 + SLOT(updateBatteryPlugState(bool,QString)));
40 + // Set initial values
41 + updateBatteryChargeState(battery->chargeState(), deviceBattery.udi());
42 + updateBatteryChargePercent(battery->chargePercent(), deviceBattery.udi());
43 + updateBatteryPlugState(battery->isPlugged(), deviceBattery.udi());
44 + updateBatteryPowerSupplyState(battery->isPowerSupply(), deviceBattery.udi());
46 + setData(source, "Vendor", deviceBattery.vendor());
47 + setData(source, "Product", deviceBattery.product());
48 + setData(source, "Type", batteryType(battery));
51 + updateBatteryNames();
53 setData("Battery", "Has Battery", !batterySources.isEmpty());
54 if (!batterySources.isEmpty()) {
55 setData("Battery", "Sources", batterySources);
56 @@ -199,6 +203,37 @@ bool PowermanagementEngine::sourceRequestEvent(const QString &name)
60 +QString PowermanagementEngine::batteryType(const Solid::Battery* battery)
62 + switch(battery->type()) {
63 + case Solid::Battery::PrimaryBattery:
64 + return QString("Battery");
66 + case Solid::Battery::UpsBattery:
67 + return QString("Ups");
69 + case Solid::Battery::MonitorBattery:
70 + return QString("Monitor");
72 + case Solid::Battery::MouseBattery:
73 + return QString("Mouse");
75 + case Solid::Battery::KeyboardBattery:
76 + return QString("Keyboad");
78 + case Solid::Battery::PdaBattery:
79 + return QString("Pda");
81 + case Solid::Battery::PhoneBattery:
82 + return QString("Phone");
85 + return QString("Unknown");
88 + return QString("Unknown");
91 bool PowermanagementEngine::updateSourceEvent(const QString &source)
93 if (source == "UserActivity") {
94 @@ -244,6 +279,38 @@ void PowermanagementEngine::updateBatteryChargePercent(int newValue, const QStri
95 setData(source, "Percent", newValue);
98 +void PowermanagementEngine::updateBatteryPowerSupplyState(bool newState, const QString& udi)
100 + const QString source = m_batterySources[udi];
101 + setData(source, "Is Power Supply", newState);
104 +void PowermanagementEngine::updateBatteryNames()
106 + uint unnamedBatteries = 0;
107 + foreach (QString source, m_batterySources) {
108 + DataContainer *batteryDataContainer = containerForSource(source);
109 + if (batteryDataContainer) {
110 + const QString batteryVendor = batteryDataContainer->data()["Vendor"].toString();
111 + const QString batteryProduct = batteryDataContainer->data()["Product"].toString();
112 + if (!batteryProduct.isEmpty() && batteryProduct != "Unknown Battery") {
113 + if (!batteryVendor.isEmpty()) {
114 + setData(source, "Pretty Name", QString(batteryVendor + ' ' + batteryProduct));
116 + setData(source, "Pretty Name", batteryProduct);
119 + ++unnamedBatteries;
120 + if (unnamedBatteries > 1) {
121 + setData(source, "Pretty Name", i18nc("Placeholder is the battery number", "Battery %1", unnamedBatteries));
123 + setData(source, "Pretty Name", i18n("Battery"));
130 void PowermanagementEngine::updateAcPlugState(bool newState)
132 setData("AC Adapter", "Plugged in", newState);
133 @@ -292,14 +359,23 @@ void PowermanagementEngine::deviceAdded(const QString& udi)
134 SLOT(updateBatteryChargePercent(int,QString)));
135 connect(battery, SIGNAL(plugStateChanged(bool,QString)), this,
136 SLOT(updateBatteryPlugState(bool,QString)));
137 + connect(battery, SIGNAL(powerSupplyStateChanged(bool,QString)), this,
138 + SLOT(updateBatteryPowerSupplyState(bool,QString)));
140 // Set initial values
141 updateBatteryChargeState(battery->chargeState(), device.udi());
142 updateBatteryChargePercent(battery->chargePercent(), device.udi());
143 updateBatteryPlugState(battery->isPlugged(), device.udi());
144 + updateBatteryPowerSupplyState(battery->isPowerSupply(), device.udi());
146 + setData(source, "Vendor", device.vendor());
147 + setData(source, "Product", device.product());
148 + setData(source, "Type", batteryType(battery));
150 setData("Battery", "Sources", sourceNames);
151 setData("Battery", "Has Battery", !sourceNames.isEmpty());
153 + updateBatteryNames();
157 diff --git a/plasma/generic/dataengines/powermanagement/powermanagementengine.h b/plasma/generic/dataengines/powermanagement/powermanagementengine.h
158 index 35e9ecf..319a17c 100644
159 --- a/plasma/generic/dataengines/powermanagement/powermanagementengine.h
160 +++ b/plasma/generic/dataengines/powermanagement/powermanagementengine.h
161 @@ -54,7 +54,10 @@ private slots:
162 void updateBatteryChargeState(int newState, const QString& udi);
163 void updateBatteryPlugState(bool newState, const QString& udi);
164 void updateBatteryChargePercent(int newValue, const QString& udi);
165 + void updateBatteryPowerSupplyState(bool newState, const QString& udi);
166 void updateAcPlugState(bool newState);
167 + void updateBatteryNames();
169 void deviceRemoved(const QString& udi);
170 void deviceAdded(const QString& udi);
171 void batteryRemainingTimeChanged(qulonglong time);
172 @@ -64,6 +67,7 @@ private slots:
173 void brightnessControlsAvailableChanged(bool available);
176 + QString batteryType(const Solid::Battery *battery);
177 QStringList basicSourceNames() const;
179 QStringList m_sources;
180 diff --git a/plasma/generic/applets/batterymonitor/contents/code/logic.js b/plasma/generic/applets/batterymonitor/contents/code/logic.js
181 index 974694a..34a5060 100644
182 --- a/plasma/generic/applets/batterymonitor/contents/code/logic.js
183 +++ b/plasma/generic/applets/batterymonitor/contents/code/logic.js
184 @@ -23,19 +23,24 @@ var disk = 1
186 function updateCumulative() {
190 for (var i=0; i<batteries.count; i++) {
191 var b = batteries.get(i);
192 + if (!b["Is Power Supply"]) {
195 if (b["Plugged in"]) {
198 if (b["State"] != "NoCharge") {
204 if (batteries.count > 0) {
205 - batteries.cumulativePercent = Math.round(sum/batteries.count);
206 + batteries.cumulativePercent = Math.round(sum/count);
208 batteries.cumulativePercent = 0;
210 @@ -46,34 +51,40 @@ function stringForState(batteryData) {
211 var pluggedIn = batteryData["Plugged in"];
212 var percent = batteryData["Percent"];
213 var state = batteryData["State"];
214 + var powerSupply = batteryData["Is Power Supply"];
218 - if (state == "NoCharge") {
219 - return i18n("<b>%1% (charged)</b>", percent);
220 - } else if (state == "Discharging") {
221 - return i18n("<b>%1% (discharging)</b>", percent);
223 - return i18n("<b>%1% (charging)</b>", percent);
224 + // According to UPower spec, the chargeState is only valid for primary batteries
227 + case "NoCharge": text += i18n("%1% (charged)", percent); break;
228 + case "Discharging": text += i18n("%1% (discharging)", percent); break;
229 + default: text += i18n("%1% (charging)", percent);
232 + text += i18n("%1%", percent);
235 + text += i18nc("Battery is not plugged in", "Not present");
239 - return i18nc("Battery is not plugged in", "<b>Not present</b>");
243 function updateTooltip() {
245 - for (var i=0; i<batteries.count; i++) {
246 - if (batteries.count == 1) {
247 - text += i18n("Battery:");
253 - text += i18nc("tooltip: placeholder is the battery ID", "Battery %1:", i+1);
254 + for (var i=0; i<batteries.count; i++) {
255 + var b = batteries.get(i);
261 + text += b["Pretty Name"];
264 text += stringForState(pmSource.data["Battery"+i]);
267 diff --git a/plasma/generic/applets/batterymonitor/contents/config/main.xml b/plasma/generic/applets/batterymonitor/contents/config/main.xml
268 index fc31b3e..28e4a8a 100644
269 --- a/plasma/generic/applets/batterymonitor/contents/config/main.xml
270 +++ b/plasma/generic/applets/batterymonitor/contents/config/main.xml
272 <entry name="showBatteryString" type="Bool">
273 <default>false</default>
275 - <entry name="showMultipleBatteries" type="Bool">
276 - <default>false</default>
278 <entry name="showRemainingTime" type="Bool">
279 <default>false</default>
281 diff --git a/plasma/generic/applets/batterymonitor/contents/ui/PopupDialog.qml b/plasma/generic/applets/batterymonitor/contents/ui/PopupDialog.qml
282 index 3ffb15f..bd9f491 100644
283 --- a/plasma/generic/applets/batterymonitor/contents/ui/PopupDialog.qml
284 +++ b/plasma/generic/applets/batterymonitor/contents/ui/PopupDialog.qml
285 @@ -52,7 +52,7 @@ Item {
289 - text: model.count>1 ? i18nc("Placeholder is the battery ID", "Battery %1:", index+1) : i18n("Battery:")
290 + text: model["Pretty Name"] + ':'
292 horizontalAlignment: Text.AlignRight
294 diff --git a/plasma/generic/applets/batterymonitor/contents/ui/batterymonitor.qml b/plasma/generic/applets/batterymonitor/contents/ui/batterymonitor.qml
295 index c69c3a5..3a58aae 100644
296 --- a/plasma/generic/applets/batterymonitor/contents/ui/batterymonitor.qml
297 +++ b/plasma/generic/applets/batterymonitor/contents/ui/batterymonitor.qml
298 @@ -49,13 +49,12 @@ Item {
299 property int minimumHeight
301 property bool showOverlay: false
302 - property bool showMultipleBatteries: false
303 property bool hasBattery: pmSource.data["Battery"]["Has Battery"]
305 property QtObject pmSource: plasmoid.rootItem.pmSource
306 property QtObject batteries: plasmoid.rootItem.batteries
308 - property bool singleBattery: isConstrained() || !showMultipleBatteries || !hasBattery
309 + property bool singleBattery: isConstrained() || !hasBattery
311 model: singleBattery ? 1 : batteries
313 @@ -63,6 +62,7 @@ Item {
316 orientation: ListView.Horizontal
319 function isConstrained() {
320 return (plasmoid.formFactor == Vertical || plasmoid.formFactor == Horizontal);
321 @@ -78,7 +78,6 @@ Item {
323 function configChanged() {
324 showOverlay = plasmoid.readConfig("showBatteryString");
325 - showMultipleBatteries = plasmoid.readConfig("showMultipleBatteries");
329 diff --git a/plasma/generic/applets/batterymonitor/contents/ui/config.ui b/plasma/generic/applets/batterymonitor/contents/ui/config.ui
330 index 3df38e2..bffc755 100644
331 --- a/plasma/generic/applets/batterymonitor/contents/ui/config.ui
332 +++ b/plasma/generic/applets/batterymonitor/contents/ui/config.ui
337 - <widget class="QCheckBox" name="kcfg_showMultipleBatteries">
338 - <property name="toolTip">
341 - <property name="text">
342 - <string>Show the state for &each battery present</string>
347 <spacer name="verticalSpacer">
348 <property name="orientation">
349 <enum>Qt::Vertical</enum>