/** * @file LightMenu.h * @brief Light control menu implementation for lighting system management * @details This header defines the LightMenu class which provides a specialized * user interface for controlling lighting systems and illumination features. * It extends the Menu base class to offer comprehensive light control * functionality including brightness adjustment, color selection, and * lighting mode configuration. * @author System Control Team * @date 2025-06-14 */ #pragma once #include "common/Menu.h" /** * @class LightMenu * @brief Light control menu interface class for illumination system management * @details This final class inherits from Menu and provides a comprehensive interface * for controlling various aspects of the lighting system. It allows users to * adjust brightness levels, select colors, configure lighting modes, and * manage automated lighting behaviors. * * The LightMenu class extends the base Menu functionality by: * - Providing light-specific control options (brightness, color, modes) * - Implementing real-time lighting preview and feedback * - Managing lighting presets and custom configurations * - Handling immediate lighting adjustments and scheduled operations * * Typical lighting control features include: * - Brightness adjustment (0-100% or similar range) * - Color selection (RGB, HSV, or predefined colors) * - Lighting modes (solid, fade, strobe, custom patterns) * - Timer-based automation (on/off schedules) * - Preset management (save/load favorite configurations) * - Zone-based control (if multiple light zones are supported) * * The menu provides immediate visual feedback by applying changes to the * connected lighting hardware in real-time as users navigate through options. * * @note This class is marked as final and cannot be inherited from. * @note Lighting changes are typically applied immediately for instant feedback, * with the option to save configurations as presets. * * @see Menu for base menu functionality * @see menu_options_t for configuration structure * @see MainMenu for navigation back to main interface */ class LightMenu final : public Menu { public: /** * @brief Constructs the light control menu with the specified configuration * @param options Pointer to menu options configuration structure * * @pre options must not be nullptr and must remain valid for the menu's lifetime * @pre options->u8g2 must be initialized and ready for graphics operations * @pre All callback functions in options must be properly configured * @pre Lighting hardware must be initialized and responsive * @post LightMenu is initialized with current lighting state and ready for user interaction * * @details The constructor initializes the light control menu by: * - Reading current lighting system state and parameters * - Creating appropriate menu items for available lighting features * - Setting up real-time preview capabilities * - Loading saved lighting presets and configurations * - Configuring value ranges and validation for lighting parameters * * The menu automatically detects available lighting capabilities and presents * only the controls that are supported by the connected hardware. This ensures * a consistent user experience across different lighting system configurations. * * @note The menu does not take ownership of the options structure and assumes * it remains valid throughout the menu's lifetime. * @note Current lighting state is preserved and can be restored if the user * exits without saving changes. * * @see Menu::Menu for base class construction details */ explicit LightMenu(menu_options_t *options); private: /** * @brief Handles button press events specific to light control menu items * @param menuItem * @param button Type of button that was pressed * * @details Overrides the base Menu class method to provide light control-specific * button handling logic. This method processes user interactions with * lighting control items and performs appropriate actions such as: * - Adjusting brightness levels (increment/decrement) * - Changing color values or selecting predefined colors * - Switching between lighting modes and patterns * - Saving/loading lighting presets * - Toggling lighting zones on/off * - Applying lighting changes immediately to hardware * * The method provides real-time feedback by immediately applying lighting * changes to the connected hardware, allowing users to see the effects of * their adjustments instantly. It also handles validation to ensure that * lighting parameters remain within safe and supported ranges. * * Special handling includes: * - Smooth transitions for brightness adjustments * - Color wheel navigation for color selection * - Mode cycling for lighting patterns * - Confirmation prompts for preset operations * * @note This method is called by the base Menu class when a button press * occurs on a menu item, after the base class has handled standard * navigation operations. * @note Changes are applied immediately to provide instant visual feedback, * but can be reverted if the user cancels or exits without saving. * * @see Menu::onButtonPressed for the base implementation * @see ButtonType for available button types */ void onButtonPressed(const MenuItem& menuItem, ButtonType button) override; /** * @brief Pointer to menu options configuration structure * @details Stores a reference to the menu configuration passed during construction. * This pointer provides access to the display context and callback functions * needed for menu operations, screen transitions, and lighting control * communication with the hardware subsystem. * * The configuration enables: * - Display context for rendering lighting control interface * - Screen management callbacks for navigation to other menus * - Hardware communication for real-time lighting control * - System callbacks for lighting state persistence * * @note This pointer is not owned by the LightMenu and must remain valid * throughout the menu's lifetime. It is managed by the application framework. * * @warning Must not be modified after construction as it may be shared * with other components and contains critical system callbacks. */ menu_options_t *m_options; };