diff --git a/main/displays/menus/batterymenu.cpp b/main/displays/menus/batterymenu.cpp index d3b5d96..cc0f347 100644 --- a/main/displays/menus/batterymenu.cpp +++ b/main/displays/menus/batterymenu.cpp @@ -9,6 +9,8 @@ #include #include +#include + // Local includes #include "utils.h" #include "icons/settings.h" @@ -38,6 +40,15 @@ constexpr char TEXT_VOLTAGECALIBRATION_RESET[] = "Reset calibration"; constexpr char TEXT_BACK[] = "Back"; class CurrentBatteryStatusText : public virtual espgui::TextInterface { public: std::string text() const override { return getBatteryPercentageString(); } }; +class WhStatisticsText : public virtual espgui::TextInterface { public: std::string text() const override + { + if (battery::bootBatWh) + { + return fmt::format("&s&1{}Wh => &2{}Wh &6({})", (int)*battery::bootBatWh, (int)getRemainingWattHours(), (int)getRemainingWattHours() - (int)battery::bootBatWh.value()); + } + return ""; + } +}; using BatteryCellSeriesChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, @@ -64,10 +75,10 @@ using BatteryWHperKMChangeScreen = espgui::makeComponent< >; } // namespace +using namespace espgui; + BatteryMenu::BatteryMenu() { - using namespace espgui; - constructMenuItem>(); constructMenuItem>(); constructMenuItem, SwitchScreenAction>>(); @@ -75,6 +86,7 @@ BatteryMenu::BatteryMenu() constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem>(); + constructMenuItem>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::settings>>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } @@ -84,6 +96,13 @@ std::string BatteryMenu::text() const return TEXT_BATTERY; } +void BatteryMenu::initScreen() +{ + Base::initScreen(); + m_batPercentBootLabel.start(); + m_batPercentNowLabel.start(); +} + void BatteryMenu::start() { Base::start(); @@ -103,7 +122,16 @@ void BatteryMenu::redraw() const auto batPercent = getBatteryPercentage(avgVoltage, BatteryCellType(configs.battery.cellType.value)); if (battery::bootBatPercentage) + { m_doubleProgressBarBatPercentage.redraw(batPercent, *battery::bootBatPercentage); + + tft.setTextFont(2); + tft.setTextColor(TFT_DARKGREY); + m_batPercentNowLabel.redraw(fmt::format("{:.2f} %", batPercent)); + m_batPercentBootLabel.redraw(fmt::format("{:.2f} %", *battery::bootBatPercentage)); + tft.setTextFont(4); + tft.setTextColor(TFT_WHITE); + } } void BatteryMenu::back() diff --git a/main/displays/menus/batterymenu.h b/main/displays/menus/batterymenu.h index 01740c6..2ed7302 100644 --- a/main/displays/menus/batterymenu.h +++ b/main/displays/menus/batterymenu.h @@ -3,6 +3,7 @@ // local includes #include "displays/bobbymenudisplay.h" #include "widgets/doubleprogressbar.h" +#include "widgets/label.h" class BatteryMenu : public BobbyMenuDisplay { @@ -13,10 +14,13 @@ public: std::string text() const override; + void initScreen() override; void start() override; void redraw() override; void back() override; private: bobbygui::DoubleProgressBar m_doubleProgressBarBatPercentage{75, 68, 90, 24, 0, 100, TFT_RED, TFT_GREEN}; + espgui::Label m_batPercentNowLabel {170, 67}; + espgui::Label m_batPercentBootLabel{170, 83}; };