From e7a6a2d5069c30f50727c1a64dfb4ad26b27e5ab Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Fri, 26 Nov 2021 23:31:17 +0100 Subject: [PATCH] Added first example popup --- main/CMakeLists.txt | 4 ++- main/displays/menus/debugmenu.cpp | 17 ++++++++++ main/displays/popups/alertdisplay.cpp | 46 +++++++++++++++++++++++++++ main/displays/popups/alertdisplay.h | 27 ++++++++++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 main/displays/popups/alertdisplay.cpp create mode 100644 main/displays/popups/alertdisplay.h diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 9399c61..ff76b20 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -138,6 +138,7 @@ set(headers displays/menus/presetsmenu.h displays/menus/profilesmenu.h displays/menus/selectbatterytypemenu.h + displays/menus/ledstripselectotamode.h displays/menus/selectbuildservermenu.h displays/menus/selectmodemenu.h displays/menus/settingsmenu.h @@ -156,7 +157,7 @@ set(headers displays/starfielddisplay.h displays/statusdisplay.h displays/updatedisplay.h - displays/menus/ledstripselectotamode.h + displays/popups/alertdisplay.h icons/alert.h icons/battery.h icons/bluetooth.h @@ -348,6 +349,7 @@ set(sources displays/starfielddisplay.cpp displays/statusdisplay.cpp displays/updatedisplay.cpp + displays/popups/alertdisplay.h icons/alert.cpp icons/battery.cpp icons/bluetooth.cpp diff --git a/main/displays/menus/debugmenu.cpp b/main/displays/menus/debugmenu.cpp index 2bd0c15..1e704fd 100644 --- a/main/displays/menus/debugmenu.cpp +++ b/main/displays/menus/debugmenu.cpp @@ -8,6 +8,7 @@ #include "checkboxicon.h" #include "icons/back.h" #include "accessors/settingsaccessors.h" +#include // local includes #include "utils.h" @@ -25,11 +26,27 @@ #include "displays/menus/dynamicdebugmenu.h" #include "displays/menus/mainmenu.h" #include "displays/menus/batterydebugmenu.h" +#include "displays/popups/alertdisplay.cpp" + +namespace { +class AlertAction : public espgui::MenuItem +{ +public: + std::string text() const override { return "Open popup"; } + void triggered() override + { + auto newDisplay = std::make_unique(std::move(currentDisplay)); + newDisplay->initOverlay(); + currentDisplay = std::move(newDisplay); + } +}; +} // namespace using namespace espgui; DebugMenu::DebugMenu() { + constructMenuItem(); constructMenuItem, LoadSettingsAction>>(); constructMenuItem, SaveSettingsAction>>(); constructMenuItem, EraseNvsAction>>(); diff --git a/main/displays/popups/alertdisplay.cpp b/main/displays/popups/alertdisplay.cpp new file mode 100644 index 0000000..fe463f8 --- /dev/null +++ b/main/displays/popups/alertdisplay.cpp @@ -0,0 +1,46 @@ +#include "alertdisplay.h" + +// 3rdparty lib includes +#include +#include + +AlertDisplay::AlertDisplay(std::unique_ptr &&lastDisplay) : + m_lastDisplay{std::move(lastDisplay)} +{ +} + +void AlertDisplay::initScreen() +{ + m_lastDisplay->initScreen(); + + initOverlay(); +} + +void AlertDisplay::confirm() +{ + closeOverlay(); +} + +void AlertDisplay::back() +{ + closeOverlay(); +} + +void AlertDisplay::initOverlay() +{ + espgui::tft.setTextColor(TFT_WHITE, TFT_BLACK); + + espgui::tft.drawRect(20, 50, espgui::tft.width() - 40, espgui::tft.height() - 100, TFT_WHITE); + espgui::tft.fillRect(21, 51, espgui::tft.width() - 42, espgui::tft.height() - 102, TFT_BLACK); + + espgui::tft.drawString("oida", 25, 60); + espgui::tft.drawString("oida", 25, 85); + espgui::tft.drawString("oida", 25, 110); +} + +void AlertDisplay::closeOverlay() +{ + auto guard = std::move(espgui::currentDisplay); + espgui::currentDisplay = std::move(m_lastDisplay); + espgui::currentDisplay->initScreen(); +} diff --git a/main/displays/popups/alertdisplay.h b/main/displays/popups/alertdisplay.h new file mode 100644 index 0000000..e1735a8 --- /dev/null +++ b/main/displays/popups/alertdisplay.h @@ -0,0 +1,27 @@ +#pragma once + +// system includes +#include + +// 3rdparty lib includes +#include + +class AlertDisplay : public espgui::Display +{ +public: + AlertDisplay(std::unique_ptr &&lastDisplay); + + //void start() override; + void initScreen() override; + //void update() override; + //void redraw() override; + //void stop() override; + void confirm() override; + void back() override; + + void initOverlay(); + void closeOverlay(); + +private: + std::unique_ptr m_lastDisplay; +};