fix(P4): Kachelwerte auf gleicher Höhe, Menü breiter (1.13.1) #93

Merged
thomas merged 1 commits from fix/p4-kachelhoehen-und-menuebreite into main 2026-09-13 01:26:20 +02:00
3 changed files with 32 additions and 20 deletions

No files matched your search

+9
View File
@@ -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
+1 -1
View File
@@ -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
+22 -19
View File
@@ -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);