Initial commit
This commit is contained in:
151
main/ui_settings.c
Normal file
151
main/ui_settings.c
Normal file
@@ -0,0 +1,151 @@
|
||||
#include "ui_settings.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "bsp/esp-bsp.h"
|
||||
#include "esp_log.h"
|
||||
#include "lvgl.h"
|
||||
#include "settings.h"
|
||||
#include "ui_main.h"
|
||||
|
||||
static const char *TAG = "ui_settings";
|
||||
|
||||
static tarot_settings_t s_edit_settings;
|
||||
|
||||
static void back_cb(lv_event_t *event);
|
||||
static void reversed_cb(lv_event_t *event);
|
||||
static void save_readings_cb(lv_event_t *event);
|
||||
static void brightness_cb(lv_event_t *event);
|
||||
static void theme_cb(lv_event_t *event);
|
||||
static void spread_cb(lv_event_t *event);
|
||||
|
||||
static void board_set_brightness(uint8_t brightness)
|
||||
{
|
||||
esp_err_t err = bsp_display_brightness_set(brightness);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Failed to set brightness: %s", esp_err_to_name(err));
|
||||
}
|
||||
}
|
||||
|
||||
static lv_obj_t *add_row(lv_obj_t *parent, const char *label_text)
|
||||
{
|
||||
lv_obj_t *row = lv_obj_create(parent);
|
||||
lv_obj_set_width(row, LV_PCT(100));
|
||||
lv_obj_set_height(row, LV_SIZE_CONTENT);
|
||||
lv_obj_set_style_bg_opa(row, LV_OPA_TRANSP, 0);
|
||||
lv_obj_set_style_border_width(row, 0, 0);
|
||||
lv_obj_set_flex_flow(row, LV_FLEX_FLOW_ROW);
|
||||
lv_obj_set_flex_align(row, LV_FLEX_ALIGN_SPACE_BETWEEN, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
|
||||
|
||||
lv_obj_t *label = lv_label_create(row);
|
||||
lv_label_set_text(label, label_text);
|
||||
return row;
|
||||
}
|
||||
|
||||
static void save_current_settings(void)
|
||||
{
|
||||
esp_err_t err = settings_save(&s_edit_settings);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Failed to save settings: %s", esp_err_to_name(err));
|
||||
}
|
||||
}
|
||||
|
||||
void ui_show_settings(void)
|
||||
{
|
||||
s_edit_settings = settings_get();
|
||||
ui_apply_current_theme();
|
||||
|
||||
lv_obj_t *screen = lv_obj_create(NULL);
|
||||
lv_obj_set_style_pad_all(screen, 18, 0);
|
||||
lv_obj_set_flex_flow(screen, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_flex_align(screen, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
|
||||
|
||||
lv_obj_t *title = lv_label_create(screen);
|
||||
lv_label_set_text(title, "Settings");
|
||||
|
||||
lv_obj_t *row = add_row(screen, "Reversed cards");
|
||||
lv_obj_t *sw = lv_switch_create(row);
|
||||
if (s_edit_settings.reversed_cards_enabled) {
|
||||
lv_obj_add_state(sw, LV_STATE_CHECKED);
|
||||
}
|
||||
lv_obj_add_event_cb(sw, reversed_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
|
||||
row = add_row(screen, "Save readings");
|
||||
sw = lv_switch_create(row);
|
||||
if (s_edit_settings.save_readings_enabled) {
|
||||
lv_obj_add_state(sw, LV_STATE_CHECKED);
|
||||
}
|
||||
lv_obj_add_event_cb(sw, save_readings_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
|
||||
row = add_row(screen, "Brightness");
|
||||
lv_obj_t *slider = lv_slider_create(row);
|
||||
lv_obj_set_width(slider, 190);
|
||||
lv_slider_set_range(slider, 10, 100);
|
||||
lv_slider_set_value(slider, s_edit_settings.brightness, LV_ANIM_OFF);
|
||||
lv_obj_add_event_cb(slider, brightness_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
|
||||
row = add_row(screen, "Theme");
|
||||
lv_obj_t *theme = lv_dropdown_create(row);
|
||||
lv_dropdown_set_options(theme, "Dark\nLight\nMystic");
|
||||
lv_dropdown_set_selected(theme, s_edit_settings.theme);
|
||||
lv_obj_set_width(theme, 170);
|
||||
lv_obj_add_event_cb(theme, theme_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
|
||||
row = add_row(screen, "Spread");
|
||||
lv_obj_t *spread = lv_dropdown_create(row);
|
||||
lv_dropdown_set_options(spread, "3-card\n8-card");
|
||||
lv_dropdown_set_selected(spread, s_edit_settings.selected_spread == TAROT_SPREAD_3_CARD ? 0 : 1);
|
||||
lv_obj_set_width(spread, 170);
|
||||
lv_obj_add_event_cb(spread, spread_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
|
||||
lv_obj_t *back = lv_btn_create(screen);
|
||||
lv_obj_set_size(back, 190, 52);
|
||||
lv_obj_add_event_cb(back, back_cb, LV_EVENT_CLICKED, NULL);
|
||||
lv_obj_t *back_label = lv_label_create(back);
|
||||
lv_label_set_text(back_label, "Back");
|
||||
lv_obj_center(back_label);
|
||||
|
||||
lv_scr_load(screen);
|
||||
}
|
||||
|
||||
static void reversed_cb(lv_event_t *event)
|
||||
{
|
||||
lv_obj_t *target = lv_event_get_target(event);
|
||||
s_edit_settings.reversed_cards_enabled = lv_obj_has_state(target, LV_STATE_CHECKED);
|
||||
save_current_settings();
|
||||
}
|
||||
|
||||
static void save_readings_cb(lv_event_t *event)
|
||||
{
|
||||
lv_obj_t *target = lv_event_get_target(event);
|
||||
s_edit_settings.save_readings_enabled = lv_obj_has_state(target, LV_STATE_CHECKED);
|
||||
save_current_settings();
|
||||
}
|
||||
|
||||
static void brightness_cb(lv_event_t *event)
|
||||
{
|
||||
lv_obj_t *target = lv_event_get_target(event);
|
||||
s_edit_settings.brightness = (uint8_t)lv_slider_get_value(target);
|
||||
board_set_brightness(s_edit_settings.brightness);
|
||||
save_current_settings();
|
||||
}
|
||||
|
||||
static void theme_cb(lv_event_t *event)
|
||||
{
|
||||
lv_obj_t *target = lv_event_get_target(event);
|
||||
s_edit_settings.theme = (tarot_theme_t)lv_dropdown_get_selected(target);
|
||||
save_current_settings();
|
||||
}
|
||||
|
||||
static void spread_cb(lv_event_t *event)
|
||||
{
|
||||
lv_obj_t *target = lv_event_get_target(event);
|
||||
s_edit_settings.selected_spread = lv_dropdown_get_selected(target) == 0 ? TAROT_SPREAD_3_CARD : TAROT_SPREAD_8_CARD;
|
||||
save_current_settings();
|
||||
}
|
||||
|
||||
static void back_cb(lv_event_t *event)
|
||||
{
|
||||
(void)event;
|
||||
ui_show_home();
|
||||
}
|
||||
Reference in New Issue
Block a user