From 62f3e95945187a744043b5b0c7e393786843c9c8 Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Fri, 27 Mar 2009 13:53:29 +0000 Subject: FS#10014 - Separate tracklocking out of skip length, skip length prevented to skip tracks. This is a seperate setting now. tracks can still change during normal playback (i.e. a song ends). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20553 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/gwps.c | 66 +++++++++++++++++++++++++++------------------- apps/lang/english.lang | 16 ++++++++++- apps/menus/playback_menu.c | 3 ++- apps/settings.h | 1 + apps/settings_list.c | 1 + 5 files changed, 58 insertions(+), 29 deletions(-) (limited to 'apps') diff --git a/apps/gui/gwps.c b/apps/gui/gwps.c index 1882debd26..d211321622 100644 --- a/apps/gui/gwps.c +++ b/apps/gui/gwps.c @@ -79,10 +79,14 @@ static void wps_state_init(void); static void prev_track(unsigned skip_thresh) { - if (!wps_state.id3 || (wps_state.id3->elapsed < skip_thresh*1000)) { + if (!global_settings.prevent_skip + && (wps_state.id3->elapsed < skip_thresh*1000)) + { audio_prev(); + return; } - else { + else + { if (cuesheet_is_enabled() && wps_state.id3->cuesheet_type) { curr_cuesheet_skip(-1, wps_state.id3->elapsed); @@ -107,6 +111,8 @@ static void prev_track(unsigned skip_thresh) static void next_track(void) { + if (global_settings.prevent_skip) + return; /* take care of if we're playing a cuesheet */ if (cuesheet_is_enabled() && wps_state.id3->cuesheet_type) { @@ -125,19 +131,37 @@ static void play_hop(int direction) { unsigned step = ((unsigned)global_settings.skip_length*1000); unsigned long *elapsed = &(wps_state.id3->elapsed); + bool prevent_skip = global_settings.prevent_skip; - if (direction == 1 && wps_state.id3->length - *elapsed < step+1000) { + if (direction == 1 && wps_state.id3->length - *elapsed < step+1000) + { #if CONFIG_CODEC == SWCODEC - if(global_settings.beep) - pcmbuf_beep(1000, 150, 1500*global_settings.beep); + if (prevent_skip) + { + if(global_settings.beep) + pcmbuf_beep(1000, 150, 1500*global_settings.beep); + } + else #endif + next_track(); return; - } else if ((direction == -1 && *elapsed < step)) { - *elapsed = 0; - } else { + } + else if ((direction == -1 && *elapsed < step)) + { + if (!prevent_skip) + { + prev_track(3); + return; + } + else + *elapsed = 0; + } + else + { *elapsed += step * direction; } - if((audio_status() & AUDIO_STATUS_PLAY) && !wps_state.paused) { + if((audio_status() & AUDIO_STATUS_PLAY) && !wps_state.paused) + { #if (CONFIG_CODEC == SWCODEC) audio_pre_ff_rewind(); #else @@ -421,8 +445,7 @@ long gui_wps_show(void) } break; /* fast forward - OR next dir if this is straight after ACTION_WPS_SKIPNEXT - OR if skip length set, next track if straight after SKIPPREV. */ + OR next dir if this is straight after ACTION_WPS_SKIPNEXT */ case ACTION_WPS_SEEKFWD: if (global_settings.party_mode) break; @@ -438,18 +461,12 @@ long gui_wps_show(void) audio_next_dir(); } } - else if (global_settings.skip_length > 0 - && current_tick -last_left < HZ) { - next_track(); - update_track = true; - } - else ffwd_rew(ACTION_WPS_SEEKFWD); + else + ffwd_rew(ACTION_WPS_SEEKFWD); last_right = last_left = 0; break; /* fast rewind - OR prev dir if this is straight after ACTION_WPS_SKIPPREV, - OR if skip length set, beg of track or prev track if this is - straight after SKIPPREV */ + OR prev dir if this is straight after ACTION_WPS_SKIPPREV,*/ case ACTION_WPS_SEEKBACK: if (global_settings.party_mode) break; @@ -471,13 +488,8 @@ long gui_wps_show(void) audio_prev_dir(); } } - else if (global_settings.skip_length > 0 - && current_tick -last_right < HZ) - { - prev_track(3+global_settings.skip_length); - update_track = true; - } - else ffwd_rew(ACTION_WPS_SEEKBACK); + else + ffwd_rew(ACTION_WPS_SEEKBACK); last_left = last_right = 0; break; diff --git a/apps/lang/english.lang b/apps/lang/english.lang index b2f08222ce..6443d16ae9 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -12453,4 +12453,18 @@ *: none touchscreen: "Absolute Point" - \ No newline at end of file + + + id: LANG_PREVENT_SKIPPING + desc: in Settings -> Playback Settings + user: core + + *: "Prevent Skipping" + + + *: "Prevent Skipping" + + + *: "Prevent Skipping" + + diff --git a/apps/menus/playback_menu.c b/apps/menus/playback_menu.c index 5d1421b966..02e29b1840 100644 --- a/apps/menus/playback_menu.c +++ b/apps/menus/playback_menu.c @@ -176,6 +176,7 @@ MAKE_MENU(unplug_menu, ID2P(LANG_HEADPHONE_UNPLUG), 0, Icon_NOICON, #endif MENUITEM_SETTING(skip_length, &global_settings.skip_length, NULL); +MENUITEM_SETTING(prevent_skip, &global_settings.prevent_skip, NULL); MAKE_MENU(playback_settings,ID2P(LANG_PLAYBACK),0, Icon_Playback_menu, @@ -197,7 +198,7 @@ MAKE_MENU(playback_settings,ID2P(LANG_PLAYBACK),0, #ifdef HAVE_HEADPHONE_DETECTION ,&unplug_menu #endif - ,&skip_length + ,&skip_length, &prevent_skip, ); static int playback_callback(int action,const struct menu_item_ex *this_item) diff --git a/apps/settings.h b/apps/settings.h index dfd3998d83..3b13ff8e6b 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -725,6 +725,7 @@ struct user_settings #ifdef HAVE_SPEAKER bool speaker_enabled; #endif + bool prevent_skip; #ifdef HAVE_TOUCHSCREEN int touch_mode; diff --git a/apps/settings_list.c b/apps/settings_list.c index 6255580991..fbdf356def 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -1467,6 +1467,7 @@ const struct settings_list settings[] = { "touchscreen mode", "point,grid", NULL, 2, ID2P(LANG_TOUCHSCREEN_POINT), ID2P(LANG_TOUCHSCREEN_GRID)), #endif + OFFON_SETTING(0, prevent_skip, LANG_PREVENT_SKIPPING, false, "prevent_skip", NULL), }; const int nb_settings = sizeof(settings)/sizeof(*settings); -- cgit v1.2.3