diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 0fbfb989..46093009 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -341,6 +341,8 @@ Andy Grobb for reporting a bug in handling min/max borders when entering integer values for reporting a problem with replaying in fast forward mode if the video directory is mounted via a Samba share + for suggesting to make menu items that are derived from cMenuEditIntItem loop + though their values if they have a dedicated minimum or maximum limit Thomas Heiligenmann for implementing the SVDRP commands LSTR and DELR diff --git a/HISTORY b/HISTORY index b78b9176..d3a24907 100644 --- a/HISTORY +++ b/HISTORY @@ -4830,3 +4830,7 @@ Video Disk Recorder Revision History require detatching receivers (suggested by Anssi Hannula). - Fixed handling numeric keys in the channel display after switching channel groups (thanks to Andreas Regel). +- Menu items derived from cMenuEditIntItem now loop though their values if they + have a dedicated minimum or maximum limit (suggested by Andy Grobb). Looping is + only done for normal keypresses, not for repeated ones. This allows the user to + scroll the value all the way to the limit by keeping the key pressed. diff --git a/menuitems.c b/menuitems.c index 517664c7..cbfcf053 100644 --- a/menuitems.c +++ b/menuitems.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menuitems.c 1.45 2006/06/03 13:20:01 kls Exp $ + * $Id: menuitems.c 1.46 2006/07/23 09:42:17 kls Exp $ */ #include "menuitems.h" @@ -75,6 +75,7 @@ eOSState cMenuEditIntItem::ProcessKey(eKeys Key) if (state == osUnknown) { int newValue = *value; + bool IsRepeat = Key & k_Repeat; Key = NORMALKEY(Key); switch (Key) { case kNone: break; @@ -88,10 +89,14 @@ eOSState cMenuEditIntItem::ProcessKey(eKeys Key) case kLeft: // TODO might want to increase the delta if repeated quickly? newValue = *value - 1; fresh = true; + if (!IsRepeat && newValue < min && max != INT_MAX) + newValue = max; break; case kRight: newValue = *value + 1; fresh = true; + if (!IsRepeat && newValue > max && min != INT_MIN) + newValue = min; break; default: if (*value < min) { *value = min; Set(); }