diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2001-02-03 15:28:49 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2001-02-03 15:28:49 +0100 |
commit | 7f6a2a7a0c001c425efdab381914e7c297f61166 (patch) | |
tree | 044a9b08d0aef5e2aa997a1f8e2a659ef552f82f | |
parent | caa96c00eaecd5f0c67f0575468dd088f2c8ee1e (diff) | |
download | vdr-7f6a2a7a0c001c425efdab381914e7c297f61166.tar.gz vdr-7f6a2a7a0c001c425efdab381914e7c297f61166.tar.bz2 |
Implemented hotkeys for Main and Commands menu
-rw-r--r-- | FORMATS | 10 | ||||
-rw-r--r-- | HISTORY | 4 | ||||
-rw-r--r-- | menu.c | 27 | ||||
-rw-r--r-- | osd.c | 20 | ||||
-rw-r--r-- | osd.h | 5 |
5 files changed, 52 insertions, 14 deletions
@@ -86,9 +86,13 @@ Video Disk Recorder File Formats Examples: - Check for new mail: /usr/local/bin/checkmail 2>&1 - CPU status : /usr/loval/bin/cpustatus 2>&1 - Disk space : df -h | grep '/video' | awk '{ print 100 - $5 "% free"; }' + 1 Check for new mail: /usr/local/bin/checkmail 2>&1 + 2 CPU status : /usr/loval/bin/cpustatus 2>&1 + 3 Disk space : df -h | grep '/video' | awk '{ print 100 - $5 "% free"; }' + + If the first non-blank character of the 'title' is a digit in the range + 1..9, the command can be selected directly by pressing the respective numerical + key on the remote control. * marks.vdr @@ -367,3 +367,7 @@ Video Disk Recorder Revision History - The "Left" and "Right" keys are now used to page up and down in lists (thanks to Martin Hammerschmid). Since the "Timers" menu already uses these keys to (de)activate timers, this functionality is not available here. +- The "Main" and "Commands" menu now support "hotkeys", which means that if the + first non-blank character of a menu item is a digit in the range 1..9, that + item can be selected by pressing the respective numeric key on the remote + control. @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.59 2001/02/03 14:28:42 kls Exp $ + * $Id: menu.c 1.60 2001/02/03 15:28:49 kls Exp $ */ #include "menu.h" @@ -1620,6 +1620,7 @@ cMenuCommands::cMenuCommands(void) Add(new cOsdItem(command->Title())); i++; } + SetHasHotkeys(); } eOSState cMenuCommands::Execute(void) @@ -1650,18 +1651,25 @@ eOSState cMenuCommands::ProcessKey(eKeys Key) #define STOP_RECORDING tr("Stop recording ") +static const char *hk(int n, const char *s) +{ + static char buffer[32]; + snprintf(buffer, sizeof(buffer), " %d %s", n, s); + return buffer; +} + cMenuMain::cMenuMain(bool Replaying) :cOsdMenu(tr("Main")) { - Add(new cOsdItem(tr("Schedule"), osSchedule)); - Add(new cOsdItem(tr("Channels"), osChannels)); - Add(new cOsdItem(tr("Timers"), osTimers)); - Add(new cOsdItem(tr("Recordings"), osRecordings)); - Add(new cOsdItem(tr("Setup"), osSetup)); + Add(new cOsdItem(hk(1, tr("Schedule")), osSchedule)); + Add(new cOsdItem(hk(2, tr("Channels")), osChannels)); + Add(new cOsdItem(hk(3, tr("Timers")), osTimers)); + Add(new cOsdItem(hk(4, tr("Recordings")), osRecordings)); + Add(new cOsdItem(hk(5, tr("Setup")), osSetup)); if (Commands.Count()) - Add(new cOsdItem(tr("Commands"), osCommands)); + Add(new cOsdItem(hk(6, tr("Commands")), osCommands)); if (Replaying) - Add(new cOsdItem(tr("Stop replaying"), osStopReplay)); + Add(new cOsdItem(tr(" Stop replaying"), osStopReplay)); const char *s = NULL; while ((s = cRecordControls::GetInstantId(s)) != NULL) { char *buffer = NULL; @@ -1670,10 +1678,11 @@ cMenuMain::cMenuMain(bool Replaying) delete buffer; } if (cVideoCutter::Active()) - Add(new cOsdItem(tr("Cancel editing"), osCancelEdit)); + Add(new cOsdItem(tr(" Cancel editing"), osCancelEdit)); SetHelp(tr("Record"), NULL, NULL, cReplayControl::LastReplayed() ? tr("Resume") : NULL); Display(); lastActivity = time(NULL); + SetHasHotkeys(); } eOSState cMenuMain::ProcessKey(eKeys Key) @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osd.c 1.14 2001/02/03 14:26:18 kls Exp $ + * $Id: osd.c 1.15 2001/02/03 15:14:45 kls Exp $ */ #include "osd.h" @@ -77,6 +77,7 @@ eOSState cOsdItem::ProcessKey(eKeys Key) cOsdMenu::cOsdMenu(const char *Title, int c0, int c1, int c2, int c3, int c4) { + hasHotkeys = false; visible = false; title = strdup(Title); cols[0] = c0; @@ -290,6 +291,20 @@ void cOsdMenu::Mark(void) } } +eOSState cOsdMenu::HotKey(eKeys Key) +{ + for (cOsdItem *item = First(); item; item = Next(item)) { + const char *s = item->Text(); + if (s && (s = skipspace(s)) != NULL) { + if (*s == Key - k1 + '1') { + current = item->Index(); + return ProcessKey(kOk); + } + } + } + return osContinue; +} + eOSState cOsdMenu::AddSubMenu(cOsdMenu *SubMenu) { delete subMenu; @@ -319,6 +334,9 @@ eOSState cOsdMenu::ProcessKey(eKeys Key) return state; } switch (Key) { + case k1...k9: if (hasHotkeys) + return HotKey(Key); + break; case kUp|k_Repeat: case kUp: CursorUp(); break; case kDown|k_Repeat: @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osd.h 1.19 2001/02/03 14:14:23 kls Exp $ + * $Id: osd.h 1.20 2001/02/03 15:13:59 kls Exp $ */ #ifndef __OSD_H @@ -77,6 +77,7 @@ private: cOsdMenu *subMenu; const char *helpRed, *helpGreen, *helpYellow, *helpBlue; const char *status; + bool hasHotkeys; protected: bool visible; virtual void Clear(void); @@ -88,6 +89,7 @@ protected: void PageUp(void); void PageDown(void); void Mark(void); + eOSState HotKey(eKeys Key); eOSState AddSubMenu(cOsdMenu *SubMenu); bool HasSubMenu(void) { return subMenu; } void SetStatus(const char *s); @@ -97,6 +99,7 @@ protected: public: cOsdMenu(const char *Title, int c0 = 0, int c1 = 0, int c2 = 0, int c3 = 0, int c4 = 0); virtual ~cOsdMenu(); + void SetHasHotkeys(void) { hasHotkeys = true; } int Current(void) { return current; } void Add(cOsdItem *Item, bool Current = false); void Display(void); |