From aa02f100f720a376ebb361dc14f9f770ea852228 Mon Sep 17 00:00:00 2001 From: raw-designs Date: Sun, 13 Sep 2026 01:25:38 +0200 Subject: [PATCH] fix(P4): Kachelwerte auf gleicher Hoehe, Menue breiter (1.13.1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zahlen und Nebenzeilen saßen von Kachel zu Kachel unterschiedlich hoch. Ursache war der Fortschrittsbalken: Ihn hatten nur Shot, Waage und Dampf, die übrigen Kacheln nicht. Das Flex-Layout verteilt die Höhe aber auf die vorhandenen Kinder - mit drei Kindern landeten Zahl und Nebenzeile deshalb woanders als mit vieren. Der Balken gehört jetzt zu jeder Kachel und wird von infoCell selbst angelegt. Wo er nichts zu sagen hat, bleibt er durchsichtig. Damit haben alle sechs Kacheln dieselben vier Kinder mit denselben festen Höhen, und die Verteilung fällt zwangsläufig gleich aus. Das Menü ist von 340 auf 400 Pixel verbreitert, damit auch die langen Beschriftungen samt Nebenwert bequem in eine Zeile passen. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01GS6yPCpxJmmbF5Z9J6hiHp --- P4_Display_Firmware/Changelog.txt | 9 +++++++ P4_Display_Firmware/config.h | 2 +- P4_Display_Firmware/ui.cpp | 41 +++++++++++++++++-------------- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/P4_Display_Firmware/Changelog.txt b/P4_Display_Firmware/Changelog.txt index 5e20372..ba5d260 100644 --- a/P4_Display_Firmware/Changelog.txt +++ b/P4_Display_Firmware/Changelog.txt @@ -1,3 +1,12 @@ +Version 1.13.1: +- Zahlen und Nebenzeilen der Kacheln stehen in allen Kacheln auf derselben Höhe. Bisher + hatten nur Shot, Waage und Dampf einen Fortschrittsbalken - das Layout verteilte die Höhe + dadurch je Kachel anders, und Zahlen wie Nebenzeilen saßen unterschiedlich hoch. Der + Balken gehört jetzt zu jeder Kachel und bleibt dort durchsichtig, wo er nichts zu sagen + hat. +- Das Menü ist breiter (400 statt 340 Pixel), damit auch lange Beschriftungen samt + Nebenwert bequem in eine Zeile passen. + Version 1.13.0: - Neue Oberfläche für die Startseite und das Menü. Die Anordnung bleibt, was sie war - Statuszeile, zwei Kessel, darunter die Werte -, aber jede Beschriftung trägt jetzt ihr diff --git a/P4_Display_Firmware/config.h b/P4_Display_Firmware/config.h index d45217a..eba8725 100644 --- a/P4_Display_Firmware/config.h +++ b/P4_Display_Firmware/config.h @@ -126,7 +126,7 @@ // ------------------------------------------------------------------------------------- // Firmware // ------------------------------------------------------------------------------------- -#define DISPLAY_FW_VERSION "1.13.0" // Firmware-Stand der P4-Display-Steuerung (Info-Seite) +#define DISPLAY_FW_VERSION "1.13.1" // Firmware-Stand der P4-Display-Steuerung (Info-Seite) // ------------------------------------------------------------------------------------- // Protokoll diff --git a/P4_Display_Firmware/ui.cpp b/P4_Display_Firmware/ui.cpp index 06cffa7..492d305 100644 --- a/P4_Display_Firmware/ui.cpp +++ b/P4_Display_Firmware/ui.cpp @@ -1702,7 +1702,8 @@ static void build_temp_row_content() { // Feste Masse in beide Richtungen - siehe die ausfuehrliche Begruendung in tempField. static lv_obj_t* infoCell(lv_obj_t* parent, const char* title, const lv_image_dsc_t* bild, lv_obj_t** val, lv_color_t accent, lv_obj_t** sub = nullptr, - lv_obj_t** titleOut = nullptr, lv_obj_t** iconOut = nullptr) { + lv_obj_t** bar = nullptr, lv_obj_t** titleOut = nullptr, + lv_obj_t** iconOut = nullptr) { lv_obj_t* card = th_card(parent); lv_obj_set_height(card, LV_PCT(100)); lv_obj_set_flex_grow(card, 1); // alle Zellen teilen sich die Breite gleichmaessig @@ -1738,11 +1739,10 @@ static lv_obj_t* infoCell(lv_obj_t* parent, const char* title, const lv_image_ds lv_obj_set_height(sl, lv_font_get_line_height(font_small()) + 2); if (sub) *sub = sl; - return card; -} - -// Zielfortschritt unter einer Kachel (Shot-Zeit, Bezugsgewicht, Dampfzeit). -static lv_obj_t* zielBalken(lv_obj_t* card) { + // Der Zielbalken gehoert zu JEDER Kachel, auch wenn sie ihn nie benutzt. Haetten nur + // manche Kacheln ihn, verteilte das Layout die Hoehe unterschiedlich - Zahlen und + // Nebenzeilen staenden dann von Kachel zu Kachel auf verschiedenen Hoehen. Wo er + // nichts zu sagen hat, bleibt er durchsichtig. lv_obj_t* b = lv_bar_create(card); lv_obj_set_width(b, LV_PCT(100)); lv_obj_set_height(b, 6); @@ -1753,12 +1753,12 @@ static lv_obj_t* zielBalken(lv_obj_t* card) { lv_obj_set_style_radius(b, 3, LV_PART_INDICATOR); lv_bar_set_range(b, 0, 100); lv_bar_set_value(b, 0, LV_ANIM_OFF); - // Ausserhalb eines Bezugs durchsichtig, NICHT versteckt: Ein verstecktes Element - // faellt aus dem Flex-Layout heraus, und die Zahl darueber rueckte dann bei jedem - // Bezugsbeginn ein Stueck nach unten. lv_obj_set_style_opa(b, LV_OPA_TRANSP, 0); - return b; + if (bar) *bar = b; + + return card; } + // Tipp auf die Statuszeile: Wartung -> Serviceseite, Reinigung -> Sub-Screen, // PID-Tuning -> Verlauf-Seite (dort liegen Live-Karte und Schwingungskurve) static void status_line_cb(lv_event_t*) { @@ -1841,13 +1841,13 @@ static void build_dashboard(lv_obj_t* p) { lv_obj_set_flex_flow(ir, LV_FLEX_FLOW_ROW); lv_obj_set_flex_align(ir, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); lv_obj_clear_flag(ir, LV_OBJ_FLAG_SCROLLABLE); - cellShot = infoCell(ir, "SHOT", &sym_stoppuhr, &lblShotTimer, COL_ACCENT, &lblShotSub); - g_bbtBar = zielBalken(cellShot); // Brew-by-Time: verstrichen/Ziel + cellShot = infoCell(ir, "SHOT", &sym_stoppuhr, &lblShotTimer, COL_ACCENT, + &lblShotSub, &g_bbtBar); // Balken: verstrichen/Ziel - cellBezug = infoCell(ir, "WAAGE", &sym_waage, &lblBezug, COL_ACCENT, &lblBezugSub); + cellBezug = infoCell(ir, "WAAGE", &sym_waage, &lblBezug, COL_ACCENT, + &lblBezugSub, &g_bbwBar); // Balken: Gewicht/Ziel lv_obj_add_flag(cellBezug, LV_OBJ_FLAG_CLICKABLE); // antippbar -> Brew-Control lv_obj_add_event_cb(cellBezug, brew_cell_cb, LV_EVENT_CLICKED, nullptr); - g_bbwBar = zielBalken(cellBezug); // Brew-by-Weight: Gewicht/Ziel // Die Flusskachel steht dauerhaft, auch wenn gerade nichts laeuft. Frueher erschien sie // erst mit dem Bezug - dabei ruecken alle anderen Kacheln zur Seite, und genau in dem @@ -1856,12 +1856,13 @@ static void build_dashboard(lv_obj_t* p) { lv_obj_add_flag(cellFlow, LV_OBJ_FLAG_CLICKABLE); // antippbar -> Brew-Control lv_obj_add_event_cb(cellFlow, brew_cell_cb, LV_EVENT_CLICKED, nullptr); - cellSteam = infoCell(ir, "DAMPF", &sym_dampf, &lblSteamTimer, lv_color_hex(0x80cbc4), &lblSteamSub); - g_sbtBar = zielBalken(cellSteam); // Steam-by-Time: verstrichen/Ziel + cellSteam = infoCell(ir, "DAMPF", &sym_dampf, &lblSteamTimer, lv_color_hex(0x80cbc4), + &lblSteamSub, &g_sbtBar); // Balken: verstrichen/Ziel - cellEco = infoCell(ir, "ECO", &sym_blatt, &lblEco, COL_OK, &lblEcoSub, &lblEcoTitle, &icoEco); + cellEco = infoCell(ir, "ECO", &sym_blatt, &lblEco, COL_OK, + &lblEcoSub, nullptr, &lblEcoTitle, &icoEco); cellCase = infoCell(ir, "TASSENABLAGE", &sym_tasse, &lblCase, lv_color_hex(0xffb74d), - &lblCaseSub, &lblCaseTitle, &icoCase); + &lblCaseSub, nullptr, &lblCaseTitle, &icoCase); // Beide zeigen sich, sobald es etwas zu zeigen gibt - unabhaengig voneinander. lv_obj_add_flag(cellEco, LV_OBJ_FLAG_HIDDEN); // erst zeigen, wenn die S3 Eco-Info meldet @@ -4323,7 +4324,9 @@ void ui_init(ProtocolClient* client) { lv_obj_add_event_cb(g_drawer, scrim_cb, LV_EVENT_CLICKED, nullptr); lv_obj_t* menu = lv_obj_create(g_drawer); - lv_obj_set_size(menu, 340, LV_PCT(100)); + // Breit genug, dass auch die langen Beschriftungen samt Nebenwert in eine Zeile passen + // ("Reinigung/Wartung" mit "fällig", "Cold Extraction"). + lv_obj_set_size(menu, 400, LV_PCT(100)); lv_obj_set_pos(menu, 0, 0); lv_obj_set_style_bg_color(menu, COL_CARD2, 0); lv_obj_set_style_border_width(menu, 0, 0); -- 2.54.0