summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY18
-rw-r--r--MANUAL29
-rw-r--r--PLUGINS.html5
-rw-r--r--i18n.c130
-rw-r--r--keys.c72
-rw-r--r--keys.h23
-rw-r--r--menu.c48
-rw-r--r--menu.h3
-rw-r--r--vdr.c182
9 files changed, 389 insertions, 121 deletions
diff --git a/HISTORY b/HISTORY
index 9e511fc1..81792ecd 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1611,7 +1611,7 @@ Video Disk Recorder Revision History
shall be executed from the "Recordings" menu; see MANUAL and 'man vdr(5)' for
details (suggested by Gerhard Steiner).
-2002-10-26: Version 1.1.14
+2002-10-27: Version 1.1.14
- Fixed some faulty default parameter initializations (thanks to Robert Schiele).
- Added further satellites to 'sources.conf' (thanks to Reinhard Walter Buchner
@@ -1647,3 +1647,19 @@ Video Disk Recorder Revision History
- Now the name of the remote control is displayed when learning the keys.
- Fixed learning remote control keys in case there is more than one remote
control (thanks to Oliver Endriss for reporting this one).
+- Implemented additional dedicated keys for "Play", "Pause", "Stop", "Record",
+ "FastFwd", "FastRew", "Channel+" and "Channel-". If your remote control supports
+ any of these keys you can delete your 'remote.conf' file and restart VDR to
+ go through the key learning procedure again in order to assign these new keys.
+ See MANUAL for more information.
+ Authors of player plugins should update their ProcessKey() functions so that
+ the new player keys have the same functionality as the "Up", "Down", "Left",
+ "Right" and "Blue" keys, respectively. Note that the existing functionality
+ of these keys should by all means be retained, since VDR (and any plugins)
+ shall be fully usable with just the basic set of keys. These new keys are only
+ for additional comfort in case the remote control in use supports them.
+- Implemented new keys to directly access the VDR main menu functions "Schedule",
+ "Channels", "Timers", "Recordings", "Setup" and "Commands". If your remote
+ control provides keys you want to assign these functions to, you can delete
+ your 'remote.cof' file and restart VDR to go through the key learning procedure
+ again in order to assign these new keys. See MANUAL for more information.
diff --git a/MANUAL b/MANUAL
index 79e80d03..d46e52cf 100644
--- a/MANUAL
+++ b/MANUAL
@@ -23,10 +23,31 @@ Video Disk Recorder User's Manual
Blue - Stop/Resume Mark On/Off(1) - Summary Stop
0..9 Ch select - - - Numeric inp. Exec cmd(2) Editing
- Power Shutdown
- Volume+ Volume up
- Volume- Volume down
- Mute Mute
+ If your remote control provides additional keys, they can be used for the
+ following functions:
+
+ Play resume normal replay
+ Pause pause replay
+ Stop stop replay
+ Record instant recording
+ FastFwd fast forward
+ FastRew fast rewind
+
+ Channel+ channel up
+ Channel- channel down
+
+ Power shutdown
+
+ Volume+ volume up
+ Volume- volume down
+ Mute mute
+
+ Schedule \
+ Channels |
+ Timers | directly access the VDR
+ Recordings | main menu functions
+ Setup |
+ Commands /
(1) The "On/Off" button in the "Timers" menu only works if sorting the timers
has been enabled in the "Setup" menu. Otherwise the Blue button is used
diff --git a/PLUGINS.html b/PLUGINS.html
index 786d8c50..e71d8b5a 100644
--- a/PLUGINS.html
+++ b/PLUGINS.html
@@ -1064,11 +1064,12 @@ consider here are
<i>Play</i>, <i>Pause</i>, <i>Fast Rewind</i> and <i>Fast Forward</i>, respectively
(provided that this particular player can implement these functions) if the player
is not currently showing any menu. If there is a menu, they shall allow the user
- to navigate in the menu.
+ to navigate in the menu. The dedicated <i>Play</i>, <i>Pause</i>, <i>FastRew</i>
+ and <i>FastFwd</i> keys shall always result in their specific functionality.
<li>The <i>Green</i> and <i>Yellow</i> buttons shall skip back- and forward by an
amount of time suitable for this player (provided that this particular player can
implement these functions).
-<li>The <i>Blue</i> button shall immediately stop the replay session.
+<li>The <i>Blue</i> and <i>Stop</i> button shall immediately stop the replay session.
</ul>
Of course, these are only suggestions which should make it easier for VDR users to
enjoy additional players, since they will be able to control them with actions
diff --git a/i18n.c b/i18n.c
index 53369be9..08b27650 100644
--- a/i18n.c
+++ b/i18n.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: i18n.c 1.98 2002/10/26 12:04:20 kls Exp $
+ * $Id: i18n.c 1.99 2002/10/27 14:24:00 kls Exp $
*
* Translations provided by:
*
@@ -2786,6 +2786,102 @@ const tI18nPhrase Phrases[] = {
"Albastru",
"Kék",
},
+ { "Play",
+ "Wiedergabe",
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ },
+ { "Pause",
+ "Pause",
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ },
+ { "Stop",
+ "Stop",
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ },
+ { "Record",
+ "Aufnehmen",
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ },
+ { "FastFwd",
+ "Vorlauf",
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ },
+ { "FastRew",
+ "Rücklauf",
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ },
{ "Power",
"Ausschalten",
"Izklop",
@@ -2802,6 +2898,38 @@ const tI18nPhrase Phrases[] = {
"Pornit",
"Kikapcsolni",
},
+ { "Channel+",
+ "Kanal+",
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ },
+ { "Channel-",
+ "Kanal-",
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ },
{ "Volume+",
"Lautstärke+",
"Glasnost+",
diff --git a/keys.c b/keys.c
index 0d91d673..d3f323e0 100644
--- a/keys.c
+++ b/keys.c
@@ -4,40 +4,54 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: keys.c 1.1 2002/09/29 09:56:51 kls Exp $
+ * $Id: keys.c 1.2 2002/10/27 14:00:49 kls Exp $
*/
#include "keys.h"
static tKey keyTable[] = { // "Up" and "Down" must be the first two keys!
- { kUp, "Up" },
- { kDown, "Down" },
- { kMenu, "Menu" },
- { kOk, "Ok" },
- { kBack, "Back" },
- { kLeft, "Left" },
- { kRight, "Right" },
- { kRed, "Red" },
- { kGreen, "Green" },
- { kYellow, "Yellow" },
- { kBlue, "Blue" },
- { k0, "0" },
- { k1, "1" },
- { k2, "2" },
- { k3, "3" },
- { k4, "4" },
- { k5, "5" },
- { k6, "6" },
- { k7, "7" },
- { k8, "8" },
- { k9, "9" },
- { kPower, "Power" },
- { kVolUp, "Volume+" },
- { kVolDn, "Volume-" },
- { kMute, "Mute" },
- { kNone, "" },
- { k_Setup, "_Setup" },
- { kNone, NULL },
+ { kUp, "Up" },
+ { kDown, "Down" },
+ { kMenu, "Menu" },
+ { kOk, "Ok" },
+ { kBack, "Back" },
+ { kLeft, "Left" },
+ { kRight, "Right" },
+ { kRed, "Red" },
+ { kGreen, "Green" },
+ { kYellow, "Yellow" },
+ { kBlue, "Blue" },
+ { k0, "0" },
+ { k1, "1" },
+ { k2, "2" },
+ { k3, "3" },
+ { k4, "4" },
+ { k5, "5" },
+ { k6, "6" },
+ { k7, "7" },
+ { k8, "8" },
+ { k9, "9" },
+ { kPlay, "Play" },
+ { kPause, "Pause" },
+ { kStop, "Stop" },
+ { kRecord, "Record" },
+ { kFastFwd, "FastFwd" },
+ { kFastRew, "FastRew" },
+ { kPower, "Power" },
+ { kChanUp, "Channel+" },
+ { kChanDn, "Channel-" },
+ { kVolUp, "Volume+" },
+ { kVolDn, "Volume-" },
+ { kMute, "Mute" },
+ { kSchedule, "Schedule" },
+ { kChannels, "Channels" },
+ { kTimers, "Timers" },
+ { kRecordings, "Recordings" },
+ { kSetup, "Setup" },
+ { kCommands, "Commands" },
+ { kNone, "" },
+ { k_Setup, "_Setup" },
+ { kNone, NULL },
};
// -- cKey -------------------------------------------------------------------
diff --git a/keys.h b/keys.h
index d5ecbbc4..606772f0 100644
--- a/keys.h
+++ b/keys.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: keys.h 1.1 2002/09/29 09:55:52 kls Exp $
+ * $Id: keys.h 1.2 2002/10/27 13:58:55 kls Exp $
*/
#ifndef __KEYS_H
@@ -26,10 +26,24 @@ enum eKeys { // "Up" and "Down" must be the first two keys!
kYellow,
kBlue,
k0, k1, k2, k3, k4, k5, k6, k7, k8, k9,
+ kPlay,
+ kPause,
+ kStop,
+ kRecord,
+ kFastFwd,
+ kFastRew,
kPower,
+ kChanUp,
+ kChanDn,
kVolUp,
kVolDn,
kMute,
+ kSchedule,
+ kChannels,
+ kTimers,
+ kRecordings,
+ kSetup,
+ kCommands,
kNone,
k_Setup,
// The following flags are OR'd with the above codes:
@@ -47,9 +61,10 @@ enum eKeys { // "Up" and "Down" must be the first two keys!
#define kEditCut k2
#define kEditTest k8
-#define RAWKEY(k) (eKeys((k) & ~k_Flags))
-#define ISRAWKEY(k) ((k) != kNone && ((k) & k_Flags) == 0)
-#define NORMALKEY(k) (eKeys((k) & ~k_Repeat))
+#define RAWKEY(k) (eKeys((k) & ~k_Flags))
+#define ISRAWKEY(k) ((k) != kNone && ((k) & k_Flags) == 0)
+#define NORMALKEY(k) (eKeys((k) & ~k_Repeat))
+#define ISMODELESSKEY(k) (RAWKEY(k) > k9)
struct tKey {
eKeys type;
diff --git a/menu.c b/menu.c
index c936fc92..0bd24be8 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.220 2002/10/20 14:22:09 kls Exp $
+ * $Id: menu.c 1.221 2002/10/27 14:06:02 kls Exp $
*/
#include "menu.h"
@@ -1226,6 +1226,7 @@ eOSState cMenuWhatsOn::ProcessKey(eKeys Key)
if (state == osUnknown) {
switch (Key) {
+ case kRecord:
case kRed: return Record();
case kYellow: state = osBack;
// continue with kGreen
@@ -1369,6 +1370,7 @@ eOSState cMenuSchedule::ProcessKey(eKeys Key)
if (state == osUnknown) {
switch (Key) {
+ case kRecord:
case kRed: return Record();
case kGreen: if (schedules) {
if (!now && !next) {
@@ -2162,7 +2164,12 @@ cMenuMain::cMenuMain(bool Replaying, eOSState State)
// Initial submenus:
switch (State) {
+ case osSchedule: AddSubMenu(new cMenuSchedule); break;
+ case osChannels: AddSubMenu(new cMenuChannels); break;
+ case osTimers: AddSubMenu(new cMenuTimers); break;
case osRecordings: AddSubMenu(new cMenuRecordings(NULL, 0, true)); break;
+ case osSetup: AddSubMenu(new cMenuSetup); break;
+ case osCommands: AddSubMenu(new cMenuCommands(tr("Commands"), &Commands)); break;
default: break;
}
}
@@ -2289,6 +2296,7 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
}
break;
default: switch (Key) {
+ case kRecord:
case kRed: if (!HasSubMenu())
state = osRecord;
break;
@@ -2351,6 +2359,7 @@ cDisplayChannel::cDisplayChannel(eKeys FirstKey)
:cOsdObject(true)
{
group = -1;
+ lines = 0;
number = 0;
lastTime = time_ms();
int EpgLines = Setup.ShowInfoOnChSwitch ? 5 : 1;
@@ -2443,6 +2452,14 @@ void cDisplayChannel::DisplayInfo(void)
}
}
+void cDisplayChannel::Refresh(void)
+{
+ Interface->Clear();
+ DisplayChannel(Channels.GetByNumber(cDevice::CurrentChannel()));
+ lastTime = time_ms();
+ lines = 0;
+}
+
eOSState cDisplayChannel::ProcessKey(eKeys Key)
{
switch (Key) {
@@ -2490,6 +2507,18 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key)
}
lastTime = time_ms();
break;
+ case kUp|k_Repeat:
+ case kUp:
+ case kDown|k_Repeat:
+ case kDown:
+ cDevice::SwitchChannel(NORMALKEY(Key) == kUp ? 1 : -1);
+ // no break here
+ case kChanUp|k_Repeat:
+ case kChanUp:
+ case kChanDn|k_Repeat:
+ case kChanDn:
+ Refresh();
+ break;
case kNone:
if (number && time_ms() - lastTime > DIRECTCHANNELTIMEOUT) {
if (Channels.GetByNumber(number))
@@ -2509,7 +2538,7 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key)
case kOk: if (group >= 0)
Channels.SwitchTo(Channels.Get(Channels.GetNextNormal(group))->Number());
return osEnd;
- default: if (NORMALKEY(Key) == kUp || NORMALKEY(Key) == kDown || (Key & (k_Repeat | k_Release)) == 0) {
+ default: if ((Key & (k_Repeat | k_Release)) == 0) {
cRemote::Put(Key);
return osEnd;
}
@@ -3080,19 +3109,23 @@ void cReplayControl::TimeSearchProcess(eKeys Key)
TimeSearchDisplay();
}
break;
+ case kFastRew:
case kLeft:
+ case kFastFwd:
case kRight: {
- int dir = (Key == kRight ? 1 : -1);
+ int dir = ((Key == kRight || Key == kFastFwd) ? 1 : -1);
if (dir > 0)
Seconds = min(Total - Current - STAY_SECONDS_OFF_END, Seconds);
SkipSeconds(Seconds * dir);
timeSearchActive = false;
}
break;
+ case kPlay:
case kUp:
+ case kPause:
case kDown:
Seconds = min(Total - STAY_SECONDS_OFF_END, Seconds);
- Goto(Seconds * FRAMESPERSEC, Key == kDown);
+ Goto(Seconds * FRAMESPERSEC, Key == kDown || Key == kPause);
timeSearchActive = false;
break;
default:
@@ -3237,19 +3270,26 @@ eOSState cReplayControl::ProcessKey(eKeys Key)
bool DoShowMode = true;
switch (Key) {
// Positioning:
+ case kPlay:
case kUp: Play(); break;
+ case kPause:
case kDown: Pause(); break;
+ case kFastRew|k_Release:
case kLeft|k_Release:
if (Setup.MultiSpeedMode) break;
+ case kFastRew:
case kLeft: Backward(); break;
+ case kFastFwd|k_Release:
case kRight|k_Release:
if (Setup.MultiSpeedMode) break;
+ case kFastFwd:
case kRight: Forward(); break;
case kRed: TimeSearch(); break;
case kGreen|k_Repeat:
case kGreen: SkipSeconds(-60); break;
case kYellow|k_Repeat:
case kYellow: SkipSeconds( 60); break;
+ case kStop:
case kBlue: Hide();
Stop();
return osEnd;
diff --git a/menu.h b/menu.h
index ba3c3d55..be70e53a 100644
--- a/menu.h
+++ b/menu.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.h 1.48 2002/10/13 10:34:09 kls Exp $
+ * $Id: menu.h 1.49 2002/10/27 12:04:49 kls Exp $
*/
#ifndef __MENU_H
@@ -35,6 +35,7 @@ private:
int number;
void DisplayChannel(const cChannel *Channel);
void DisplayInfo(void);
+ void Refresh(void);
public:
cDisplayChannel(int Number, bool Switched);
cDisplayChannel(eKeys FirstKey);
diff --git a/vdr.c b/vdr.c
index b44d74fb..ae83fd32 100644
--- a/vdr.c
+++ b/vdr.c
@@ -22,7 +22,7 @@
*
* The project's page is at http://www.cadsoft.de/people/kls/vdr
*
- * $Id: vdr.c 1.128 2002/10/20 12:09:45 kls Exp $
+ * $Id: vdr.c 1.129 2002/10/27 14:32:06 kls Exp $
*/
#include <getopt.h>
@@ -456,6 +456,25 @@ int main(int argc, char *argv[])
Menu = new cMenuMain(cControl::Control());
Temp = NULL;
break;
+ #define DirectMainFunction(function)\
+ DELETENULL(Menu);\
+ if (cControl::Control())\
+ cControl::Control()->Hide();\
+ Menu = new cMenuMain(cControl::Control(), function);\
+ Temp = NULL;
+ case kSchedule: DirectMainFunction(osSchedule); break;
+ case kChannels: DirectMainFunction(osChannels); break;
+ case kTimers: DirectMainFunction(osTimers); break;
+ case kRecordings: DirectMainFunction(osRecordings); break;
+ case kSetup: DirectMainFunction(osSetup); break;
+ case kCommands: DirectMainFunction(osCommands); break;
+ // Channel up/down:
+ case kChanUp|k_Repeat:
+ case kChanUp:
+ case kChanDn|k_Repeat:
+ case kChanDn:
+ cDevice::SwitchChannel(NORMALKEY(key) == kChanUp ? 1 : -1);
+ break;
// Volume Control:
case kVolUp|k_Repeat:
case kVolUp:
@@ -487,81 +506,94 @@ int main(int argc, char *argv[])
}
LastActivity = 1; // not 0, see below!
break;
- default:
- if (Interact) {
- switch (Interact->ProcessKey(key)) {
- case osRecord: DELETENULL(Menu);
- Temp = NULL;
- if (!cRecordControls::Start())
- Interface->Error(tr("No free DVB device to record!"));
- break;
- case osRecordings:
- DELETENULL(Menu);
- cControl::Shutdown();
- Temp = NULL;
- Menu = new cMenuMain(false, osRecordings);
- break;
- case osReplay: DELETENULL(Menu);
- cControl::Shutdown();
- Temp = NULL;
- cControl::Launch(new cReplayControl);
- break;
- case osStopReplay:
- DELETENULL(Menu);
- cControl::Shutdown();
- Temp = NULL;
- break;
- case osSwitchDvb:
- DELETENULL(Menu);
- cControl::Shutdown();
- Temp = NULL;
- Interface->Info(tr("Switching primary DVB..."));
- cDevice::SetPrimaryDevice(Setup.PrimaryDVB);
- break;
- case osBack:
- case osEnd: if (Interact == Menu)
- DELETENULL(Menu);
- else
- cControl::Shutdown();
- Temp = NULL;
- break;
- default: ;
- }
- }
- else {
- // Key functions in "normal" viewing mode:
- switch (key) {
- // Toggle channels:
- case k0: {
- int CurrentChannel = cDevice::CurrentChannel();
- Channels.SwitchTo(PreviousChannel);
- PreviousChannel = CurrentChannel;
- break;
- }
- // Direct Channel Select:
- case k1 ... k9:
- Menu = new cDisplayChannel(key);
- break;
- // Left/Right rotates trough channel groups:
- case kLeft|k_Repeat:
- case kLeft:
- case kRight|k_Repeat:
- case kRight:
- Menu = new cDisplayChannel(NORMALKEY(key));
- break;
- // Up/Down Channel Select:
- case kUp|k_Repeat:
- case kUp:
- case kDown|k_Repeat:
- case kDown:
- cDevice::SwitchChannel(NORMALKEY(key) == kUp ? 1 : -1);
- break;
- // Viewing Control:
- case kOk: LastChannel = -1; break; // forces channel display
- default: break;
- }
- }
+ default: break;
}
+ Interact = Menu ? Menu : cControl::Control(); // might have been closed in the mean time
+ if (Interact) {
+ eOSState state = Interact->ProcessKey(key);
+ if (state == osUnknown && ISMODELESSKEY(key) && cControl::Control() && Interact != cControl::Control())
+ state = cControl::Control()->ProcessKey(key);
+ switch (state) {
+ case osRecord: DELETENULL(Menu);
+ Temp = NULL;
+ if (cRecordControls::Start())
+ Interface->Info(tr("Recording"));
+ else
+ Interface->Error(tr("No free DVB device to record!"));
+ break;
+ case osRecordings:
+ DELETENULL(Menu);
+ cControl::Shutdown();
+ Temp = NULL;
+ Menu = new cMenuMain(false, osRecordings);
+ break;
+ case osReplay: DELETENULL(Menu);
+ cControl::Shutdown();
+ Temp = NULL;
+ cControl::Launch(new cReplayControl);
+ break;
+ case osStopReplay:
+ DELETENULL(Menu);
+ cControl::Shutdown();
+ Temp = NULL;
+ break;
+ case osSwitchDvb:
+ DELETENULL(Menu);
+ cControl::Shutdown();
+ Temp = NULL;
+ Interface->Info(tr("Switching primary DVB..."));
+ cDevice::SetPrimaryDevice(Setup.PrimaryDVB);
+ break;
+ case osBack:
+ case osEnd: if (Interact == Menu)
+ DELETENULL(Menu);
+ else
+ cControl::Shutdown();
+ Temp = NULL;
+ break;
+ default: ;
+ }
+ }
+ else {
+ // Key functions in "normal" viewing mode:
+ switch (key) {
+ // Toggle channels:
+ case k0: {
+ int CurrentChannel = cDevice::CurrentChannel();
+ Channels.SwitchTo(PreviousChannel);
+ PreviousChannel = CurrentChannel;
+ break;
+ }
+ // Direct Channel Select:
+ case k1 ... k9:
+ Menu = new cDisplayChannel(key);
+ break;
+ // Left/Right rotates trough channel groups:
+ case kLeft|k_Repeat:
+ case kLeft:
+ case kRight|k_Repeat:
+ case kRight:
+ Menu = new cDisplayChannel(NORMALKEY(key));
+ break;
+ // Up/Down Channel Select:
+ case kUp|k_Repeat:
+ case kUp:
+ case kDown|k_Repeat:
+ case kDown:
+ cDevice::SwitchChannel(NORMALKEY(key) == kUp ? 1 : -1);
+ break;
+ // Viewing Control:
+ case kOk: LastChannel = -1; break; // forces channel display
+ // Instant recording:
+ case kRecord:
+ if (cRecordControls::Start())
+ Interface->Info(tr("Recording"));
+ else
+ Interface->Error(tr("No free DVB device to record!"));
+ break;
+ default: break;
+ }
+ }
if (!Menu) {
EITScanner.Process();
if (!cCutter::Active() && cCutter::Ended()) {