more callback functions
Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
@@ -187,10 +187,10 @@ class Menu : public Widget
|
|||||||
*
|
*
|
||||||
* @note The modified item replaces the original in the menu's item collection
|
* @note The modified item replaces the original in the menu's item collection
|
||||||
*/
|
*/
|
||||||
void switchValue(const MenuItem &menuItem, ButtonType button);
|
MenuItem switchValue(const MenuItem &menuItem, ButtonType button);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void replaceItem(int index, const MenuItem &item);
|
MenuItem replaceItem(int index, const MenuItem &item);
|
||||||
|
|
||||||
void render() override;
|
void render() override;
|
||||||
|
|
||||||
|
@@ -58,7 +58,7 @@ void Menu::setItemSize(const size_t size)
|
|||||||
{
|
{
|
||||||
for (size_t i = m_items.size() - 1; i < size; i++)
|
for (size_t i = m_items.size() - 1; i < size; i++)
|
||||||
{
|
{
|
||||||
auto caption = std::string("Section ") + std::to_string(i + 1);
|
auto caption = std::string("Bereich ") + std::to_string(i + 1);
|
||||||
addSelection(i + 1, caption, m_items.at(0).getValues(), 0);
|
addSelection(i + 1, caption, m_items.at(0).getValues(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -75,20 +75,21 @@ void Menu::toggle(const MenuItem &menuItem)
|
|||||||
replaceItem(menuItem.getId(), item);
|
replaceItem(menuItem.getId(), item);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menu::switchValue(const MenuItem& menuItem, ButtonType button)
|
MenuItem Menu::switchValue(const MenuItem &menuItem, ButtonType button)
|
||||||
{
|
{
|
||||||
|
MenuItem result = menuItem;
|
||||||
switch (button)
|
switch (button)
|
||||||
{
|
{
|
||||||
case ButtonType::LEFT:
|
case ButtonType::LEFT:
|
||||||
if (menuItem.getIndex() > 0)
|
if (menuItem.getIndex() > 0)
|
||||||
{
|
{
|
||||||
const auto item = menuItem.copyWith(menuItem.getIndex() - 1);
|
const auto item = menuItem.copyWith(menuItem.getIndex() - 1);
|
||||||
replaceItem(menuItem.getId(), item);
|
result = replaceItem(menuItem.getId(), item);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const auto item = menuItem.copyWith(menuItem.getItemCount() - 1);
|
const auto item = menuItem.copyWith(menuItem.getItemCount() - 1);
|
||||||
replaceItem(menuItem.getId(), item);
|
result = replaceItem(menuItem.getId(), item);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -96,23 +97,26 @@ void Menu::switchValue(const MenuItem& menuItem, ButtonType button)
|
|||||||
if (menuItem.getIndex() < menuItem.getItemCount() - 1)
|
if (menuItem.getIndex() < menuItem.getItemCount() - 1)
|
||||||
{
|
{
|
||||||
const auto item = menuItem.copyWith(menuItem.getIndex() + 1);
|
const auto item = menuItem.copyWith(menuItem.getIndex() + 1);
|
||||||
replaceItem(menuItem.getId(), item);
|
result = replaceItem(menuItem.getId(), item);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const auto item = menuItem.copyWith(0);
|
const auto item = menuItem.copyWith(0);
|
||||||
replaceItem(menuItem.getId(), item);
|
result = replaceItem(menuItem.getId(), item);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menu::replaceItem(const int index, const MenuItem &item)
|
MenuItem Menu::replaceItem(const int index, const MenuItem &item)
|
||||||
{
|
{
|
||||||
m_items.at(index) = item;
|
m_items.at(index) = item;
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menu::render()
|
void Menu::render()
|
||||||
@@ -172,6 +176,13 @@ void Menu::renderWidget(const MenuItem *item, const uint8_t *font, const int x,
|
|||||||
// Render type-specific elements
|
// Render type-specific elements
|
||||||
switch (item->getType())
|
switch (item->getType())
|
||||||
{
|
{
|
||||||
|
case MenuItemTypes::TEXT: {
|
||||||
|
const std::string formattedValue = ">";
|
||||||
|
const u8g2_uint_t textWidth = u8g2_GetStrWidth(u8g2, formattedValue.c_str());
|
||||||
|
u8g2_DrawStr(u8g2, u8g2->width - textWidth - UIConstants::SELECTION_MARGIN, y, formattedValue.c_str());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case MenuItemTypes::SELECTION: {
|
case MenuItemTypes::SELECTION: {
|
||||||
// Format selection value with angle brackets
|
// Format selection value with angle brackets
|
||||||
const std::string formattedValue = "< " + item->getValue() + " >";
|
const std::string formattedValue = "< " + item->getValue() + " >";
|
||||||
@@ -201,7 +212,6 @@ void Menu::renderWidget(const MenuItem *item, const uint8_t *font, const int x,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case MenuItemTypes::TEXT:
|
|
||||||
default:
|
default:
|
||||||
// No additional rendering needed for text and number types
|
// No additional rendering needed for text and number types
|
||||||
break;
|
break;
|
||||||
|
@@ -25,11 +25,12 @@ LightMenu::LightMenu(menu_options_t *options) : Menu(options), m_options(options
|
|||||||
addSelection(LightMenuItem::MODE, "Modus", values, 0);
|
addSelection(LightMenuItem::MODE, "Modus", values, 0);
|
||||||
|
|
||||||
// Add menu item for accessing LED settings submenu
|
// Add menu item for accessing LED settings submenu
|
||||||
addText(LightMenuItem::LED_SETTINGS, "LED Einstellungen");
|
addText(LightMenuItem::LED_SETTINGS, "Einstellungen");
|
||||||
}
|
}
|
||||||
|
|
||||||
void LightMenu::onButtonPressed(const MenuItem &menuItem, const ButtonType button)
|
void LightMenu::onButtonPressed(const MenuItem &menuItem, const ButtonType button)
|
||||||
{
|
{
|
||||||
|
MenuItem item = menuItem;
|
||||||
std::shared_ptr<Widget> widget;
|
std::shared_ptr<Widget> widget;
|
||||||
|
|
||||||
// Handle different menu items based on their ID
|
// Handle different menu items based on their ID
|
||||||
@@ -41,12 +42,25 @@ void LightMenu::onButtonPressed(const MenuItem &menuItem, const ButtonType butto
|
|||||||
{
|
{
|
||||||
toggle(menuItem);
|
toggle(menuItem);
|
||||||
}
|
}
|
||||||
|
if (m_options && m_options->persistence && m_options->persistence->save)
|
||||||
|
{
|
||||||
|
const auto value = getItem(item.getId()).getValue();
|
||||||
|
m_options->persistence->save("light_activated", value.c_str());
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case LightMenuItem::MODE: {
|
case LightMenuItem::MODE: {
|
||||||
// Switch between day/night modes using left/right buttons
|
// Switch between day/night modes using left/right buttons
|
||||||
switchValue(menuItem, button);
|
item = switchValue(menuItem, button);
|
||||||
|
if (button == ButtonType::LEFT || button == ButtonType::RIGHT)
|
||||||
|
{
|
||||||
|
if (m_options && m_options->persistence && m_options->persistence->save)
|
||||||
|
{
|
||||||
|
const auto value = std::to_string(getItem(item.getId()).getIndex());
|
||||||
|
m_options->persistence->save("light_mode", value.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,6 +1,11 @@
|
|||||||
#include "ui/SettingsMenu.h"
|
#include "ui/SettingsMenu.h"
|
||||||
|
|
||||||
|
namespace SettingsMenuItem
|
||||||
|
{
|
||||||
|
constexpr uint8_t OTA_UPLOAD = 0;
|
||||||
|
}
|
||||||
|
|
||||||
SettingsMenu::SettingsMenu(menu_options_t *options) : Menu(options)
|
SettingsMenu::SettingsMenu(menu_options_t *options) : Menu(options)
|
||||||
{
|
{
|
||||||
addText(1, "OTA Einspielen");
|
addText(SettingsMenuItem::OTA_UPLOAD, "OTA Einspielen");
|
||||||
}
|
}
|
Reference in New Issue
Block a user