v3.1.8: Logs - Schiebepad für Zeilen, Steuerkreuz für Quellen, Hochblättern sprang nicht mehr zurück

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Nico Meister
2026-10-26 21:50:41 +01:00
co-authored by Claude Opus 5.5
parent e9a7bfb712
commit 9ac6167953
3 changed files with 25 additions and 12 deletions
+23 -11
View File
@@ -340,7 +340,10 @@ bool logview_finish(void)
// --- Eingaben --------------------------------------------------------------------------
static void select_source(int sel)
static u64 srcPendingAt; // Quelle mit dem Steuerkreuz gewechselt: kurz warten, dann laden (nicht bei jedem Schritt)
// Quelle wählen. now = sofort laden (L/R, Antippen), sonst nach einer kurzen Pause (Steuerkreuz)
static void select_source(int sel, bool now)
{
if (sel < 0) sel = sourceCount;
if (sel > sourceCount) sel = 0;
@@ -349,7 +352,8 @@ static void select_source(int sel)
if (srcSel < srcTop) srcTop = srcSel;
if (srcSel >= srcTop + SRC_ROWS) srcTop = srcSel - SRC_ROWS + 1;
following = true;
start_job(JOB_RELOAD);
if (now) { srcPendingAt = 0; start_job(JOB_RELOAD); }
else srcPendingAt = osGetTime();
}
static bool ask_password(void)
@@ -391,25 +395,33 @@ 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); }
if (down & KEY_R) select_source(srcSel + 1);
if (down & KEY_L) select_source(srcSel - 1);
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
if (repeat & KEY_DDOWN) select_source(srcSel + 1, false);
if (repeat & KEY_DUP) select_source(srcSel - 1, false);
if (srcPendingAt && osGetTime() - srcPendingAt > 400 && !busy && job == JOB_NONE) { srcPendingAt = 0; start_job(JOB_RELOAD); }
if (down & KEY_TOUCH && tp.py >= 24 && tp.py < 24 + SRC_ROWS * SRC_ROW_H) {
int row = srcTop + (tp.py - 24) / SRC_ROW_H;
if (row <= sourceCount) select_source(row);
if (row <= sourceCount) select_source(row, true);
}
LightLock_Lock(&lock);
int count = lineCount;
// Schiebepad (oben): Zeilen auf dem oberen Bildschirm, links/rechts seitenweise
bool moved = false;
if (!detail) {
if (repeat & (KEY_UP | KEY_CPAD_UP)) {
if (repeat & KEY_CPAD_UP) {
moved = true;
if (cursor > 0) cursor--;
else if (count && state == LV_READY) start_job(JOB_OLDER); // ganz oben: ältere nachladen
}
if (repeat & (KEY_DOWN | KEY_CPAD_DOWN)) cursor++;
if (repeat & KEY_LEFT) cursor -= ROWS;
if (repeat & KEY_RIGHT) cursor += ROWS;
if (repeat & KEY_CPAD_DOWN) { cursor++; moved = true; }
if (repeat & KEY_CPAD_LEFT) { cursor -= ROWS; moved = true; }
if (repeat & KEY_CPAD_RIGHT) { cursor += ROWS; moved = true; }
}
if (following) cursor = count - 1;
// Live mitlaufen nur, solange man nicht selbst blättert (sonst sprang es sofort wieder nach unten)
if (following && !moved) cursor = count - 1;
if (cursor >= count) cursor = count - 1;
if (cursor < 0) cursor = 0;
following = count == 0 || cursor == count - 1;
@@ -486,7 +498,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("L/R wechseln · A Details · X Fehler", BOT_W - 6, 5, 0.34f, COL_MUTED, C2D_AlignRight);
ui_text("Steuerkreuz/L/R wechseln · A Details", BOT_W - 6, 5, 0.34f, COL_MUTED, C2D_AlignRight);
char line[96];
LightLock_Lock(&lock);
for (int r = 0; r < SRC_ROWS && srcTop + r <= sourceCount; r++) {