dashboard: refine battery detail page layout

This commit is contained in:
2026-06-19 00:32:22 -06:00
parent 83814f13b6
commit 9d11adebd8
2 changed files with 65 additions and 24 deletions
@@ -626,21 +626,21 @@ static String battery_detail_signed(float value, int decimals, const char *suffi
static void battery_detail_value_label(lv_obj_t *parent, const char *title, lv_obj_t **value, int x, int y)
{
lv_obj_t *card = create_card(parent, "", 285, 118, LV_ALIGN_TOP_LEFT, x, y);
lv_obj_t *card = create_card(parent, "", 292, 112, LV_ALIGN_TOP_LEFT, x, y);
lv_obj_t *title_label = lv_label_create(card);
lv_label_set_text(title_label, title);
lv_obj_set_style_text_color(title_label, lv_color_hex(0xB8C0C8), 0);
lv_obj_set_style_text_font(title_label, &lv_font_montserrat_26, 0);
lv_obj_align(title_label, LV_ALIGN_TOP_LEFT, 16, 12);
lv_obj_align(title_label, LV_ALIGN_TOP_LEFT, 16, 10);
*value = lv_label_create(card);
lv_label_set_text(*value, "--");
lv_obj_set_style_text_color(*value, lv_color_hex(0xFFFFFF), 0);
lv_obj_set_style_text_font(*value, &lv_font_montserrat_30, 0);
lv_obj_set_width(*value, 250);
lv_obj_set_width(*value, 260);
lv_obj_set_style_text_align(*value, LV_TEXT_ALIGN_LEFT, 0);
lv_obj_align(*value, LV_ALIGN_TOP_LEFT, 16, 58);
lv_obj_align(*value, LV_ALIGN_TOP_LEFT, 16, 54);
}
static void update_battery_detail_widgets()
@@ -715,36 +715,77 @@ static void create_battery_detail_screen()
current_dashboard_screen = SCREEN_BATTERY_DETAIL;
// Match the main dashboard status bar layout.
lv_obj_t *system_card = create_card(battery_detail_page, "", 960, 48, LV_ALIGN_TOP_MID, 0, 12);
lv_obj_add_flag(system_card, LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(system_card, system_card_event_cb, LV_EVENT_CLICKED, nullptr);
lv_obj_t *title = lv_label_create(system_card);
lv_label_set_text(title, "BATTERY DETAIL");
lv_obj_set_style_text_color(title, lv_color_hex(0xFFFFFF), 0);
lv_obj_set_style_text_font(title, &lv_font_montserrat_26, 0);
lv_obj_align(title, LV_ALIGN_LEFT_MID, 22, 0);
lv_obj_t *detail_status_dot = lv_obj_create(system_card);
lv_obj_set_size(detail_status_dot, 18, 18);
lv_obj_set_style_radius(detail_status_dot, LV_RADIUS_CIRCLE, 0);
lv_obj_set_style_bg_color(detail_status_dot, last_cargo_api_ok ? lv_color_hex(0x32D583) : lv_color_hex(0xF97066), 0);
lv_obj_set_style_border_width(detail_status_dot, 0, 0);
lv_obj_align(detail_status_dot, LV_ALIGN_LEFT_MID, 24, 0);
lv_obj_t *hint = lv_label_create(system_card);
lv_label_set_text(hint, "Swipe right to go back");
lv_obj_set_style_text_color(hint, lv_color_hex(0xB8C0C8), 0);
lv_obj_set_style_text_font(hint, &lv_font_montserrat_26, 0);
lv_obj_align(hint, LV_ALIGN_RIGHT_MID, -18, 0);
lv_obj_t *outside_label = lv_label_create(system_card);
lv_label_set_text(outside_label, last_outside_status_temp_text.length() ? last_outside_status_temp_text.c_str() : "OUT --");
lv_obj_set_style_text_color(outside_label, lv_color_hex(0xDDE3EA), 0);
lv_obj_set_style_text_font(outside_label, &lv_font_montserrat_30, 0);
lv_obj_set_width(outside_label, 220);
lv_obj_set_style_text_align(outside_label, LV_TEXT_ALIGN_CENTER, 0);
lv_obj_align(outside_label, LV_ALIGN_CENTER, 0, 0);
lv_obj_t *page_label = lv_label_create(system_card);
lv_label_set_text(page_label, "BATTERY");
lv_obj_set_style_text_color(page_label, lv_color_hex(0xB8C0C8), 0);
lv_obj_set_style_text_font(page_label, &lv_font_montserrat_26, 0);
lv_obj_set_width(page_label, 160);
lv_obj_set_style_text_align(page_label, LV_TEXT_ALIGN_RIGHT, 0);
lv_obj_align(page_label, LV_ALIGN_RIGHT_MID, -10, 0);
// Left summary card.
lv_obj_t *soc_card = create_card(battery_detail_page, "", 300, 500, LV_ALIGN_TOP_LEFT, 32, 68);
battery_detail_status_label = lv_label_create(soc_card);
lv_label_set_text(battery_detail_status_label, "BMS --");
lv_obj_set_style_text_color(battery_detail_status_label, lv_color_hex(0xB8C0C8), 0);
lv_obj_set_style_text_font(battery_detail_status_label, &lv_font_montserrat_26, 0);
lv_obj_set_width(battery_detail_status_label, 260);
lv_obj_set_style_text_align(battery_detail_status_label, LV_TEXT_ALIGN_CENTER, 0);
lv_obj_align(battery_detail_status_label, LV_ALIGN_TOP_MID, 0, 34);
lv_obj_t *soc_card = create_card(battery_detail_page, "", 300, 500, LV_ALIGN_TOP_LEFT, 32, 78);
battery_detail_soc_label = lv_label_create(soc_card);
lv_label_set_text(battery_detail_soc_label, "--%");
lv_obj_set_style_text_color(battery_detail_soc_label, lv_color_hex(0xFFFFFF), 0);
lv_obj_set_style_text_font(battery_detail_soc_label, &lv_font_montserrat_48, 0);
lv_obj_set_width(battery_detail_soc_label, 260);
lv_obj_set_style_text_align(battery_detail_soc_label, LV_TEXT_ALIGN_CENTER, 0);
lv_obj_align(battery_detail_soc_label, LV_ALIGN_CENTER, 0, -20);
lv_obj_align(battery_detail_soc_label, LV_ALIGN_TOP_MID, 0, 150);
battery_detail_value_label(battery_detail_page, "Voltage", &battery_detail_voltage_label, 356, 78);
battery_detail_value_label(battery_detail_page, "Current", &battery_detail_current_label, 670, 78);
battery_detail_value_label(battery_detail_page, "Power", &battery_detail_power_label, 356, 220);
battery_detail_value_label(battery_detail_page, "Remaining", &battery_detail_remaining_label, 670, 220);
battery_detail_value_label(battery_detail_page, "Capacity", &battery_detail_capacity_label, 356, 362);
battery_detail_value_label(battery_detail_page, "Battery Temp", &battery_detail_temp_label, 670, 362);
battery_detail_value_label(battery_detail_page, "Cell Delta", &battery_detail_delta_label, 356, 504);
battery_detail_estimate_label = lv_label_create(soc_card);
lv_label_set_text(battery_detail_estimate_label, "--");
lv_obj_set_style_text_color(battery_detail_estimate_label, lv_color_hex(0xDDE3EA), 0);
lv_obj_set_style_text_font(battery_detail_estimate_label, &lv_font_montserrat_30, 0);
lv_obj_set_width(battery_detail_estimate_label, 260);
lv_obj_set_style_text_align(battery_detail_estimate_label, LV_TEXT_ALIGN_CENTER, 0);
lv_obj_align(battery_detail_estimate_label, LV_ALIGN_TOP_MID, 0, 258);
lv_obj_t *back_hint = lv_label_create(soc_card);
lv_label_set_text(back_hint, "Swipe right to go back");
lv_obj_set_style_text_color(back_hint, lv_color_hex(0x7D8996), 0);
lv_obj_set_style_text_font(back_hint, &lv_font_montserrat_26, 0);
lv_obj_set_width(back_hint, 260);
lv_obj_set_style_text_align(back_hint, LV_TEXT_ALIGN_CENTER, 0);
lv_obj_align(back_hint, LV_ALIGN_BOTTOM_MID, 0, -28);
// Right-side compact metrics. Fits fully within 1024x600.
battery_detail_value_label(battery_detail_page, "Voltage", &battery_detail_voltage_label, 356, 68);
battery_detail_value_label(battery_detail_page, "Current", &battery_detail_current_label, 670, 68);
battery_detail_value_label(battery_detail_page, "Power", &battery_detail_power_label, 356, 192);
battery_detail_value_label(battery_detail_page, "Remaining", &battery_detail_remaining_label, 670, 192);
battery_detail_value_label(battery_detail_page, "Capacity", &battery_detail_capacity_label, 356, 316);
battery_detail_value_label(battery_detail_page, "Battery Temp", &battery_detail_temp_label, 670, 316);
battery_detail_value_label(battery_detail_page, "Cell Delta", &battery_detail_delta_label, 356, 440);
reset_battery_detail_widget_cache();
update_battery_detail_widgets();