implement left/right with callback

Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
2025-06-15 00:49:30 +02:00
parent 52a49363eb
commit 2191174681
29 changed files with 1783 additions and 641 deletions

View File

@@ -1,28 +1,31 @@
#include "ui/LightMenu.h"
LightMenu::LightMenu(menu_options_t *options) : PSMenu(options), m_options(options)
#include "ui/LightSettingsMenu.h"
namespace LightMenuItem
{
constexpr uint8_t MODE = 1;
constexpr uint8_t TOGGLE = 2;
constexpr uint8_t LED_SETTINGS = 3;
}
LightMenu::LightMenu(menu_options_t *options) : Menu(options), m_options(options)
{
std::vector<std::string> values;
values.emplace_back("Tag");
values.emplace_back("Nacht");
addSelection(1, "Modus", values.front(), values, [this](const uint8_t id, const ButtonType button) {
onButtonPressed(id, button);
});
addSelection(LightMenuItem::MODE, "Modus", values, 0);
addText(2, "LED Einstellungen", [this](const uint8_t id, const ButtonType button) {
onButtonPressed(id, button);
});
addToggle(3, "Toggle", false, nullptr);
addText(LightMenuItem::LED_SETTINGS, "LED Einstellungen");
}
void LightMenu::onButtonPressed(const uint8_t id, const ButtonType button) const
void LightMenu::onButtonPressed(const MenuItem &menuItem, const ButtonType button)
{
std::shared_ptr<Widget> widget;
switch (id)
switch (menuItem.getId())
{
case 2:
widget = std::make_shared<LightMenu>(m_options);
case LightMenuItem::LED_SETTINGS:
widget = std::make_shared<LightSettingsMenu>(m_options);
break;
default:

View File

@@ -0,0 +1,65 @@
#include "ui/LightSettingsMenu.h"
namespace LightSettingsMenuItem
{
constexpr uint8_t SECTION_COUNTER = 0;
}
LightSettingsMenu::LightSettingsMenu(menu_options_t *options) : Menu(options), m_options(options)
{
std::vector<std::string> values;
for (size_t i = 1; i <= 99; i++)
{
values.emplace_back(std::to_string(i));
}
addSelection(LightSettingsMenuItem::SECTION_COUNTER, "Sektionen", values, 0);
addSelection(1, "Sektion 1", values, 0);
}
void LightSettingsMenu::onButtonPressed(const MenuItem &menuItem, const ButtonType button)
{
/// change visible counter
switch (button)
{
case ButtonType::LEFT:
if (menuItem.getIndex() > 0)
{
const auto item = menuItem.copyWith(menuItem.getIndex() - 1);
replaceItem(menuItem.getId(), item);
}
else
{
const auto item = menuItem.copyWith(menuItem.getItemCount() - 1);
replaceItem(menuItem.getId(), item);
}
break;
case ButtonType::RIGHT:
if (menuItem.getIndex() < menuItem.getItemCount() - 1)
{
const auto item = menuItem.copyWith(menuItem.getIndex() + 1);
replaceItem(menuItem.getId(), item);
}
else
{
const auto item = menuItem.copyWith(0);
replaceItem(menuItem.getId(), item);
}
break;
default:
break;
}
/// change section list
setItemSize(std::stoull(getItem(0).getValue()));
/// persist section values
if (m_options && m_options->persistence && m_options->persistence->save)
{
const auto key = "section_" + std::to_string(menuItem.getId());
const auto &value = getItem(menuItem.getId()).getValue();
m_options->persistence->save(key.c_str(), value.c_str());
}
}

View File

@@ -4,23 +4,17 @@
#include "ui/LightMenu.h"
#include "ui/SettingsMenu.h"
MainMenu::MainMenu(menu_options_t *options) : PSMenu(options), m_options(options)
MainMenu::MainMenu(menu_options_t *options) : Menu(options), m_options(options)
{
addText(1, "Lichtsteuerung", [this](const uint8_t id, const ButtonType button) {
onButtonPressed(id, button);
});
addText(2, "externe Geraete", [this](const uint8_t id, const ButtonType button) {
onButtonPressed(id, button);
});
addText(3, "Einstellungen", [this](const uint8_t id, const ButtonType button) {
onButtonPressed(id, button);
});
addText(1, "Lichtsteuerung");
addText(2, "externe Geraete");
addText(3, "Einstellungen");
}
void MainMenu::onButtonPressed(const uint8_t id, const ButtonType button) const
void MainMenu::onButtonPressed(const MenuItem &menuItem, const ButtonType button)
{
std::shared_ptr<Widget> widget;
switch (id)
switch (menuItem.getId())
{
case 1:
widget = std::make_shared<LightMenu>(m_options);

View File

@@ -1,11 +1,6 @@
#include "ui/SettingsMenu.h"
void demo(uint8_t id, ButtonType button)
SettingsMenu::SettingsMenu(menu_options_t *options) : Menu(options)
{
///
}
SettingsMenu::SettingsMenu(menu_options_t *options) : PSMenu(options)
{
addText(1, "OTA Einspielen", demo);
addText(1, "OTA Einspielen");
}