diff --git a/CMakeLists.txt b/CMakeLists.txt index 5da8d17..f1bc6b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,7 @@ set(headers src/changevaluedisplay_bool.h src/changevaluedisplay_daylightsavingmode.h src/changevaluedisplay_sntp_sync_mode_t.h + src/changevaluedisplay_wifi_auth_mode_t.h src/changevaluedisplay_wifi_mode_t.h src/checkboxicon.h src/colorinterface.h @@ -24,8 +25,10 @@ set(headers src/splitgraphdisplay.h src/tftinstance.h src/textinterface.h + src/textwithvaluehelper.h src/actions/backproxyaction.h src/actions/dummyaction.h + src/actions/multiaction.h src/actions/setvalueaction.h src/actions/switchscreenaction.h src/actions/toggleboolaction.h @@ -45,6 +48,7 @@ set(sources src/changevaluedisplay_bool.cpp src/changevaluedisplay_daylightsavingmode.cpp src/changevaluedisplay_sntp_sync_mode_t.cpp + src/changevaluedisplay_wifi_auth_mode_t.cpp src/changevaluedisplay_wifi_mode_t.cpp src/display.cpp src/displaywithtitle.cpp @@ -70,6 +74,7 @@ set(dependencies espchrono espcpputils expected + espwifistack fmt TFT_eSPI ) diff --git a/src/actions/multiaction.h b/src/actions/multiaction.h new file mode 100644 index 0000000..9b11353 --- /dev/null +++ b/src/actions/multiaction.h @@ -0,0 +1,31 @@ +#pragma once + +#include "actioninterface.h" + +using namespace espgui; + +namespace { +template +class MultiAction; + +template +class MultiAction : public virtual ActionInterface +{ +public: + void triggered() override + { + T{}.triggered(); + } +}; + +template +class MultiAction : public virtual MultiAction +{ +public: + void triggered() override + { + T{}.triggered(); + MultiAction::triggered(); + } +}; +} diff --git a/src/changevaluedisplay_wifi_auth_mode_t.cpp b/src/changevaluedisplay_wifi_auth_mode_t.cpp new file mode 100644 index 0000000..9446d39 --- /dev/null +++ b/src/changevaluedisplay_wifi_auth_mode_t.cpp @@ -0,0 +1,65 @@ +#include "changevaluedisplay_wifi_auth_mode_t.h" + +// esp-idf includes +#include + +// 3rdparty lib includes +#include + +// local includes +#include "actions/setvalueaction.h" +#include "actions/backproxyaction.h" +#include "icons/back.h" + +namespace espgui { +namespace { +constexpr const char * const TAG = "ESPGUI"; + +constexpr char TEXT_OPEN[] = "OPEN"; +constexpr char TEXT_WEP[] = "WEP"; +constexpr char TEXT_WPA_PSK[] = "WPA_PSK"; +constexpr char TEXT_WPA2_PSK[] = "WPA2_PSK"; +constexpr char TEXT_WPA_WPA2_PSK[] = "WPA_WPA2_PSK"; +constexpr char TEXT_WPA2_ENTERPRISE[] = "WPA2_ENTERPRISE"; +constexpr char TEXT_WPA3_PSK[] = "WPA3_PSK"; +constexpr char TEXT_WPA2_WPA3_PSK[] = "WPA2_WPA3_PSK"; +constexpr char TEXT_WAPI_PSK[] = "WAPI_PSK"; +constexpr char TEXT_BACK[] = "BACK"; +} // namespace + +ChangeValueDisplay::ChangeValueDisplay() +{ + constructMenuItem, StaticText>>(WIFI_AUTH_OPEN, *this, *this); + constructMenuItem, StaticText>>(WIFI_AUTH_WEP, *this, *this); + constructMenuItem, StaticText>>(WIFI_AUTH_WPA_PSK, *this, *this); + constructMenuItem, StaticText>>(WIFI_AUTH_WPA2_PSK, *this, *this); + constructMenuItem, StaticText>>(WIFI_AUTH_WPA_WPA2_PSK, *this, *this); + constructMenuItem, StaticText>>(WIFI_AUTH_WPA2_ENTERPRISE, *this, *this); + constructMenuItem, StaticText>>(WIFI_AUTH_WPA3_PSK, *this, *this); + constructMenuItem, StaticText>>(WIFI_AUTH_WPA2_WPA3_PSK, *this, *this); + constructMenuItem, StaticText>>(WIFI_AUTH_WAPI_PSK, *this, *this); + constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); +} + +void ChangeValueDisplay::start() +{ + Base::start(); + + switch (const auto value = getValue()) + { + case WIFI_AUTH_OPEN: setSelectedIndex(0); break; + case WIFI_AUTH_WEP: setSelectedIndex(1); break; + case WIFI_AUTH_WPA_PSK: setSelectedIndex(2); break; + case WIFI_AUTH_WPA2_PSK: setSelectedIndex(3); break; + case WIFI_AUTH_WPA_WPA2_PSK: setSelectedIndex(4); break; + case WIFI_AUTH_WPA2_ENTERPRISE: setSelectedIndex(5); break; + case WIFI_AUTH_WPA3_PSK: setSelectedIndex(6); break; + case WIFI_AUTH_WPA2_WPA3_PSK: setSelectedIndex(7); break; + case WIFI_AUTH_WAPI_PSK: setSelectedIndex(8); break; + default: + ESP_LOGW(TAG, "Unknown wifi_auth_mode_t: %i", std::to_underlying(value)); + setSelectedIndex(9); + } +} + +} // namespace espgui diff --git a/src/changevaluedisplay_wifi_auth_mode_t.h b/src/changevaluedisplay_wifi_auth_mode_t.h new file mode 100644 index 0000000..48613cf --- /dev/null +++ b/src/changevaluedisplay_wifi_auth_mode_t.h @@ -0,0 +1,27 @@ +#pragma once + +// esp-idf includes +#include + +// local includes +#include "changevaluedisplay.h" +#include "menudisplay.h" +#include "actioninterface.h" + +namespace espgui { + +template<> +class ChangeValueDisplay : + public MenuDisplay, + public virtual AccessorInterface, + public virtual ActionInterface +{ + using Base = MenuDisplay; + +public: + ChangeValueDisplay(); + + void start() override; +}; + +} // namespace espgui diff --git a/src/changevaluedisplay_wifi_mode_t.cpp b/src/changevaluedisplay_wifi_mode_t.cpp index 99ca683..09682e7 100644 --- a/src/changevaluedisplay_wifi_mode_t.cpp +++ b/src/changevaluedisplay_wifi_mode_t.cpp @@ -3,6 +3,9 @@ // esp-idf includes #include +// 3rdparty lib includes +#include + // local includes #include "actions/setvalueaction.h" #include "actions/backproxyaction.h" @@ -39,7 +42,7 @@ void ChangeValueDisplay::start() case WIFI_MODE_AP: setSelectedIndex(2); break; case WIFI_MODE_APSTA: setSelectedIndex(3); break; default: - ESP_LOGW(TAG, "Unknown wifi_mode_t: %i", int(value)); + ESP_LOGW(TAG, "Unknown wifi_mode_t: %i", std::to_underlying(value)); setSelectedIndex(4); } } diff --git a/src/textinterface.h b/src/textinterface.h index 951a3fa..b30bfd3 100644 --- a/src/textinterface.h +++ b/src/textinterface.h @@ -2,11 +2,10 @@ // system includes #include - -// 3rdparty lib includes -#include +#include namespace espgui { + class TextInterface { public: virtual std::string text() const = 0; @@ -73,9 +72,4 @@ public: } }; -template -struct TextWithValueHelper : public virtual TextInterface -{ - std::string text() const override { return fmt::format("{} {}", Tprefix, Taccessor{}.getValue()); } -}; } // namespace espgui diff --git a/src/textwithvaluehelper.h b/src/textwithvaluehelper.h new file mode 100644 index 0000000..c8ef429 --- /dev/null +++ b/src/textwithvaluehelper.h @@ -0,0 +1,28 @@ +#pragma once + +// 3rdparty lib includes +#include +#include +#include +#include + +// local includes +#include "textinterface.h" +#include "richtextrenderer.h" + +namespace espgui { + +template +struct TextWithValueHelper : public virtual TextInterface +{ + std::string text() const override + { + using cpputils::toString; + using espcpputils::toString; + using wifi_stack::toString; + + return fmt::format("{} {}", Tprefix, richTextEscape(toString(Taccessor{}.getValue()))); + } +}; + +} // namespace espgui