From 60b356ea25dca1b103eec7a59ace90a710db31fe Mon Sep 17 00:00:00 2001 From: Björn Stenberg Date: Thu, 27 Jun 2002 01:08:11 +0000 Subject: Abstracted settings user interface into set_bool, set_int and set_option. Removed the unnecessary menu entry ids. Made playlist_shuffle and scroll_speed proper global settings. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1220 a1c6a512-1295-4272-9138-f99709370657 --- apps/games_menu.c | 6 +- apps/main_menu.c | 13 ++-- apps/menu.h | 1 - apps/screensavers_menu.c | 6 +- apps/settings.c | 129 +++++++++++++++++++++++++++++++++ apps/settings.h | 12 ++++ apps/settings_menu.c | 180 +++++------------------------------------------ apps/sound_menu.c | 72 ++----------------- 8 files changed, 173 insertions(+), 246 deletions(-) (limited to 'apps') diff --git a/apps/games_menu.c b/apps/games_menu.c index 34405825cd..1d30fbbcce 100644 --- a/apps/games_menu.c +++ b/apps/games_menu.c @@ -31,15 +31,13 @@ #include "sokoban.h" extern void tetris(void); -enum { Tetris, Sokoban, numgames }; - void games_menu(void) { int m; struct menu_items items[] = { - { Tetris, "Tetris", tetris }, - { Sokoban, "Sokoban", sokoban }, + { "Tetris", tetris }, + { "Sokoban", sokoban }, }; m=menu_init( items, sizeof items / sizeof(struct menu_items) ); diff --git a/apps/main_menu.c b/apps/main_menu.c index 9665ce8896..5fdb66a420 100644 --- a/apps/main_menu.c +++ b/apps/main_menu.c @@ -125,19 +125,16 @@ void show_credits(void) void main_menu(void) { int m; - enum { - Games, Screensavers, Version, Gen_Settings, Sound_Settings, - }; /* main menu */ struct menu_items items[] = { - { Sound_Settings, "Sound Settings", sound_menu }, - { Gen_Settings, "General Settings", settings_menu }, + { "Sound Settings", sound_menu }, + { "General Settings", settings_menu }, #ifdef HAVE_LCD_BITMAP - { Games, "Games", games_menu }, - { Screensavers, "Screensavers", screensavers_menu }, + { "Games", games_menu }, + { "Screensavers", screensavers_menu }, #endif - { Version, "Version", show_credits }, + { "Version", show_credits }, }; m=menu_init( items, sizeof items / sizeof(struct menu_items) ); diff --git a/apps/menu.h b/apps/menu.h index aea81f5e4e..0871e502c8 100644 --- a/apps/menu.h +++ b/apps/menu.h @@ -23,7 +23,6 @@ #include struct menu_items { - int id; char *desc; void (*function) (void); }; diff --git a/apps/screensavers_menu.c b/apps/screensavers_menu.c index 41e5e39fee..76553cf328 100644 --- a/apps/screensavers_menu.c +++ b/apps/screensavers_menu.c @@ -32,15 +32,13 @@ #include "boxes.h" extern void bounce(void); -enum { Boxes, Bounce, numsavers }; - void screensavers_menu(void) { int m; struct menu_items items[] = { - { Boxes, "Boxes", boxes }, - { Bounce, "Bounce", bounce }, + { "Boxes", boxes }, + { "Bounce", bounce }, }; m=menu_init( items, sizeof items / sizeof(struct menu_items) ); diff --git a/apps/settings.c b/apps/settings.c index f6566f41a1..61aaf40b66 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -23,6 +23,8 @@ #include "disk.h" #include "panic.h" #include "debug.h" +#include "button.h" +#include "lcd.h" struct user_settings global_settings; @@ -101,3 +103,130 @@ void display_current_settings( struct user_settings *settings ) settings = settings; #endif } + +void set_bool(char* string, bool* variable ) +{ + bool done = false; + + lcd_clear_display(); + lcd_puts_scroll(0,0,string); + + while ( !done ) { + lcd_puts(0, 1, *variable ? "on " : "off"); + lcd_update(); + + switch ( button_get(true) ) { +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_LEFT: +#else + case BUTTON_STOP: + case BUTTON_MENU: +#endif + done = true; + break; + + default: + *variable = !*variable; + break; + } + } + lcd_stop_scroll(); +} + +void set_int(char* string, + char* unit, + int* variable, + void (*function)(int), + int step, + int min, + int max ) +{ + bool done = false; + + lcd_clear_display(); + lcd_puts_scroll(0,0,string); + + while (!done) { + char str[32]; + snprintf(str,sizeof str,"%d %s ", *variable, unit); + lcd_puts(0,1,str); + lcd_update(); + + switch( button_get(true) ) { +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_UP: +#else + case BUTTON_RIGHT: +#endif + *variable += step; + if(*variable > max ) + *variable = max; + break; + +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_DOWN: +#else + case BUTTON_LEFT: +#endif + *variable -= step; + if(*variable < min ) + *variable = min; + break; + +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_LEFT: +#else + case BUTTON_STOP: + case BUTTON_MENU: +#endif + done = true; + break; + } + if ( function ) + function(*variable); + } + lcd_stop_scroll(); +} + +void set_option(char* string, int* variable, char* options[], int numoptions ) +{ + bool done = false; + + lcd_clear_display(); + lcd_puts_scroll(0,0,string); + + while ( !done ) { + lcd_puts(0, 1, options[*variable]); + lcd_update(); + + switch ( button_get(true) ) { +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_UP: +#else + case BUTTON_RIGHT: +#endif + if ( *variable < (numoptions-1) ) + (*variable)++; + break; + +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_DOWN: +#else + case BUTTON_LEFT: +#endif + if ( *variable > 0 ) + (*variable)--; + break; + +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_LEFT: +#else + case BUTTON_STOP: + case BUTTON_MENU: +#endif + done = true; + break; + } + } + lcd_stop_scroll(); +} diff --git a/apps/settings.h b/apps/settings.h index b4a8fde56e..d3b891c790 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -54,6 +54,8 @@ struct user_settings int loop_playlist; /* do we return to top of playlist at end? */ bool mp3filter; + int scroll_speed; + bool playlist_shuffle; /* while playing screen settings */ int wps_display; @@ -67,6 +69,16 @@ void reload_all_settings( struct user_settings *settings ); void reset_settings( struct user_settings *settings ); void display_current_settings( struct user_settings *settings ); +void set_bool(char* string, bool* variable ); +void set_option(char* string, int* variable, char* options[], int numoptions ); +void set_int(char* string, + char* unit, + int* variable, + void (*function)(int), + int step, + int min, + int max ); + /* global settings */ extern struct user_settings global_settings; diff --git a/apps/settings_menu.c b/apps/settings_menu.c index 00c5dfb77d..a27f4feac1 100644 --- a/apps/settings_menu.c +++ b/apps/settings_menu.c @@ -33,190 +33,44 @@ #include "backlight.h" #include "playlist.h" /* for playlist_shuffle */ -enum { Shuffle, Backlight, Scroll, Wps, numsettings }; - static void shuffle(void) { - bool done = false; - - lcd_clear_display(); - lcd_puts(0,0,"[Shuffle]"); - - while ( !done ) { - lcd_puts(0, 1, playlist_shuffle ? "on " : "off"); - lcd_update(); - - switch ( button_get(true) ) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_LEFT: -#else - case BUTTON_STOP: -#endif - done = true; - break; + set_bool( "[Shuffle]", &global_settings.playlist_shuffle ); +} - default: - playlist_shuffle = !playlist_shuffle; - break; - } - } +static void mp3_filter(void) +{ + set_bool( "[MP3/M3U filter]", &global_settings.mp3filter ); } static void backlight_timer(void) { - bool done = false; - int timer = global_settings.backlight; - char str[16]; - - lcd_clear_display(); - lcd_puts_scroll(0,0,"Backlight"); - - while (!done) { - snprintf(str,sizeof str,"Timeout: %d s ", timer); - lcd_puts(0,1,str); - lcd_update(); - switch( button_get(true) ) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: -#else - case BUTTON_RIGHT: -#endif - timer++; - if(timer > 60) - timer = 60; - break; - -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: -#else - case BUTTON_LEFT: -#endif - timer--; - if ( timer < 0 ) - timer = 0; - break; - -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_LEFT: -#else - case BUTTON_STOP: - case BUTTON_MENU: -#endif - done = true; - global_settings.backlight = timer; - backlight_on(); - break; - } - } + set_int( "[Backlight]", "s", &global_settings.backlight, + backlight_time, 1, 0, 60 ); + backlight_on(); } static void scroll_speed(void) { - bool done=false; - int speed=10; - char str[16]; - - lcd_clear_display(); - lcd_puts_scroll(0,0,"Scroll speed indicator"); - - while (!done) { - snprintf(str,sizeof str,"Speed: %d ",speed); - lcd_puts(0,1,str); - lcd_update(); - lcd_scroll_speed(speed); - switch( button_get(true) ) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: -#else - case BUTTON_RIGHT: -#endif - speed++; - break; - -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: -#else - case BUTTON_LEFT: -#endif - speed--; - if ( speed < 1 ) - speed = 1; - break; - -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_LEFT: -#else - case BUTTON_STOP: - case BUTTON_MENU: -#endif - done = true; - lcd_stop_scroll(); - break; - } - } + set_int("Scroll speed indicator...", "", &global_settings.scroll_speed, + &lcd_scroll_speed, 1, 1, 20 ); } - -void wps_set(void) +static void wps_set(void) { - /* Simple menu for selecting what the display shows during playback */ - - bool done = false; - int itemp = 0; char* names[] = { "Id3 ", "File ", "Parse" }; - - lcd_clear_display(); - lcd_puts(0,0,"[Display]"); - - while (!done) { - lcd_puts(0,1,names[itemp]); - lcd_update(); - - switch ( button_get(true) ) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: -#else - case BUTTON_LEFT: -#endif - itemp--; - if (itemp <= 0) - itemp = 0; - break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: -#else - case BUTTON_RIGHT: -#endif - itemp++; - if (itemp >= 2) - itemp = 2; - break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_LEFT: -#else - case BUTTON_STOP: - case BUTTON_MENU: -#endif - done = true; - break; - default: - itemp = 0; - break; - } - } - - - global_settings.wps_display = itemp; //savedsettings[itemp]; + set_option("[WPS display]", &global_settings.wps_display, names, 3 ); } void settings_menu(void) { int m; struct menu_items items[] = { - { Shuffle, "Shuffle", shuffle }, - { Backlight, "Backlight Timer", backlight_timer }, - { Scroll, "Scroll speed", scroll_speed }, - { Wps, "While Playing", wps_set }, + { "Shuffle", shuffle }, + { "MP3/M3U filter", mp3_filter }, + { "Backlight Timer", backlight_timer }, + { "Scroll speed", scroll_speed }, + { "While Playing", wps_set }, }; m=menu_init( items, sizeof items / sizeof(struct menu_items) ); diff --git a/apps/sound_menu.c b/apps/sound_menu.c index 21b98ab7ef..183c3439a3 100644 --- a/apps/sound_menu.c +++ b/apps/sound_menu.c @@ -19,92 +19,32 @@ #include "config.h" #include #include -#include "lcd.h" #include "menu.h" -#include "sound_menu.h" #include "mpeg.h" -#include "button.h" -#include "kernel.h" -#include "sprintf.h" #include "settings.h" -typedef void (*settingfunc)(int); -enum { Volume, Bass, Treble, numsettings }; - -static const char* names[] = { "Volume", "Bass", "Treble" }; -static settingfunc funcs[] = { mpeg_volume, mpeg_bass, mpeg_treble }; - -static void soundsetting(int setting, int *value) -{ - char buf[32]; - bool done = false; - - lcd_clear_display(); - snprintf(buf,sizeof buf,"[%s]",names[setting]); - lcd_puts(0,0,buf); - - while ( !done ) { - snprintf(buf,sizeof buf,"%d %% ", *value); - lcd_puts(0,1,buf); - lcd_update(); - - switch ( button_get(true) ) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: -#else - case BUTTON_RIGHT: -#endif - *value += 2; - if ( *value >= 100 ) - *value = 100; - (funcs[setting])(*value); - break; - -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: -#else - case BUTTON_LEFT: -#endif - *value -= 2; - if ( *value <= 0 ) - *value = 0; - (funcs[setting])(*value); - break; - -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_LEFT: -#else - case BUTTON_STOP: - case BUTTON_MENU: -#endif - done = true; - break; - } - } -} - static void volume(void) { - soundsetting(Volume, &global_settings.volume); + set_int("Volume","%", &global_settings.volume, mpeg_volume, 2, 0, 100); } static void bass(void) { - soundsetting(Bass, &global_settings.bass); + set_int("Bass","%", &global_settings.bass, mpeg_bass, 2, 0, 100); }; static void treble(void) { - soundsetting(Treble, &global_settings.treble); + set_int("Treble","%", &global_settings.treble, mpeg_treble, 2, 0, 100); } void sound_menu(void) { int m; struct menu_items items[] = { - { Volume, "Volume", volume }, - { Bass, "Bass", bass }, - { Treble, "Treble", treble } + { "Volume", volume }, + { "Bass", bass }, + { "Treble", treble } }; m=menu_init( items, sizeof items / sizeof(struct menu_items) ); -- cgit v1.2.3