knxdisplay/main/Gui/EthSetting.cpp
2026-01-24 18:31:31 +01:00

85 lines
2.2 KiB
C++

#include "EthSetting.hpp"
#include "esp_lv_adapter.h"
#include "esp_log.h"
#include <cstring>
static const char* TAG = "EthSetting";
EthSetting& EthSetting::instance() {
static EthSetting instance;
return instance;
}
void EthSetting::show() {
if (visible_) {
return;
}
ESP_LOGI(TAG, "Showing ETH settings");
if (esp_lv_adapter_lock(-1) == ESP_OK) {
createUI();
visible_ = true;
esp_lv_adapter_unlock();
}
}
void EthSetting::hide() {
if (!visible_) {
return;
}
ESP_LOGI(TAG, "Hiding ETH settings");
if (esp_lv_adapter_lock(-1) == ESP_OK) {
if (overlay_) {
lv_obj_del(overlay_);
overlay_ = nullptr;
}
visible_ = false;
esp_lv_adapter_unlock();
}
}
bool EthSetting::isVisible() {
return visible_;
}
void EthSetting::createUI() {
overlay_ = lv_obj_create(lv_scr_act());
lv_obj_set_size(overlay_, LV_PCT(100), LV_PCT(100));
lv_obj_set_style_bg_color(overlay_, lv_color_hex(0x202020), 0);
lv_obj_set_style_bg_opa(overlay_, LV_OPA_COVER, 0);
lv_obj_set_style_pad_all(overlay_, 10, 0);
lv_obj_clear_flag(overlay_, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_t* header = lv_obj_create(overlay_);
lv_obj_set_size(header, LV_PCT(100), 50);
lv_obj_align(header, LV_ALIGN_TOP_MID, 0, 0);
lv_obj_set_style_bg_color(header, lv_color_hex(0x303030), 0);
lv_obj_set_style_pad_all(header, 5, 0);
lv_obj_clear_flag(header, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_t* closeBtn = lv_btn_create(header);
lv_obj_set_size(closeBtn, 40, 40);
lv_obj_align(closeBtn, LV_ALIGN_LEFT_MID, 0, 0);
lv_obj_set_style_bg_color(closeBtn, lv_color_hex(0x804040), 0);
//lv_obj_add_event_cb(closeBtn, onCloseClick, LV_EVENT_CLICKED, nullptr);
lv_obj_t* closeLbl = lv_label_create(closeBtn);
lv_label_set_text(closeLbl, "X");
lv_obj_center(closeLbl);
lv_obj_t* titleLbl = lv_label_create(header);
lv_label_set_text(titleLbl, "Eth Settings");
lv_obj_set_style_text_font(titleLbl, &lv_font_montserrat_14, 0);
lv_obj_align(titleLbl, LV_ALIGN_CENTER, 0, 0);
}
void EthSetting::onCloseClick(lv_event_t* e) {
(void)e;
EthSetting::instance().hide();
}