diff options
author | Tobias Grimm <tobias@e-tobi.loc> | 2009-03-01 23:50:11 +0100 |
---|---|---|
committer | Tobias Grimm <tobias@e-tobi.loc> | 2009-03-01 23:50:11 +0100 |
commit | 41f3a108fd60f083b4c1b64dd249c606b55e2720 (patch) | |
tree | 46ea648abeda3bd3ce901012410f3dd4c208cca7 /menuitems.c | |
parent | 1072f8978350e57f7aa35aaa79081e5031a12901 (diff) | |
download | xeatre-vdr-patches-patches/xeatre/1.6/extend-maxvideofilesize.tar.gz xeatre-vdr-patches-patches/xeatre/1.6/extend-maxvideofilesize.tar.bz2 |
initial commit of the extend-maxvideofilesize patchpatches/xeatre/1.6/extend-maxvideofilesize
Diffstat (limited to 'menuitems.c')
-rw-r--r-- | menuitems.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/menuitems.c b/menuitems.c index 4aba66c..5fc4ea9 100644 --- a/menuitems.c +++ b/menuitems.c @@ -112,6 +112,80 @@ eOSState cMenuEditIntItem::ProcessKey(eKeys Key) return state; } +// --- cMenuEditInt64Item ------------------------------------------------------ + +cMenuEditInt64Item::cMenuEditInt64Item(const char *Name, int64_t *Value, int64_t Min, int64_t Max, const char *MinString, const char *MaxString) +:cMenuEditItem(Name) +{ + value = Value; + min = Min; + max = Max; + minString = MinString; + maxString = MaxString; + if (*value < min) + *value = min; + else if (*value > max) + *value = max; + Set(); +} + +void cMenuEditInt64Item::Set(void) +{ + if (minString && *value == min) + SetValue(minString); + else if (maxString && *value == max) + SetValue(maxString); + else { + char buf[32]; + snprintf(buf, sizeof(buf), "%lld", *value); + SetValue(buf); + } +} + +eOSState cMenuEditInt64Item::ProcessKey(eKeys Key) +{ + eOSState state = cMenuEditItem::ProcessKey(Key); + + if (state == osUnknown) { + int64_t newValue = *value; + bool IsRepeat = Key & k_Repeat; + Key = NORMALKEY(Key); + switch (Key) { + case kNone: break; + case k0 ... k9: + if (fresh) { + newValue = 0; + fresh = false; + } + newValue = newValue * 10 + (Key - k0); + break; + case kLeft: // TODO might want to increase the delta if repeated quickly? + newValue = *value - 1; + fresh = true; + if (!IsRepeat && newValue < min && max != 9223372036854775807LL) + newValue = max; + break; + case kRight: + newValue = *value + 1; + fresh = true; + if (!IsRepeat && newValue > max && min != -9223372036854775807LL - 1) + newValue = min; + break; + default: + if (*value < min) { *value = min; Set(); } + if (*value > max) { *value = max; Set(); } + return state; + } + if (newValue != *value && (!fresh || min <= newValue) && newValue <= max) { + *value = newValue; + Set(); + } + state = osContinue; + } + return state; +} + + // --- cMenuEditBoolItem ----------------------------------------------------- cMenuEditBoolItem::cMenuEditBoolItem(const char *Name, int *Value, const char *FalseString, const char *TrueString) |