v3.1.9: Logs - Live-Knopf (und Y) springt ans Ende und läuft wieder mit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Nico Meister
2026-10-26 21:52:59 +01:00
co-authored by Claude Opus 5.5
parent 9ac6167953
commit 2f4a2ff8f8
2 changed files with 19 additions and 6 deletions
+18 -5
View File
@@ -376,7 +376,9 @@ static bool ask_password(void)
}
typedef struct { float x, y, w, h; } Rect;
static const Rect btnFilter = { 8, 204, 100, 30 }, btnReload = { 112, 204, 96, 30 }, btnBack = { 212, 204, 100, 30 };
// Knopfleiste unten: Live | Nur Fehler | Neu laden | Zurück
static const Rect btnLive = { 6, 204, 74, 30 }, btnFilter = { 84, 204, 76, 30 }, btnReload = { 164, 204, 74, 30 },
btnBack = { 242, 204, 72, 30 };
static bool in(Rect r, touchPosition tp) { return tp.px >= r.x && tp.px < r.x + r.w && tp.py >= r.y && tp.py < r.y + r.h; }
bool logview_update(u32 down, u32 repeat, u32 held)
@@ -394,7 +396,9 @@ bool logview_update(u32 down, u32 repeat, u32 held)
}
if (down & KEY_A) detail = !detail && lineCount > 0;
if (down & KEY_X || (down & KEY_TOUCH && in(btnFilter, tp))) { errorsOnly = !errorsOnly; following = true; start_job(JOB_RELOAD); }
if (down & KEY_Y || (down & KEY_TOUCH && in(btnReload, tp))) { following = true; start_job(JOB_RELOAD); }
// Live: ans Ende springen, neu laden und wieder mitlaufen (alle 5 Sekunden neu)
if (down & KEY_Y || (down & KEY_TOUCH && in(btnLive, tp))) { following = true; detail = false; start_job(JOB_RELOAD); }
if (down & KEY_TOUCH && in(btnReload, tp)) start_job(JOB_RELOAD);
if (down & KEY_R) select_source(srcSel + 1, true);
if (down & KEY_L) select_source(srcSel - 1, true);
// Steuerkreuz (unten): Quellen auf dem unteren Bildschirm
@@ -490,7 +494,15 @@ void logview_draw_top(void)
static void button(Rect r, const char *label, bool on)
{
ui_round_rect(r.x, r.y, r.w, r.h, 10, on ? COL_RED : COL_CARD);
ui_text(label, r.x + r.w / 2, r.y + 8, 0.42f, COL_WHITE, C2D_AlignCenter);
ui_text(label, r.x + r.w / 2, r.y + 8, 0.4f, COL_WHITE, C2D_AlignCenter);
}
static void live_button(void)
{
Rect r = btnLive;
ui_round_rect(r.x, r.y, r.w, r.h, 10, following ? C2D_Color32(0x15, 0x80, 0x3D, 0xFF) : COL_CARD);
C2D_DrawCircleSolid(r.x + 14, r.y + r.h / 2, 0.5f, 4, following ? COL_WHITE : COL_MUTED);
ui_text("Live", r.x + r.w / 2 + 6, r.y + 8, 0.4f, following ? COL_WHITE : COL_MUTED, C2D_AlignCenter);
}
void logview_draw_bottom(void)
@@ -498,7 +510,7 @@ void logview_draw_bottom(void)
C2D_DrawRectSolid(0, 0, 0, BOT_W, SCR_H, COL_BG);
C2D_DrawRectSolid(0, 0, 0.5f, BOT_W, 22, COL_BG2);
ui_text("Quellen", 6, 3, 0.45f, COL_WHITE, 0);
ui_text("Steuerkreuz/L/R wechseln · A Details", BOT_W - 6, 5, 0.34f, COL_MUTED, C2D_AlignRight);
ui_text("Steuerkreuz/L/R wechseln · Y Live · A Details", BOT_W - 6, 5, 0.32f, COL_MUTED, C2D_AlignRight);
char line[96];
LightLock_Lock(&lock);
for (int r = 0; r < SRC_ROWS && srcTop + r <= sourceCount; r++) {
@@ -523,7 +535,8 @@ void logview_draw_bottom(void)
}
}
LightLock_Unlock(&lock);
button(btnFilter, errorsOnly ? "Alle Stufen" : "Nur Fehler", errorsOnly);
live_button();
button(btnFilter, errorsOnly ? "Alle" : "Nur Fehler", errorsOnly);
button(btnReload, "Neu laden", false);
button(btnBack, detail ? "Schließen" : "Zurück", false);
}