141 lines
6.8 KiB
C++
141 lines
6.8 KiB
C++
/**
|
|
* @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;
|
|
}; |