More refactorings

This commit is contained in:
2021-12-28 02:06:24 +01:00
parent 1a3fb0a0a9
commit 9ac12cec05
46 changed files with 430 additions and 290 deletions

View File

@ -53,6 +53,7 @@ set(headers
debugtexthelpers.h debugtexthelpers.h
displays/bmsdisplay.h displays/bmsdisplay.h
displays/bobbydisplay.h displays/bobbydisplay.h
displays/bobbydisplaywithtitle.h
displays/bobbychangevaluedisplay.h displays/bobbychangevaluedisplay.h
displays/bobbymenudisplay.h displays/bobbymenudisplay.h
displays/calibratedisplay.h displays/calibratedisplay.h
@ -274,6 +275,7 @@ set(sources
debugtexthelpers.cpp debugtexthelpers.cpp
displays/bmsdisplay.cpp displays/bmsdisplay.cpp
displays/bobbydisplay.cpp displays/bobbydisplay.cpp
displays/bobbydisplaywithtitle.cpp
displays/bobbychangevaluedisplay.cpp displays/bobbychangevaluedisplay.cpp
displays/bobbymenudisplay.cpp displays/bobbymenudisplay.cpp
displays/calibratedisplay.cpp displays/calibratedisplay.cpp

View File

@ -11,6 +11,8 @@ using namespace espgui;
void BmsDisplay::initScreen() void BmsDisplay::initScreen()
{ {
Base::initScreen();
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextColor(TFT_WHITE, TFT_BLACK);
@ -43,6 +45,8 @@ void BmsDisplay::initScreen()
void BmsDisplay::redraw() void BmsDisplay::redraw()
{ {
Base::redraw();
if (bluetoothSerial.hasClient()) if (bluetoothSerial.hasClient())
tft.setTextColor(TFT_GREEN, TFT_BLACK); tft.setTextColor(TFT_GREEN, TFT_BLACK);
else else
@ -90,16 +94,15 @@ void BmsDisplay::redraw()
m_cycleLabel.clear(); m_cycleLabel.clear();
} }
void BmsDisplay::rotate(int offset) void BmsDisplay::buttonPressed(espgui::Button button)
{ {
if (offset < 0) Base::buttonPressed(button);
switchScreen<MetersDisplay>();
else if (offset > 0)
switchScreen<StatusDisplay>();
}
void BmsDisplay::confirm() switch (button)
{ {
switchScreen<MainMenu>(); case Button::Right: switchScreen<MainMenu>(); break;
case Button::Up: switchScreen<MetersDisplay>(); break;
case Button::Down: switchScreen<StatusDisplay>();
}
} }
#endif #endif

View File

@ -3,24 +3,26 @@
#if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) #if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS)
// 3rdparty lib includes // 3rdparty lib includes
#include <fmt/core.h> #include <fmt/core.h>
#include <actions/switchscreenaction.h>
#include <widgets/label.h>
#include <screenmanager.h>
// local includes // local includes
#include "display.h"
#include "actions/switchscreenaction.h"
#include "globals.h" #include "globals.h"
#include "bmsutils.h" #include "bmsutils.h"
#include "widgets/label.h" #include "bobbydisplay.h"
#include "screenmanager.h"
class BmsDisplay : class BmsDisplay :
public espgui::Display, public BobbyDisplay,
public espgui::DummyBack public espgui::DummyBack
{ {
using Base = BobbyDisplay;
public: public:
void initScreen() override; void initScreen() override;
void redraw() override; void redraw() override;
void confirm() override;
void rotate(int offset) override; void buttonPressed(espgui::Button button) override;
espgui::Label m_statusLabel{200, 0}; espgui::Label m_statusLabel{200, 0};

View File

@ -0,0 +1,66 @@
#include "bobbydisplaywithtitle.h"
void BobbyDisplayWithTitle::rawButtonPressed(uint8_t button)
{
Base::rawButtonPressed(button);
switch (button)
{
using espgui::Button;
case 0: buttonPressed(Button::Left); break;
case 1: buttonPressed(Button::Right); break;
case 2: buttonPressed(Button::Up); break;
case 3: buttonPressed(Button::Down); break;
case 4: buttonPressed(Button(BobbyButton::Profile0)); break;
case 5: buttonPressed(Button(BobbyButton::Profile1)); break;
case 6: buttonPressed(Button(BobbyButton::Profile2)); break;
case 7: buttonPressed(Button(BobbyButton::Profile3)); break;
case 8: buttonPressed(Button(BobbyButton::Left2)); break;
case 9: buttonPressed(Button(BobbyButton::Right2)); break;
case 10: buttonPressed(Button(BobbyButton::Up2)); break;
case 11: buttonPressed(Button(BobbyButton::Down2)); break;
}
}
void BobbyDisplayWithTitle::rawButtonReleased(uint8_t button)
{
Base::rawButtonReleased(button);
switch (button)
{
using espgui::Button;
case 0: buttonReleased(Button::Left); break;
case 1: buttonReleased(Button::Right); break;
case 2: buttonReleased(Button::Up); break;
case 3: buttonReleased(Button::Down); break;
case 4: buttonReleased(Button(BobbyButton::Profile0)); break;
case 5: buttonReleased(Button(BobbyButton::Profile1)); break;
case 6: buttonReleased(Button(BobbyButton::Profile2)); break;
case 7: buttonReleased(Button(BobbyButton::Profile3)); break;
case 8: buttonReleased(Button(BobbyButton::Left2)); break;
case 9: buttonReleased(Button(BobbyButton::Right2)); break;
case 10: buttonReleased(Button(BobbyButton::Up2)); break;
case 11: buttonReleased(Button(BobbyButton::Down2)); break;
}
}
void BobbyDisplayWithTitle::buttonPressed(espgui::Button button)
{
Base::buttonPressed(button);
switch (BobbyButton(button))
{
case BobbyButton::Profile0: /* TODO */ break;
case BobbyButton::Profile1: /* TODO */ break;
case BobbyButton::Profile2: /* TODO */ break;
case BobbyButton::Profile3: /* TODO */ break;
case BobbyButton::Left2: /* TODO */ break;
case BobbyButton::Right2: /* TODO */ break;
case BobbyButton::Up2: /* TODO */ break;
case BobbyButton::Down2: /* TODO */ break;
default:;
}
}
void BobbyDisplayWithTitle::buttonReleased(espgui::Button button)
{
Base::buttonReleased(button);
}

View File

@ -0,0 +1,22 @@
#pragma once
// system includes
#include <type_traits>
// 3rdparty lib includes
#include <displaywithtitle.h>
// local includes
#include "bobbydisplay.h"
class BobbyDisplayWithTitle : public espgui::DisplayWithTitle
{
using Base = espgui::DisplayWithTitle;
public:
void rawButtonPressed(uint8_t button) override;
void rawButtonReleased(uint8_t button) override;
void buttonPressed(espgui::Button button) override;
void buttonReleased(espgui::Button button) override;
};

View File

@ -168,97 +168,107 @@ void CalibrateDisplay::stop()
} }
} }
void CalibrateDisplay::rotate(int offset) void CalibrateDisplay::buttonPressed(espgui::Button button)
{ {
Base::rotate(offset); Base::buttonPressed(button);
m_selectedButton += offset; switch (button)
if (m_selectedButton < 0)
m_selectedButton = 1;
if (m_selectedButton > 1)
m_selectedButton = 0;
}
void CalibrateDisplay::confirm()
{
switch (m_selectedButton)
{ {
case 0: // left button pressed using espgui::Button;
if (!raw_gas || !raw_brems || !m_gas || !m_brems) case Button::Up:
return; m_selectedButton--;
if (m_selectedButton < 0)
m_selectedButton = 1;
break;
case Button::Down:
m_selectedButton++;
if (m_selectedButton > 1)
m_selectedButton = 0;
break;
case Button::Left:
back:
switch (m_status) switch (m_status)
{ {
case Status::Begin: case Status::Begin:
m_status = Status::GasMin;
break;
case Status::GasMin:
m_gasMin = *raw_gas;
m_status = Status::GasMax;
break;
case Status::GasMax:
m_gasMax = *raw_gas;
m_status = Status::BremsMin;
{
const auto dead = (m_gasMax - m_gasMin)/20;
m_gasMin += dead;
m_gasMax -= dead;
}
break;
case Status::BremsMin:
m_bremsMin = *raw_brems;
m_status = Status::BremsMax;
break;
case Status::BremsMax:
m_bremsMax = *raw_brems;
m_status = Status::Confirm;
{
const auto dead = (m_bremsMax - m_bremsMin)/20;
m_bremsMin += dead;
m_bremsMax -= dead;
}
break;
case Status::Confirm:
if (*m_gas > 100 || *m_brems > 100)
return;
copyToSettings();
saveSettings();
if (m_bootup) if (m_bootup)
espgui::switchScreen<StatusDisplay>(); espgui::switchScreen<StatusDisplay>();
else if (settings.lockscreen.keepLockedAfterReboot && settings.lockscreen.locked)
{
espgui::switchScreen<MainMenu>();
settings.lockscreen.locked = false;
saveSettings();
}
else else
espgui::switchScreen<BoardcomputerHardwareSettingsMenu>(); espgui::switchScreen<BoardcomputerHardwareSettingsMenu>();
break;
case Status::GasMin:
case Status::GasMax:
case Status::BremsMin:
case Status::BremsMax:
case Status::Confirm:
m_selectedButton = 0;
m_status = Status::Begin;
copyFromSettings();
} }
break;
case 1: // right button pressed
back();
}
}
void CalibrateDisplay::back()
{
switch (m_status)
{
case Status::Begin:
if (m_bootup)
espgui::switchScreen<StatusDisplay>();
else if (settings.lockscreen.keepLockedAfterReboot && settings.lockscreen.locked)
{
espgui::switchScreen<MainMenu>();
settings.lockscreen.locked = false;
saveSettings();
}
else
espgui::switchScreen<BoardcomputerHardwareSettingsMenu>();
break; break;
case Status::GasMin: case Button::Right:
case Status::GasMax: switch (m_selectedButton)
case Status::BremsMin: {
case Status::BremsMax: case 0: // left button pressed
case Status::Confirm: if (!raw_gas || !raw_brems || !m_gas || !m_brems)
m_selectedButton = 0; return;
m_status = Status::Begin;
copyFromSettings(); switch (m_status)
{
case Status::Begin:
m_status = Status::GasMin;
break;
case Status::GasMin:
m_gasMin = *raw_gas;
m_status = Status::GasMax;
break;
case Status::GasMax:
m_gasMax = *raw_gas;
m_status = Status::BremsMin;
{
const auto dead = (m_gasMax - m_gasMin)/20;
m_gasMin += dead;
m_gasMax -= dead;
}
break;
case Status::BremsMin:
m_bremsMin = *raw_brems;
m_status = Status::BremsMax;
break;
case Status::BremsMax:
m_bremsMax = *raw_brems;
m_status = Status::Confirm;
{
const auto dead = (m_bremsMax - m_bremsMin)/20;
m_bremsMin += dead;
m_bremsMax -= dead;
}
break;
case Status::Confirm:
if (*m_gas > 100 || *m_brems > 100)
return;
copyToSettings();
saveSettings();
if (m_bootup)
espgui::switchScreen<StatusDisplay>();
else
espgui::switchScreen<BoardcomputerHardwareSettingsMenu>();
}
break;
case 1: // right button pressed
goto back;
}
break;
} }
} }

View File

@ -7,24 +7,24 @@
// 3rdparty lib includes // 3rdparty lib includes
#include <fmt/core.h> #include <fmt/core.h>
#include <cpputils.h> #include <cpputils.h>
#include <displaywithtitle.h>
#include <actions/switchscreenaction.h> #include <actions/switchscreenaction.h>
#include <widgets/label.h> #include <widgets/label.h>
#include <widgets/progressbar.h> #include <widgets/progressbar.h>
// local includes // local includes
#include "bobbydisplaywithtitle.h"
#include "globals.h" #include "globals.h"
#include "utils.h" #include "utils.h"
#include "texts.h" #include "texts.h"
#include "modes/ignoreinputmode.h" #include "modes/ignoreinputmode.h"
class CalibrateDisplay : public espgui::DisplayWithTitle class CalibrateDisplay : public BobbyDisplayWithTitle
{ {
using Base = espgui::DisplayWithTitle; using Base = BobbyDisplayWithTitle;
public: public:
CalibrateDisplay() = default; CalibrateDisplay() = default;
CalibrateDisplay(bool bootup); explicit CalibrateDisplay(bool bootup);
std::string text() const override; std::string text() const override;
void start() override; void start() override;
@ -33,10 +33,7 @@ public:
void redraw() override; void redraw() override;
void stop() override; void stop() override;
void rotate(int offset) override; void buttonPressed(espgui::Button button) override;
void confirm() override;
void back() override;
private: private:
void copyFromSettings(); void copyFromSettings();

View File

@ -1,21 +1,23 @@
#pragma once #pragma once
// 3rdparty lib includes
#include <menuitem.h>
#include <icons/back.h>
#include <actions/dummyaction.h>
#include <actions/switchscreenaction.h>
#include <widgets/label.h>
// Local includes // Local includes
#include "menudisplay.h" #include "bobbymenudisplay.h"
#include "utils.h" #include "utils.h"
#include "menuitem.h"
#include "icons/back.h"
#include "icons/settings.h" #include "icons/settings.h"
#include "texts.h" #include "texts.h"
#include "actions/dummyaction.h"
#include "actions/switchscreenaction.h"
#include "battery.h" #include "battery.h"
#include "menus/batterymenu.h" #include "menus/batterymenu.h"
#include "widgets/label.h"
#include "globals.h" #include "globals.h"
class CalibrateVoltageDisplay : class CalibrateVoltageDisplay :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_BATTERY_CALIBRATE> public espgui::StaticText<TEXT_BATTERY_CALIBRATE>
{ {
public: public:

View File

@ -11,18 +11,24 @@
void GameOfLifeDisplay::start() void GameOfLifeDisplay::start()
{ {
Base::start();
m_grid = std::make_unique<std::bitset<GRIDX*GRIDY>>(); m_grid = std::make_unique<std::bitset<GRIDX*GRIDY>>();
m_newgrid = std::make_unique<std::bitset<GRIDX*GRIDY>>(); m_newgrid = std::make_unique<std::bitset<GRIDX*GRIDY>>();
} }
void GameOfLifeDisplay::initScreen() void GameOfLifeDisplay::initScreen()
{ {
Base::initScreen();
espgui::tft.setRotation(3); espgui::tft.setRotation(3);
espgui::tft.fillScreen(TFT_BLACK); espgui::tft.fillScreen(TFT_BLACK);
} }
void GameOfLifeDisplay::redraw() void GameOfLifeDisplay::redraw()
{ {
Base::redraw();
if (gen == 0) if (gen == 0)
{ {
espgui::tft.fillScreen(TFT_BLACK); espgui::tft.fillScreen(TFT_BLACK);
@ -40,19 +46,26 @@ void GameOfLifeDisplay::redraw()
void GameOfLifeDisplay::stop() void GameOfLifeDisplay::stop()
{ {
Base::stop();
espgui::tft.setRotation(0); espgui::tft.setRotation(0);
m_grid = nullptr; m_grid = nullptr;
m_newgrid = nullptr; m_newgrid = nullptr;
} }
void GameOfLifeDisplay::confirm() void GameOfLifeDisplay::buttonPressed(espgui::Button button)
{ {
espgui::switchScreen<DemosMenu>(); Base::buttonPressed(button);
}
void GameOfLifeDisplay::back() switch (button)
{ {
espgui::switchScreen<DemosMenu>(); using espgui::Button;
case Button::Left:
case Button::Right:
espgui::switchScreen<DemosMenu>();
break;
default:;
}
} }
void GameOfLifeDisplay::drawGrid() void GameOfLifeDisplay::drawGrid()

View File

@ -5,11 +5,11 @@
#include <memory> #include <memory>
// local includes // local includes
#include "display.h" #include "bobbydisplay.h"
class GameOfLifeDisplay : public espgui::Display class GameOfLifeDisplay : public BobbyDisplay
{ {
using Base = espgui::Display; using Base = BobbyDisplay;
public: public:
void start() override; void start() override;
@ -17,8 +17,7 @@ public:
void redraw() override; void redraw() override;
void stop() override; void stop() override;
void confirm() override; void buttonPressed(espgui::Button button);
void back() override;
private: private:

View File

@ -19,10 +19,13 @@
#ifdef FEATURE_GARAGE #ifdef FEATURE_GARAGE
void GarageDisplay::start() void GarageDisplay::start()
{ {
Base::start();
} }
void GarageDisplay::initScreen() void GarageDisplay::initScreen()
{ {
Base::initScreen();
espgui::tft.fillScreen(TFT_BLACK); espgui::tft.fillScreen(TFT_BLACK);
espgui::tft.setTextFont(4); espgui::tft.setTextFont(4);
espgui::tft.setTextColor(TFT_YELLOW); espgui::tft.setTextColor(TFT_YELLOW);
@ -38,22 +41,30 @@ void GarageDisplay::initScreen()
void GarageDisplay::redraw() void GarageDisplay::redraw()
{ {
Base::redraw();
} }
void GarageDisplay::confirm() void GarageDisplay::buttonPressed(espgui::Button button)
{ {
#ifdef FEATURE_ESPNOW Base::buttonPressed(button);
if (const auto error = espnow::send_espnow_message(fmt::format("BOBBYOPEN:garage:{}", "TOKEN")); error != ESP_OK)
switch (button)
{ {
ESP_LOGE("BOBBY", "send_espnow_message() failed with: %s", esp_err_to_name(error)); using espgui::Button;
return; case Button::Left:
espgui::switchScreen<MainMenu>();
break;
case Button::Right:
#ifdef FEATURE_ESPNOW
if (const auto error = espnow::send_espnow_message(fmt::format("BOBBYOPEN:garage:{}", "TOKEN")); error != ESP_OK)
{
ESP_LOGE("BOBBY", "send_espnow_message() failed with: %s", esp_err_to_name(error));
return;
}
#endif
espgui::switchScreen<MainMenu>();
break;
default:;
} }
espgui::switchScreen<MainMenu>();
#endif
}
void GarageDisplay::back()
{
espgui::switchScreen<MainMenu>();
} }
#endif #endif

View File

@ -1,17 +1,19 @@
#pragma once #pragma once
// local includes // local includes
#include "display.h" #include "bobbydisplay.h"
#ifdef FEATURE_GARAGE #ifdef FEATURE_GARAGE
class GarageDisplay : public espgui::Display class GarageDisplay : public BobbyDisplay
{ {
using Base = BobbyDisplay;
public: public:
void start() override; void start() override;
void initScreen() override; void initScreen() override;
void redraw() override; void redraw() override;
void confirm() override;
void back() override; void buttonPressed(espgui::Button button) override;
private: private:
}; };

View File

@ -23,6 +23,7 @@
#include "displays/menus/ledstripmenu.h" #include "displays/menus/ledstripmenu.h"
#ifdef FEATURE_LEDSTRIP #ifdef FEATURE_LEDSTRIP
namespace {
int8_t selected_side = 7; int8_t selected_side = 7;
int8_t selected_color; int8_t selected_color;
bool state_select_color{false}; bool state_select_color{false};
@ -49,25 +50,13 @@ const std::array<uint16_t, 8> tft_colors = {
TFT_BLUE, TFT_BLUE,
TFT_MAGENTA TFT_MAGENTA
}; };
} // namespace
std::string LedstripColorsDisplay::text() const std::string LedstripColorsDisplay::text() const
{ {
return TEXT_LEDSTRIPCOLORMENU; return TEXT_LEDSTRIPCOLORMENU;
} }
void LedstripColorsDisplay::back()
{
if(!state_select_color)
{
espgui::switchScreen<LedstripMenu>();
}
else
{
state_select_color = false;
espgui::tft.fillRect(0, 228, espgui::tft.width(), ((espgui::tft.width() - 40) / 8) + 4, TFT_BLACK);
}
}
void LedstripColorsDisplay::initScreen() void LedstripColorsDisplay::initScreen()
{ {
Base::initScreen(); Base::initScreen();
@ -102,10 +91,42 @@ void LedstripColorsDisplay::redraw()
} }
} }
void LedstripColorsDisplay::rotate(int offset) void LedstripColorsDisplay::buttonPressed(espgui::Button button)
{ {
if (offset < 0) Base::buttonPressed(button);
switch (button)
{ {
using espgui::Button;
case Button::Left:
if(!state_select_color)
{
espgui::switchScreen<LedstripMenu>();
}
else
{
state_select_color = false;
espgui::tft.fillRect(0, 228, espgui::tft.width(), ((espgui::tft.width() - 40) / 8) + 4, TFT_BLACK);
}
break;
case Button::Right:
if(!state_select_color)
{
state_select_color = true;
drawColors();
}
else
{
ledstrip_custom_colors[selected_side] = Colors[selected_color];
// Uncomment to close select color menu on color select
/*
state_select_color = false;
espgui::tft.fillRect(0, 228, espgui::tft.width(), ((espgui::tft.width() - 40) / 8) + 4, TFT_BLACK);
*/
}
break;
case Button::Up:
if (state_select_color) if (state_select_color)
{ {
selected_color++; selected_color++;
@ -122,9 +143,21 @@ void LedstripColorsDisplay::rotate(int offset)
selected_side = 0; selected_side = 0;
} }
} }
}
else if (offset > 0) /* TODO commander: move into redraw method */
{ if (state_select_color)
{
drawColors();
}
else
{
espgui::tft.fillRect(0, 228, espgui::tft.width(), ((espgui::tft.width() - 40) / 8) + 4, TFT_BLACK);
clearSides();
drawSide(static_cast<Bobbycar_Side>(selected_side), TFT_GOLD);
}
break;
case Button::Down:
if (state_select_color) if (state_select_color)
{ {
selected_color--; selected_color--;
@ -141,35 +174,20 @@ void LedstripColorsDisplay::rotate(int offset)
selected_side = 7; selected_side = 7;
} }
} }
}
if (state_select_color) /* TODO commander: move into redraw method */
{ if (state_select_color)
drawColors(); {
} drawColors();
else }
{ else
espgui::tft.fillRect(0, 228, espgui::tft.width(), ((espgui::tft.width() - 40) / 8) + 4, TFT_BLACK); {
clearSides(); espgui::tft.fillRect(0, 228, espgui::tft.width(), ((espgui::tft.width() - 40) / 8) + 4, TFT_BLACK);
drawSide(static_cast<Bobbycar_Side>(selected_side), TFT_GOLD); clearSides();
} drawSide(static_cast<Bobbycar_Side>(selected_side), TFT_GOLD);
} }
void LedstripColorsDisplay::confirm() break;
{
if(!state_select_color)
{
state_select_color = true;
drawColors();
}
else
{
ledstrip_custom_colors[selected_side] = Colors[selected_color];
// Uncomment to close select color menu on color select
/*
state_select_color = false;
espgui::tft.fillRect(0, 228, espgui::tft.width(), ((espgui::tft.width() - 40) / 8) + 4, TFT_BLACK);
*/
} }
} }

View File

@ -4,33 +4,32 @@
#include <array> #include <array>
// 3rdparty lib includes // 3rdparty lib includes
#include <displaywithtitle.h>
#include <FastLED.h> #include <FastLED.h>
// local includes // local includes
#include "bobbydisplaywithtitle.h"
#include "ledstrip.h" #include "ledstrip.h"
#ifdef FEATURE_LEDSTRIP #ifdef FEATURE_LEDSTRIP
extern int8_t selected_side; //extern int8_t selected_side;
extern int8_t selected_color; //extern int8_t selected_color;
extern bool state_select_color; //extern bool state_select_color;
extern bool last_state; //extern bool last_state;
extern const std::array<CRGB, 8> Colors; //extern const std::array<CRGB, 8> Colors;
extern const std::array<uint16_t, 8> tft_colors; //extern const std::array<uint16_t, 8> tft_colors;
class LedstripColorsDisplay : public espgui::DisplayWithTitle class LedstripColorsDisplay : public BobbyDisplayWithTitle
{ {
using Base = espgui::DisplayWithTitle; using Base = BobbyDisplayWithTitle;
public: public:
std::string text() const override; std::string text() const override;
void back() override;
void initScreen() override; void initScreen() override;
void redraw() override; void redraw() override;
void rotate(int offset) override;
void confirm() override; void buttonPressed(espgui::Button button) override;
void drawColors(); void drawColors();
void drawSide(Bobbycar_Side side, unsigned int color); void drawSide(Bobbycar_Side side, unsigned int color);

View File

@ -1,13 +1,11 @@
#pragma once #pragma once
// 3rdparty lib includes
#include <menudisplay.h>
// local includes // local includes
#include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
class AboutMenu : class AboutMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_ABOUT> public espgui::StaticText<TEXT_ABOUT>
{ {
public: public:

View File

@ -1,11 +1,11 @@
#pragma once #pragma once
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
class AccessPointWifiSettingsMenu : class AccessPointWifiSettingsMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_ACCESSPOINTWIFISETTINGS> public espgui::StaticText<TEXT_ACCESSPOINTWIFISETTINGS>
{ {
public: public:

View File

@ -1,20 +1,20 @@
#pragma once #pragma once
// 3rdparty lib includes // 3rdparty lib includes
#include <menudisplay.h>
#include <menuitem.h> #include <menuitem.h>
#include <icons/back.h> #include <icons/back.h>
#include <actions/dummyaction.h> #include <actions/dummyaction.h>
#include <actions/switchscreenaction.h> #include <actions/switchscreenaction.h>
// Local includes // Local includes
#include "displays/bobbymenudisplay.h"
#include "utils.h" #include "utils.h"
#include "icons/settings.h" #include "icons/settings.h"
#include "texts.h" #include "texts.h"
#include "battery.h" #include "battery.h"
class BatteryDebugMenu : class BatteryDebugMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_BATTERYDEBUG> public espgui::StaticText<TEXT_BATTERYDEBUG>
{ {
public: public:

View File

@ -1,13 +1,13 @@
#pragma once #pragma once
// 3rdparty lib includes // 3rdparty lib includes
#include <menudisplay.h>
#include <menuitem.h> #include <menuitem.h>
#include <icons/back.h> #include <icons/back.h>
#include <actions/dummyaction.h> #include <actions/dummyaction.h>
#include <actions/switchscreenaction.h> #include <actions/switchscreenaction.h>
// Local includes // Local includes
#include "displays/bobbymenudisplay.h"
#include "utils.h" #include "utils.h"
#include "icons/settings.h" #include "icons/settings.h"
#include "texts.h" #include "texts.h"
@ -16,10 +16,11 @@
#include "widgets/doubleprogressbar.h" #include "widgets/doubleprogressbar.h"
class BatteryMenu : class BatteryMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_BATTERY> public espgui::StaticText<TEXT_BATTERY>
{ {
using Base = espgui::MenuDisplay; using Base = BobbyMenuDisplay;
public: public:
BatteryMenu(); BatteryMenu();

View File

@ -1,13 +1,13 @@
#pragma once #pragma once
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
#ifdef FEATURE_BLE #ifdef FEATURE_BLE
class BleSettingsMenu : class BleSettingsMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_BLESETTINGS> public espgui::StaticText<TEXT_BLESETTINGS>
{ {
public: public:

View File

@ -5,7 +5,7 @@
#ifdef FEATURE_BLUETOOTH #ifdef FEATURE_BLUETOOTH
#include "changevaluedisplay_bluetoothmode.h" #include "changevaluedisplay_bluetoothmode.h"
#endif #endif
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "menuitem.h" #include "menuitem.h"
#include "actions/dummyaction.h" #include "actions/dummyaction.h"
#ifdef FEATURE_BLUETOOTH #ifdef FEATURE_BLUETOOTH
@ -37,7 +37,7 @@ using AutoBluetoothModeChangeDisplay = makeComponent<
>; >;
class BluetoothSettingsMenu : class BluetoothSettingsMenu :
public MenuDisplay, public BobbyMenuDisplay,
public StaticText<TEXT_BLUETOOTHSETTINGS>, public StaticText<TEXT_BLUETOOTHSETTINGS>,
public BackActionInterface<SwitchScreenAction<SettingsMenu>> public BackActionInterface<SwitchScreenAction<SettingsMenu>>
{ {

View File

@ -2,11 +2,11 @@
#if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) #if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS)
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
class BmsMenu : class BmsMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_BMS> public espgui::StaticText<TEXT_BMS>
{ {
public: public:

View File

@ -1,11 +1,11 @@
#pragma once #pragma once
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
class BoardcomputerHardwareSettingsMenu : class BoardcomputerHardwareSettingsMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_BOARDCOMPUTERHARDWARESETTINGS> public espgui::StaticText<TEXT_BOARDCOMPUTERHARDWARESETTINGS>
{ {
public: public:

View File

@ -1,13 +1,11 @@
#pragma once #pragma once
// 3rdparty lib includes
#include "menudisplay.h"
// local includes // local includes
#include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
class BuzzerMenu : class BuzzerMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_BUZZER> public espgui::StaticText<TEXT_BUZZER>
{ {
public: public:

View File

@ -1,14 +1,12 @@
#pragma once #pragma once
// 3rdparty lib includes
#include "menudisplay.h"
// local includes // local includes
#include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
#ifdef FEATURE_CLOUD #ifdef FEATURE_CLOUD
class CloudSettingsMenu : class CloudSettingsMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_CLOUDSETTINGS> public espgui::StaticText<TEXT_CLOUDSETTINGS>
{ {
public: public:

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "utils.h" #include "utils.h"
#include "menuitem.h" #include "menuitem.h"
#include "actions/dummyaction.h" #include "actions/dummyaction.h"
@ -15,7 +15,7 @@ using namespace espgui;
namespace { namespace {
template<const char *Ttext, typename Ttexts> template<const char *Ttext, typename Ttexts>
class CommandDebugMenu : class CommandDebugMenu :
public MenuDisplay, public BobbyMenuDisplay,
public StaticText<Ttext>, public StaticText<Ttext>,
public BackActionInterface<SwitchScreenAction<DebugMenu>> public BackActionInterface<SwitchScreenAction<DebugMenu>>
{ {

View File

@ -1,13 +1,11 @@
#pragma once #pragma once
// 3rdparty lib includes
#include "menudisplay.h"
// local includes // local includes
#include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
class ControllerHardwareSettingsMenu : class ControllerHardwareSettingsMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_CONTROLLERHARDWARESETTINGS> public espgui::StaticText<TEXT_CONTROLLERHARDWARESETTINGS>
{ {
public: public:

View File

@ -1,13 +1,13 @@
#pragma once #pragma once
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
using namespace espgui; using namespace espgui;
class CrashMenu : class CrashMenu :
public MenuDisplay, public BobbyMenuDisplay,
public StaticText<TEXT_CRASHMENU> public StaticText<TEXT_CRASHMENU>
{ {
public: public:

View File

@ -1,13 +1,11 @@
#pragma once #pragma once
// 3rdparty lib includes
#include "menudisplay.h"
// local includes // local includes
#include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
class DebugMenu : class DebugMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_DEBUG> public espgui::StaticText<TEXT_DEBUG>
{ {
public: public:

View File

@ -1,13 +1,11 @@
#pragma once #pragma once
// 3rdparty lib includes
#include "menudisplay.h"
// local includes // local includes
#include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
class DefaultModeSettingsMenu : class DefaultModeSettingsMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_DEFAULTMODESETTIGNS> public espgui::StaticText<TEXT_DEFAULTMODESETTIGNS>
{ {
public: public:

View File

@ -1,13 +1,11 @@
#pragma once #pragma once
// 3rdparty lib includes
#include "menudisplay.h"
// local includes // local includes
#include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
class DemosMenu : class DemosMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_DEMOS> public espgui::StaticText<TEXT_DEMOS>
{ {
public: public:

View File

@ -11,7 +11,7 @@
#include <esprandom.h> #include <esprandom.h>
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "utils.h" #include "utils.h"
#include "menuitem.h" #include "menuitem.h"
#include "actions/switchscreenaction.h" #include "actions/switchscreenaction.h"
@ -125,7 +125,7 @@ constexpr char TEXT_STATICICON[] = "Static icon";
constexpr char TEXT_DEBUGTOGGLE[] = "Toggle"; constexpr char TEXT_DEBUGTOGGLE[] = "Toggle";
class DynamicDebugMenu : class DynamicDebugMenu :
public MenuDisplay, public BobbyMenuDisplay,
public RandomText, public RandomText,
public BackActionInterface<SwitchScreenAction<DebugMenu>> public BackActionInterface<SwitchScreenAction<DebugMenu>>
{ {

View File

@ -1,13 +1,13 @@
#pragma once #pragma once
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
using namespace espgui; using namespace espgui;
class EnableMenu : class EnableMenu :
public MenuDisplay, public BobbyMenuDisplay,
public StaticText<TEXT_SETENABLED> public StaticText<TEXT_SETENABLED>
{ {
public: public:

View File

@ -2,6 +2,7 @@
#ifdef FEATURE_ESPNOW #ifdef FEATURE_ESPNOW
// 3rdparty lib includes
#include <accessorinterface.h> #include <accessorinterface.h>
#include <actioninterface.h> #include <actioninterface.h>
#include <espchrono.h> #include <espchrono.h>
@ -10,6 +11,8 @@
#include <textinterface.h> #include <textinterface.h>
#include <texts.h> #include <texts.h>
// local includes
#include "displays/bobbymenudisplay.h"
#include "espnowfunctions.h" #include "espnowfunctions.h"
using namespace espgui; using namespace espgui;
@ -31,8 +34,8 @@ public:
} // namespace } // namespace
class EspNowMenu : class EspNowMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_ESPNOW_MENU> public espgui::StaticText<TEXT_ESPNOW_MENU>
{ {
public: public:
EspNowMenu(); EspNowMenu();

View File

@ -2,6 +2,7 @@
#ifdef FEATURE_ESPNOW #ifdef FEATURE_ESPNOW
// 3rdparty lib includes
#include <accessorinterface.h> #include <accessorinterface.h>
#include <actioninterface.h> #include <actioninterface.h>
#include <espchrono.h> #include <espchrono.h>
@ -10,6 +11,8 @@
#include <textinterface.h> #include <textinterface.h>
#include <texts.h> #include <texts.h>
// local includes
#include "displays/bobbymenudisplay.h"
#include "espnowfunctions.h" #include "espnowfunctions.h"
using namespace espgui; using namespace espgui;
@ -18,8 +21,8 @@ namespace espnowsettingsmenu {
} // namespace } // namespace
class EspNowSettingsMenu : class EspNowSettingsMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_ESPNOW_SETTINGS> public espgui::StaticText<TEXT_ESPNOW_SETTINGS>
{ {
public: public:
EspNowSettingsMenu(); EspNowSettingsMenu();

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "utils.h" #include "utils.h"
#include "menuitem.h" #include "menuitem.h"
#include "actions/dummyaction.h" #include "actions/dummyaction.h"
@ -17,7 +17,7 @@ using namespace espgui;
namespace { namespace {
template<const char *Ttext, typename Ttexts, template<int> class ColorInterface> template<const char *Ttext, typename Ttexts, template<int> class ColorInterface>
class FeedbackDebugMenu : class FeedbackDebugMenu :
public MenuDisplay, public BobbyMenuDisplay,
public StaticText<Ttext>, public StaticText<Ttext>,
public BackActionInterface<SwitchScreenAction<DebugMenu>> public BackActionInterface<SwitchScreenAction<DebugMenu>>
{ {

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "utils.h" #include "utils.h"
#include "menuitem.h" #include "menuitem.h"
#include "actions/switchscreenaction.h" #include "actions/switchscreenaction.h"
@ -13,7 +13,7 @@ using namespace espgui;
namespace { namespace {
#ifdef FEATURE_GAMETRAK #ifdef FEATURE_GAMETRAK
class ContainerModeSettingsMenu : class ContainerModeSettingsMenu :
public MenuDisplay, public BobbyMenuDisplay,
public StaticText<TEXT_GAMETRAKMODESETTINGS>, public StaticText<TEXT_GAMETRAKMODESETTINGS>,
public BackActionInterface<SwitchScreenAction<ModesSettingsMenu>> public BackActionInterface<SwitchScreenAction<ModesSettingsMenu>>
{ {

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "changevaluedisplay.h" #include "changevaluedisplay.h"
#include "menuitem.h" #include "menuitem.h"
#include "actions/dummyaction.h" #include "actions/dummyaction.h"
@ -17,7 +17,7 @@ using namespace espgui;
namespace { namespace {
class GenericWifiSettingsMenu : class GenericWifiSettingsMenu :
public MenuDisplay, public BobbyMenuDisplay,
public StaticText<TEXT_GENERICWIFISETTINGS>, public StaticText<TEXT_GENERICWIFISETTINGS>,
public BackActionInterface<SwitchScreenAction<WifiSettingsMenu>> public BackActionInterface<SwitchScreenAction<WifiSettingsMenu>>
{ {

View File

@ -1,11 +1,11 @@
#pragma once #pragma once
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
class GraphsMenu : class GraphsMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_GRAPHS> public espgui::StaticText<TEXT_GRAPHS>
{ {
public: public:

View File

@ -13,8 +13,6 @@ class GreenPassMenu :
public BobbyMenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_GREENPASS> public espgui::StaticText<TEXT_GREENPASS>
{ {
using Base = BobbyMenuDisplay;
public: public:
GreenPassMenu(); GreenPassMenu();
void back() override; void back() override;

View File

@ -1,10 +1,11 @@
#pragma once #pragma once
#include "menudisplay.h" // local includes
#include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
class HandbremsSettingsMenu : class HandbremsSettingsMenu :
public espgui::MenuDisplay, public BobbyMenuDisplay,
public espgui::StaticText<TEXT_DEBUG> public espgui::StaticText<TEXT_DEBUG>
{ {
public: public:

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
using namespace espgui; using namespace espgui;

View File

@ -3,7 +3,7 @@
// 3rdparty lib includes // 3rdparty lib includes
// local includes // local includes
#include "menudisplay.h" #include "displays/bobbymenudisplay.h"
#include "texts.h" #include "texts.h"
class LarsmModeSettingsMenu : class LarsmModeSettingsMenu :

View File

@ -181,28 +181,28 @@ clearIp:
m_labelProfile.redraw(profile ? std::to_string(*profile) : "-"); m_labelProfile.redraw(profile ? std::to_string(*profile) : "-");
} }
void StatusDisplay::confirm() void StatusDisplay::buttonPressed(espgui::Button button)
{ {
switchScreen<MainMenu>(); Base::buttonPressed(button);
}
void StatusDisplay::back() switch (button)
{ {
using espgui::Button;
} case Button::Left:
case Button::Right:
void StatusDisplay::rotate(int offset) switchScreen<MainMenu>();
{ break;
Base::rotate(offset); case Button::Up:
if (offset < 0)
#ifdef FEATURE_BMS #ifdef FEATURE_BMS
switchScreen<BmsDisplay>(); switchScreen<BmsDisplay>();
#else #else
switchScreen<MetersDisplay>(); switchScreen<MetersDisplay>();
#endif #endif
else if (offset > 0) break;
case Button::Down:
switchScreen<MetersDisplay>(); switchScreen<MetersDisplay>();
break;
}
} }
StatusDisplay::BoardStatus::BoardStatus(int y) : StatusDisplay::BoardStatus::BoardStatus(int y) :

View File

@ -4,13 +4,13 @@
#include <esp_heap_caps.h> #include <esp_heap_caps.h>
// 3rdparty lib includes // 3rdparty lib includes
#include <display.h>
#include <actions/switchscreenaction.h> #include <actions/switchscreenaction.h>
#include <widgets/label.h> #include <widgets/label.h>
#include <widgets/progressbar.h> #include <widgets/progressbar.h>
#include <espchrono.h> #include <espchrono.h>
// local includes // local includes
#include "bobbydisplay.h"
#include "modeinterface.h" #include "modeinterface.h"
#include "globals.h" #include "globals.h"
#include "utils.h" #include "utils.h"
@ -18,17 +18,15 @@
#include "battery.h" #include "battery.h"
class StatusDisplay : class StatusDisplay :
public espgui::Display public BobbyDisplay
{ {
using Base = espgui::Display; using Base = BobbyDisplay;
public: public:
void initScreen() override; void initScreen() override;
void redraw() override; void redraw() override;
void confirm() override; void buttonPressed(espgui::Button button) override;
void back() override;
void rotate(int offset) override;
private: private:
class BoardStatus class BoardStatus

View File

@ -1,5 +1,10 @@
#include "menudisplaywithtime.h" #include "menudisplaywithtime.h"
#include "tftinstance.h"
// 3rdparty lib includes
#include <tftinstance.h>
#include <fmt/core.h>
// local includes
#include "utils.h" #include "utils.h"
using namespace espgui; using namespace espgui;

View File

@ -1,20 +1,19 @@
#pragma once #pragma once
// system includes // local includes
#include <cstdint> #include "displays/bobbymenudisplay.h"
// 3rdparty lib includes
#include <menudisplay.h>
namespace bobbygui { namespace bobbygui {
class MenuDisplayWithTime : class MenuDisplayWithTime :
public espgui::MenuDisplay public BobbyMenuDisplay
{ {
using Base = espgui::MenuDisplay; using Base = BobbyMenuDisplay;
public: public:
void start() override; void start() override;
void redraw() override; void redraw() override;
espgui::Label m_label_currentTime{145, 6}; espgui::Label m_label_currentTime{145, 6};
private: private:
virtual bool use_big_font() const virtual bool use_big_font() const
{ {