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
+1 -1
View File
@@ -17,7 +17,7 @@ SOURCES := source
INCLUDES := source INCLUDES := source
# Bei jedem Release erhöhen - das Auto-Update vergleicht diese Nummer # Bei jedem Release erhöhen - das Auto-Update vergleicht diese Nummer
VERSION := 3.1.7 VERSION := 3.1.8
APP_TITLE := MBMNET APP_TITLE := MBMNET
APP_DESCRIPTION := Dein eigenes 3DS-Netzwerk APP_DESCRIPTION := Dein eigenes 3DS-Netzwerk
+23 -11
View File
@@ -340,7 +340,10 @@ bool logview_finish(void)
// --- Eingaben -------------------------------------------------------------------------- // --- 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 < 0) sel = sourceCount;
if (sel > sourceCount) sel = 0; if (sel > sourceCount) sel = 0;
@@ -349,7 +352,8 @@ static void select_source(int sel)
if (srcSel < srcTop) srcTop = srcSel; if (srcSel < srcTop) srcTop = srcSel;
if (srcSel >= srcTop + SRC_ROWS) srcTop = srcSel - SRC_ROWS + 1; if (srcSel >= srcTop + SRC_ROWS) srcTop = srcSel - SRC_ROWS + 1;
following = true; following = true;
start_job(JOB_RELOAD); if (now) { srcPendingAt = 0; start_job(JOB_RELOAD); }
else srcPendingAt = osGetTime();
} }
static bool ask_password(void) 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_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_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_Y || (down & KEY_TOUCH && in(btnReload, tp))) { following = true; start_job(JOB_RELOAD); }
if (down & KEY_R) select_source(srcSel + 1); if (down & KEY_R) select_source(srcSel + 1, true);
if (down & KEY_L) select_source(srcSel - 1); 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) { if (down & KEY_TOUCH && tp.py >= 24 && tp.py < 24 + SRC_ROWS * SRC_ROW_H) {
int row = srcTop + (tp.py - 24) / 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); LightLock_Lock(&lock);
int count = lineCount; int count = lineCount;
// Schiebepad (oben): Zeilen auf dem oberen Bildschirm, links/rechts seitenweise
bool moved = false;
if (!detail) { if (!detail) {
if (repeat & (KEY_UP | KEY_CPAD_UP)) { if (repeat & KEY_CPAD_UP) {
moved = true;
if (cursor > 0) cursor--; if (cursor > 0) cursor--;
else if (count && state == LV_READY) start_job(JOB_OLDER); // ganz oben: ältere nachladen 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_CPAD_DOWN) { cursor++; moved = true; }
if (repeat & KEY_LEFT) cursor -= ROWS; if (repeat & KEY_CPAD_LEFT) { cursor -= ROWS; moved = true; }
if (repeat & KEY_RIGHT) cursor += ROWS; 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 >= count) cursor = count - 1;
if (cursor < 0) cursor = 0; if (cursor < 0) cursor = 0;
following = count == 0 || cursor == count - 1; 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, BOT_W, SCR_H, COL_BG);
C2D_DrawRectSolid(0, 0, 0.5f, BOT_W, 22, COL_BG2); C2D_DrawRectSolid(0, 0, 0.5f, BOT_W, 22, COL_BG2);
ui_text("Quellen", 6, 3, 0.45f, COL_WHITE, 0); 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]; char line[96];
LightLock_Lock(&lock); LightLock_Lock(&lock);
for (int r = 0; r < SRC_ROWS && srcTop + r <= sourceCount; r++) { for (int r = 0; r < SRC_ROWS && srcTop + r <= sourceCount; r++) {
+1
View File
@@ -638,6 +638,7 @@ int main(int argc, char **argv)
C3D_RenderTarget *top = C2D_CreateScreenTarget(GFX_TOP, GFX_LEFT); C3D_RenderTarget *top = C2D_CreateScreenTarget(GFX_TOP, GFX_LEFT);
C3D_RenderTarget *bot = C2D_CreateScreenTarget(GFX_BOTTOM, GFX_LEFT); C3D_RenderTarget *bot = C2D_CreateScreenTarget(GFX_BOTTOM, GFX_LEFT);
textBuf = C2D_TextBufNew(8192); // Logs brauchen mehr Platz textBuf = C2D_TextBufNew(8192); // Logs brauchen mehr Platz
hidSetRepeatParameters(18, 4); // gedrückt halten: nach 0,3 s alle 4 Bilder ein Schritt (Logs blättern)
measureBuf = C2D_TextBufNew(1024); measureBuf = C2D_TextBufNew(1024);
nnid_init(); nnid_init();
frdswitch_init(); frdswitch_init();