feat(P4): Brew-Control zweispaltig auf dem 7-Zoll-Panel (1.7.0) #56

Merged
thomas merged 1 commits from feat/brew-control-zweispaltig into main 2026-09-02 17:26:07 +02:00
2 changed files with 65 additions and 0 deletions
+12
View File
@@ -1,3 +1,15 @@
Version 1.7.0:
- Brew-Control ist auf dem 7-Zoll-Panel zweispaltig: Pre-Infusion und Brew-by-Weight oben,
Brew-by-Time und Dampf-Timer darunter, der Speichern-Knopf frei unter allen Karten.
Damit passt die Seite vollstaendig auf den Bildschirm und muss nicht mehr gescrollt
werden - der teuerste Vorgang der Oberflaeche entfaellt dort ersatzlos.
- Die Anordnung folgt der Bedeutung: links steht, was den Bezug startet, rechts, was ihn
beendet.
- Der Speichern-Knopf sitzt bewusst nicht in einer der Karten. Er speichert die ganze Seite
und wuerde in einer einzelnen Karte so wirken, als gaelte er nur fuer diese.
- Die JC-Panels bleiben einspaltig - dort ist der Platz knapp, nicht ueppig.
- Cold Extraction und Reinigung/Wartung folgen als naechstes.
Version 1.6.27: Version 1.6.27:
- Beim Waveshare-Panel rollen scrollbare Listen nach dem Loslassen nicht mehr aus, sondern - Beim Waveshare-Panel rollen scrollbare Listen nach dem Loslassen nicht mehr aus, sondern
folgen nur dem Finger. Ohne Doppelpufferung entsteht beim Scrollen jedes Bild komplett folgen nur dem Finger. Ohne Doppelpufferung entsteht beim Scrollen jedes Bild komplett
+53
View File
@@ -459,6 +459,43 @@ static void add_save_button(lv_obj_t* parent, const char* txt, lv_event_cb_t cb)
// //
// Nur fuer das Waveshare-Panel: Die JC-Panels haben das Tempoproblem nicht, ihr // Nur fuer das Waveshare-Panel: Die JC-Panels haben das Tempoproblem nicht, ihr
// Bediengefuehl soll unveraendert bleiben. // Bediengefuehl soll unveraendert bleiben.
// ------------------------------------------------------------------------------------
// Mehrspaltige Seiten fuer das grosse Panel
//
// Die Seiten sind als einspaltige Stapel entstanden - entworfen fuer 800x480, wo eine
// Spalte alles ist, was hineinpasst. Auf 1280x720 bleibt daneben rund 40 % der Flaeche
// leer, waehrend unten Karten aus dem Bild fallen und gescrollt werden muss. Und Scrollen
// ist auf diesem Panel teuer: Ohne Doppelpufferung entsteht dabei jedes Bild komplett neu.
//
// Deshalb hier ein Raster statt eines Stapels. Passt eine Seite vollstaendig auf den
// Bildschirm, entfaellt der teuerste Vorgang der Oberflaeche ersatzlos.
//
// Die JC-Panels bleiben einspaltig: Dort ist der Platz knapp, nicht ueppig.
// ------------------------------------------------------------------------------------
#if JC_PANEL_TYPE == WS_PANEL_7H
static const int32_t PAGE_COLS_2[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
// Zwei Kartenreihen, darunter eine Reihe fuer den Speichern-Knopf.
static const int32_t PAGE_ROWS_2C[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT,
LV_GRID_TEMPLATE_LAST };
static void page_grid(lv_obj_t* p, const int32_t* cols, const int32_t* rows) {
lv_obj_set_layout(p, LV_LAYOUT_GRID);
lv_obj_set_grid_dsc_array(p, cols, rows);
lv_obj_set_style_pad_column(p, 12, 0);
lv_obj_set_style_pad_row(p, 12, 0);
}
// Karte in eine Rasterzelle setzen. Die Breite kommt ab jetzt aus der Spalte, deshalb muss
// die Prozentbreite aus group_card() zurueckgenommen werden - sie bezoege sich sonst auf
// die ganze Seite statt auf die Zelle.
static void grid_at(lv_obj_t* c, uint8_t col, uint8_t row, uint8_t col_span = 1) {
lv_obj_set_width(c, LV_SIZE_CONTENT);
lv_obj_set_grid_cell(c, LV_GRID_ALIGN_STRETCH, col, col_span,
LV_GRID_ALIGN_START, row, 1);
}
#endif
static void scroll_ohne_nachlauf(lv_obj_t* o) { static void scroll_ohne_nachlauf(lv_obj_t* o) {
#if JC_PANEL_TYPE == WS_PANEL_7H #if JC_PANEL_TYPE == WS_PANEL_7H
lv_obj_clear_flag(o, LV_OBJ_FLAG_SCROLL_MOMENTUM); lv_obj_clear_flag(o, LV_OBJ_FLAG_SCROLL_MOMENTUM);
@@ -2102,7 +2139,23 @@ static void build_brew(lv_obj_t* p) {
swSBT = add_switch(cSBT, "Aktiv"); swSBT = add_switch(cSBT, "Aktiv");
taSbtSecs = add_num(cSBT, "Zielzeit (s)"); taSbtSecs = add_num(cSBT, "Zielzeit (s)");
#if JC_PANEL_TYPE == WS_PANEL_7H
// Zwei Spalten: links, was den Bezug startet, rechts, was ihn beendet.
page_grid(p, PAGE_COLS_2, PAGE_ROWS_2C);
grid_at(cPI, 0, 0);
grid_at(cBBW, 1, 0);
grid_at(cBBT, 0, 1);
grid_at(cSBT, 1, 1);
// Speichern frei unter den Karten, nicht in einer davon: Der Knopf speichert die ganze
// Seite und wuerde in einer einzelnen Karte so wirken, als gaelte er nur fuer diese.
lv_obj_t* sb = th_accent_button(p, "Brühen speichern");
lv_obj_add_event_cb(sb, send_save_brew, LV_EVENT_CLICKED, nullptr);
lv_obj_set_width(sb, LV_SIZE_CONTENT);
lv_obj_set_grid_cell(sb, LV_GRID_ALIGN_END, 0, 2, LV_GRID_ALIGN_START, 2, 1);
#else
add_save_button(p, "Brühen speichern", send_save_brew); add_save_button(p, "Brühen speichern", send_save_brew);
#endif
} }
// ===================================================================================== // =====================================================================================