1
+ // @fixme: excessive va()
2
+
1
3
#include "res/scr/question_mark"
2
4
3
5
zxdb ZXDB2 ;
@@ -539,6 +541,8 @@ int game_browser_keyboard(const int ENTRIES, const int numgames) { // returns cl
539
541
int home = window_pressed (app , TK_HOME ) || (window_pressed (app , TK_UP ) && tigrKeyHeld (app , TK_CONTROL ));
540
542
int end = window_pressed (app , TK_END ) || (window_pressed (app , TK_DOWN ) && tigrKeyHeld (app , TK_CONTROL ));
541
543
544
+ scroll += tigrMouseWheel (app );
545
+
542
546
scroll = CLAMP (scroll , 0 , numgames - 1 );
543
547
selected = CLAMP (selected , 0 , numgames - 1 );
544
548
@@ -583,25 +587,34 @@ char* game_browser_v1() {
583
587
return games [chosen ];
584
588
}
585
589
590
+ static char * buffer = 0 ; if (!buffer ) { buffer = malloc (65536 ); /*rescan();*/ }
586
591
587
592
int clicked = 0 ;
588
593
589
- static char * buffer = 0 ; if (!buffer ) { buffer = malloc (65536 ); /*rescan();*/ }
590
-
591
594
int y = 0 ;
592
595
for ( int j = 0 ; j < ENTRIES ; ++ j ) {
593
596
int i = scroll + j ;
594
597
if ( i < 0 ) continue ;
595
598
if ( i >= numgames ) continue ;
596
599
597
600
const char * sep = strrchr (games [i ], * DIR_SEP_ );
598
- int is_dir = sep [1 ] == '\0' ;
601
+ int is_dir = sep [1 ] == '\0' , is_file = ! is_dir ;
599
602
if ( is_dir ) while (0 [-- sep ] != '/' );
600
603
601
- int color =
602
- (dbgames [i ] & 0x7F ) == 0 ? '\x7' : // untested
603
- (dbgames [i ] & 0x7F ) == 1 ? '\x4' : // good
604
- (dbgames [i ] & 0x7F ) == 2 ? '\x2' : '\x6' ; // fail:warn
604
+ int flagged = 0 ;
605
+ int starred = 0 ;
606
+ if ( i == selected ) {
607
+ if ( window_pressed (app , TK_SHIFT ) && window_trigger (app , TK_SPACE ) ) flagged = 1 ;
608
+ if (!window_pressed (app , TK_SHIFT ) && window_trigger (app , TK_SPACE ) ) starred = 1 ;
609
+ }
610
+
611
+ int stars = (dbgames [i ] >> 8 );
612
+ int flags = (dbgames [i ] & 0x7F );
613
+ int color =
614
+ flags == 0 ? '\x7' : // untested
615
+ flags == 1 ? '\x2' : // fail
616
+ flags == 2 ? '\x6' : // warn
617
+ '\x4' ; // good
605
618
606
619
const char * title = sep + 1 ;
607
620
@@ -611,50 +624,34 @@ char* game_browser_v1() {
611
624
if ( strmatchi (title , wildcard ) ) ui_alpha = 255 ;
612
625
}
613
626
614
- const char starred = dbgames [i ] >> 8 ? (char )(dbgames [i ] >> 8 ) : ' ' ;
615
- sprintf (buffer , "%c%c %3d.%s " ,
616
- color , starred ,
617
- i + 1 , i == selected ? ">" :" " );
627
+ ui_at (ui , 1 * 11 + 3 , (2 + y ++ ) * 11 + 2 );
618
628
619
- ui_at ( ui , 1 * 11 , ( 2 + y ++ ) * 11 );
629
+ sprintf ( buffer , "%3d.%s" , i + 1 , i == selected ? ">" : " " );
620
630
ui_label (buffer );
621
631
622
- sprintf (buffer , "%s%.*s\n" ,
623
- is_dir ? "\6" FOLDER_STR "\7\f" : "" , (int )(strlen (title ) - is_dir ), title );
632
+ if ( is_file && ui_click ("-Toggle bookmark-" , va ("%c\f" , "\x10\x12" [!!stars ])) )
633
+ starred = 1 ;
634
+
635
+ if ( is_file && ui_click ("-Toggle compatibility flags-\n\2fail\7, \6warn\7, \4good" , va ("%c%s" , color , flags == 0 || flags == 3 ? "✓" :"╳" )) ) // "":""
636
+ flagged = 1 ;
637
+
638
+ sprintf (buffer , "%s%c%.*s\n" ,
639
+ is_dir ? "\6" FOLDER_STR "\f" : " " , color , (int )(strlen (title ) - is_dir ), title );
624
640
625
641
if ( ui_click (NULL , buffer ) ) selected = i , clicked = 1 ;
642
+
643
+ if ( is_file )
644
+ if ( starred || flagged ) {
645
+ if ( flagged ) flags = (flags + 1 ) % 4 ;
646
+ if ( starred ) stars = stars != 'B' ? 'B' : 0 ;
647
+ db_set (games [i ], dbgames [i ] = flags + (stars << 8 ));
648
+ }
626
649
}
627
650
628
651
// issue browser
629
652
// if( window_trigger(app, TK_LEFT) ) { for(--up; (selected+up) >= 0 && (dbgames[selected+up]&0xFF) <= 1; --up ) ; }
630
653
// if( window_trigger(app, TK_RIGHT) ) { for(++up; (selected+up) < numgames && (dbgames[selected+up]&0xFF) <= 1; ++up ) ; }
631
654
632
- if ( window_pressed (app , TK_CONTROL ) || window_trigger (app , TK_SPACE ) ) {
633
- int update = 0 ;
634
- int starred = dbgames [selected ] >> 8 ;
635
- int color = dbgames [selected ] & 0xFF ;
636
- if ( window_trigger (app , TK_SPACE ) ) color = (color + 1 ) % 4 , update = 1 ;
637
- if ( window_trigger (app , 'D' ) ) starred = starred != 'D' ? 'D' : 0 , update = 1 ; // disk error
638
- if ( window_trigger (app , 'T' ) ) starred = starred != 'T' ? 'T' : 0 , update = 1 ; // tape error
639
- if ( window_trigger (app , 'I' ) ) starred = starred != 'I' ? 'I' : 0 , update = 1 ; // i/o ports error
640
- if ( window_trigger (app , 'R' ) ) starred = starred != 'R' ? 'R' : 0 , update = 1 ; // rom/bios error
641
- if ( window_trigger (app , 'E' ) ) starred = starred != 'E' ? 'E' : 0 , update = 1 ; // emulation error
642
- if ( window_trigger (app , 'Z' ) ) starred = starred != 'Z' ? 'Z' : 0 , update = 1 ; // zip error
643
- if ( window_trigger (app , 'S' ) ) starred = starred != 'S' ? 'S' : 0 , update = 1 ; // star
644
- if ( window_trigger (app , '3' ) ) starred = starred != '3' ? '3' : 0 , update = 1 ; // +3 only error
645
- if ( window_trigger (app , '4' ) ) starred = starred != '4' ? '4' : 0 , update = 1 ; // 48K only error
646
- if ( window_trigger (app , '1' ) ) starred = starred != '1' ? '1' : 0 , update = 1 ; // 128K only error
647
- if ( window_trigger (app , '0' ) ) starred = starred != '0' ? '0' : 0 , update = 1 ; // USR0 only error
648
- if ( window_trigger (app , 'A' ) ) starred = starred != 'A' ? 'A' : 0 , update = 1 ; // ay/audio error
649
- if ( window_trigger (app , 'V' ) ) starred = starred != 'V' ? 'V' : 0 , update = 1 ; // video/vram error
650
- if ( window_trigger (app , 'H' ) ) starred = starred != 'H' ? 'H' : 0 , update = 1 ; // hardware error
651
- if ( window_trigger (app , 'M' ) ) starred = starred != 'M' ? 'M' : 0 , update = 1 ; // mem/multiload error
652
- if (update ) {
653
- dbgames [selected ] = color + (starred << 8 );
654
- db_set (games [selected ], dbgames [selected ]);
655
- }
656
- }
657
-
658
655
if ( clicked ) {
659
656
return games [selected ];
660
657
}
@@ -1106,8 +1103,8 @@ char* game_browser_v2() {
1106
1103
1107
1104
if ( !num_options )
1108
1105
if ( selected == i ) {
1109
- if ( tigrKeyHeld (app , TK_CONTROL ) && tigrKeyDown (app , 'B' ) ) starred = 1 ;
1110
- if ( tigrKeyHeld (app , TK_CONTROL ) && tigrKeyDown (app , TK_SPACE ) ) flagged = 1 ;
1106
+ if (! tigrKeyHeld (app , TK_SHIFT ) && tigrKeyDown (app , TK_SPACE ) ) starred = 1 ;
1107
+ if ( tigrKeyHeld (app , TK_SHIFT ) && tigrKeyDown (app , TK_SPACE ) ) flagged = 1 ;
1111
1108
}
1112
1109
1113
1110
if ( flagged || starred ) {
0 commit comments