From 2f4a2ff8f8ac7f5ea0bc18a8369e8820165083b1 Mon Sep 17 00:00:00 2001 From: Nico Meister Date: Mon, 26 Oct 2026 21:52:59 +0100 Subject: [PATCH] =?UTF-8?q?v3.1.9:=20Logs=20-=20Live-Knopf=20(und=20Y)=20s?= =?UTF-8?q?pringt=20ans=20Ende=20und=20l=C3=A4uft=20wieder=20mit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- Makefile | 2 +- source/logview.c | 23 ++++++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 23c6c37..480ef2d 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ SOURCES := source INCLUDES := source # Bei jedem Release erhöhen - das Auto-Update vergleicht diese Nummer -VERSION := 3.1.8 +VERSION := 3.1.9 APP_TITLE := MBMNET APP_DESCRIPTION := Dein eigenes 3DS-Netzwerk diff --git a/source/logview.c b/source/logview.c index 42602e4..e7c6129 100644 --- a/source/logview.c +++ b/source/logview.c @@ -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); }