summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY3
-rw-r--r--MANUAL7
-rw-r--r--menu.c37
-rw-r--r--osdbase.c5
4 files changed, 46 insertions, 6 deletions
diff --git a/HISTORY b/HISTORY
index 4977d354..da92260d 100644
--- a/HISTORY
+++ b/HISTORY
@@ -4097,3 +4097,6 @@ Video Disk Recorder Revision History
//#define USE_FADVISE
in tools.c.
- Removed unused 'offset' member from cOsdItem.
+- In the "Channels" menu the numeric keys now position the cursor to the channel
+ with the given number (see MANUAL, section "Remote Control Keys", note (3) for
+ details).
diff --git a/MANUAL b/MANUAL
index 92101973..ff706396 100644
--- a/MANUAL
+++ b/MANUAL
@@ -74,7 +74,12 @@ Version 1.2
to "mark" a timer for moving.
(2) See "Processing Recordings" below.
(3) In the "Channels" menu the '0' key switches the sort mode through "by number",
- "by name" and "by provider".
+ "by name" and "by provider". Other numeric input positions the cursor to
+ the channel with the number entered so far. If there is no channel with that
+ number, nothing happens. While entering a channel number, the '0' key will
+ be treated as part of that number, not as a sort mode toggle. If no numeric
+ key has been pressed for more than one second, the number is reset and '0'
+ functions as sort mode toggle again.
(4) In the "Timers" menu, when on the "Day" item, the '0' key toggles between
a single shot and a repeating timer. If "Day" indicates a repeating timer,
the keys '1'...'7' can be used to toggle the individual days ('1' is Monday).
diff --git a/menu.c b/menu.c
index bb3c95e5..5fc1323d 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.c 1.384 2006/01/04 14:42:13 kls Exp $
+ * $Id: menu.c 1.385 2006/01/05 13:26:37 kls Exp $
*/
#include "menu.h"
@@ -381,12 +381,17 @@ void cMenuChannelItem::Set(void)
// --- cMenuChannels ---------------------------------------------------------
+#define CHANNELNUMBERTIMEOUT 1000 //ms
+
class cMenuChannels : public cOsdMenu {
private:
+ int number;
+ cTimeMs numberTimer;
void Setup(void);
cChannel *GetChannel(int Index);
void Propagate(void);
protected:
+ eOSState Number(eKeys Key);
eOSState Switch(void);
eOSState Edit(void);
eOSState New(void);
@@ -401,6 +406,7 @@ public:
cMenuChannels::cMenuChannels(void)
:cOsdMenu(tr("Channels"), CHNUMWIDTH)
{
+ number = 0;
Setup();
Channels.IncBeingEdited();
}
@@ -447,6 +453,30 @@ void cMenuChannels::Propagate(void)
Channels.SetModified(true);
}
+eOSState cMenuChannels::Number(eKeys Key)
+{
+ if (HasSubMenu())
+ return osContinue;
+ if (numberTimer.TimedOut())
+ number = 0;
+ if (!number && Key == k0) {
+ cMenuChannelItem::IncSortMode();
+ Setup();
+ }
+ else {
+ number = number * 10 + Key - k0;
+ for (cMenuChannelItem *ci = (cMenuChannelItem *)First(); ci; ci = (cMenuChannelItem *)ci->Next()) {
+ if (!ci->Channel()->GroupSep() && ci->Channel()->Number() == number) {
+ SetCurrent(ci);
+ Display();
+ break;
+ }
+ }
+ numberTimer.Set(CHANNELNUMBERTIMEOUT);
+ }
+ return osContinue;
+}
+
eOSState cMenuChannels::Switch(void)
{
if (HasSubMenu())
@@ -531,9 +561,8 @@ eOSState cMenuChannels::ProcessKey(eKeys Key)
default:
if (state == osUnknown) {
switch (Key) {
- case k0: cMenuChannelItem::IncSortMode();
- Setup();
- break;
+ case k0 ... k9:
+ return Number(Key);
case kOk: return Switch();
case kRed: return Edit();
case kGreen: return New();
diff --git a/osdbase.c b/osdbase.c
index 81e146a8..ecd124d2 100644
--- a/osdbase.c
+++ b/osdbase.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osdbase.c 1.25 2006/01/05 12:42:00 kls Exp $
+ * $Id: osdbase.c 1.26 2006/01/05 13:26:00 kls Exp $
*/
#include "osdbase.h"
@@ -250,6 +250,8 @@ void cOsdMenu::DisplayCurrent(bool Current)
void cOsdMenu::Clear(void)
{
+ if (marked >= 0)
+ SetStatus(NULL);
first = 0;
current = marked = -1;
cList<cOsdItem>::Clear();
@@ -453,6 +455,7 @@ eOSState cOsdMenu::ProcessKey(eKeys Key)
}
}
switch (Key) {
+ case k0: return osUnknown;
case k1...k9: return hasHotkeys ? HotKey(Key) : osUnknown;
case kUp|k_Repeat:
case kUp: CursorUp(); break;