forked from mudita/MuditaOS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
BellBattery.cpp
97 lines (84 loc) · 3.67 KB
/
BellBattery.cpp
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
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include <common/data/BatteryUtils.hpp>
#include <common/widgets/BellBattery.hpp>
#include <gui/widgets/text/TextFixedSize.hpp>
namespace
{
constexpr auto battery_low = "bell_battery_lvl1";
constexpr auto battery_charging = "bell_battery_charging";
constexpr auto entries = std::array<battery_utils::BatteryLevelEntry, 6>{{{{0, 9}, "bell_battery_empty"},
{{10, 19}, "bell_battery_lvl1"},
{{20, 39}, "bell_battery_lvl2"},
{{40, 69}, "bell_battery_lvl3"},
{{70, 95}, "bell_battery_lvl4"},
{{96, 100}, "bell_battery_lvl5"}}};
} // namespace
namespace gui
{
BellBattery::BellBattery(Item *parent, BatteryWidthMode widthMode) : HBox(parent), widthMode(widthMode)
{
percentText = new Text(this);
percentText->setMaximumSize(battery::percent_w, battery::percent_h);
percentText->setFont(battery::font_small);
percentText->setAlignment(Alignment(Alignment::Horizontal::Left, Alignment::Vertical::Center));
percentText->setEdges(RectangleEdge::None);
percentText->setEditMode(EditMode::Browse);
percentText->activeItem = false;
percentText->drawUnderline(false);
percentText->setText("000%");
percentText->setVisible(false);
img = new Image(this, battery_low, gui::ImageTypeSpecifier::W_M);
img->setAlignment(Alignment(Alignment::Horizontal::Right, Alignment::Vertical::Center));
}
void BellBattery::setFont(const UTF8 &fontName)
{
percentText->setFont(fontName);
}
void BellBattery::update(const units::SOC soc, const bool isCharging)
{
const auto image = battery_utils::getBatteryLevelImage(entries, soc);
if (!image) {
return;
}
const auto text = UTF8(std::to_string(soc) + "%");
if (widthMode == BatteryWidthMode::FitToContent) {
// Without this the text is not set properly if percentText was hidden
percentText->setMinimumWidthToFitText(text);
}
percentText->setText(text);
if (isCharging) {
img->set(battery_charging, gui::ImageTypeSpecifier::W_M);
}
else {
img->set(image->data(), gui::ImageTypeSpecifier::W_M);
}
setBatteryPercentMode(batteryPercentMode);
}
void BellBattery::setBatteryPercentMode(BatteryPercentMode mode)
{
batteryPercentMode = mode;
if (batteryPercentMode == BatteryPercentMode::Show) {
img->setMargins(gui::Margins(battery::image_left_margin, 0, 0, 0));
percentText->setVisible(true);
}
else {
img->setMargins(gui::Margins(0, 0, 0, 0));
percentText->setVisible(false);
}
if (widthMode == BatteryWidthMode::FitToContent) {
setWidthsToFitContent();
}
img->informContentChanged();
}
void BellBattery::setWidthsToFitContent()
{
auto width = img->widgetMinimumArea.w + img->getMargins().left;
if (percentText->visible) {
percentText->setMinimumWidthToFitText();
width += percentText->widgetMinimumArea.w;
}
setMinimumWidth(width);
setMaximumWidth(width);
}
} // namespace gui