knxdisplay/main/WidgetManager.hpp
2026-01-23 17:21:54 +01:00

63 lines
1.8 KiB
C++

#pragma once
#include "WidgetConfig.hpp"
#include "lvgl.h"
#include <array>
class WidgetManager {
public:
static WidgetManager& instance();
// Initialize (load config from SD card)
void init();
// Build/rebuild all widgets from current config
// Call this after loading or when user clicks "Save" in web editor
void applyConfig();
// Get current config for web editor (JSON)
void getConfigJson(char* buf, size_t bufSize) const;
// Update config from web editor (JSON) - does NOT apply immediately
bool updateConfigFromJson(const char* json);
// Save current config to SD card and apply to display
void saveAndApply();
// Reset to factory defaults
void resetToDefaults();
// KNX value update (called from KnxWorker)
void onKnxValue(uint16_t groupAddr, float value);
void onKnxSwitch(uint16_t groupAddr, bool value);
void onKnxText(uint16_t groupAddr, const char* text);
// Direct config access
ScreenConfig& getConfig() { return config_; }
const ScreenConfig& getConfig() const { return config_; }
private:
WidgetManager();
~WidgetManager() = default;
WidgetManager(const WidgetManager&) = delete;
WidgetManager& operator=(const WidgetManager&) = delete;
void loadFromSdCard();
void saveToSdCard();
void destroyAllWidgets();
void createAllWidgets();
lv_obj_t* createWidget(const WidgetConfig& cfg);
void applyStyle(lv_obj_t* obj, const WidgetConfig& cfg);
const lv_font_t* getFontBySize(uint8_t sizeIndex);
void createDefaultConfig();
static constexpr const char* CONFIG_FILE = "/sdcard/lvgl.json";
ScreenConfig config_;
// Runtime widget references (indexed by widget ID)
std::array<lv_obj_t*, MAX_WIDGETS> widgetObjects_;
lv_obj_t* screen_ = nullptr;
};