Fixed 'Switch' in the now/next menu

This commit is contained in:
Klaus Schmidinger 2000-11-26 16:18:52 +01:00
parent ad8610d5d0
commit 79a353c8b9
2 changed files with 22 additions and 3 deletions

View File

@ -317,4 +317,5 @@ Video Disk Recorder Revision History
- The EPG data is now dumped into the file /video/epg.data every ten minutes. - The EPG data is now dumped into the file /video/epg.data every ten minutes.
Use the Perl script 'epg2html.pl' to convert the raw EPG data into a simple Use the Perl script 'epg2html.pl' to convert the raw EPG data into a simple
HTML programme listing. HTML programme listing.
- Fixed handling of channel switching with the "Blue" button in the "What's on
now/next?" menus.

22
menu.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: menu.c 1.52 2000/11/18 16:30:13 kls Exp $ * $Id: menu.c 1.53 2000/11/26 16:15:30 kls Exp $
*/ */
#include "menu.h" #include "menu.h"
@ -1310,7 +1310,9 @@ private:
cThreadLock threadLock; cThreadLock threadLock;
const cSchedules *schedules; const cSchedules *schedules;
bool now, next; bool now, next;
int otherChannel;
eOSState Record(void); eOSState Record(void);
eOSState Switch(void);
void PrepareSchedule(cChannel *Channel); void PrepareSchedule(cChannel *Channel);
void PrepareWhatsOnNext(bool On); void PrepareWhatsOnNext(bool On);
public: public:
@ -1322,6 +1324,7 @@ cMenuSchedule::cMenuSchedule(void)
:cOsdMenu("", 6, 6) :cOsdMenu("", 6, 6)
{ {
now = next = false; now = next = false;
otherChannel = 0;
cChannel *channel = Channels.GetByNumber(cDvbApi::CurrentChannel()); cChannel *channel = Channels.GetByNumber(cDvbApi::CurrentChannel());
if (channel) { if (channel) {
schedules = cDvbApi::PrimaryDvbApi->Schedules(&threadLock); schedules = cDvbApi::PrimaryDvbApi->Schedules(&threadLock);
@ -1383,6 +1386,16 @@ eOSState cMenuSchedule::Record(void)
return osContinue; return osContinue;
} }
eOSState cMenuSchedule::Switch(void)
{
if (otherChannel) {
if (Channels.SwitchTo(otherChannel))
return osEnd;
}
Interface->Error(tr("Can't switch channel!"));
return osContinue;
}
eOSState cMenuSchedule::ProcessKey(eKeys Key) eOSState cMenuSchedule::ProcessKey(eKeys Key)
{ {
eOSState state = cOsdMenu::ProcessKey(Key); eOSState state = cOsdMenu::ProcessKey(Key);
@ -1398,8 +1411,9 @@ eOSState cMenuSchedule::ProcessKey(eKeys Key)
next = !next; next = !next;
return AddSubMenu(new cMenuWhatsOn(schedules, now)); return AddSubMenu(new cMenuWhatsOn(schedules, now));
case kYellow: return AddSubMenu(new cMenuWhatsOn(schedules, false)); case kYellow: return AddSubMenu(new cMenuWhatsOn(schedules, false));
case kBlue: return Switch();
case kOk: if (Count()) case kOk: if (Count())
return AddSubMenu(new cMenuEvent(((cMenuScheduleItem *)Get(Current()))->eventInfo)); return AddSubMenu(new cMenuEvent(((cMenuScheduleItem *)Get(Current()))->eventInfo, otherChannel));
break; break;
default: break; default: break;
} }
@ -1411,6 +1425,10 @@ eOSState cMenuSchedule::ProcessKey(eKeys Key)
cChannel *channel = Channels.GetByServiceID(ei->GetServiceID()); cChannel *channel = Channels.GetByServiceID(ei->GetServiceID());
if (channel) { if (channel) {
PrepareSchedule(channel); PrepareSchedule(channel);
if (channel->number != cDvbApi::CurrentChannel()) {
otherChannel = channel->number;
SetHelp(tr("Record"), tr("Now"), tr("Next"), tr("Switch"));
}
Display(); Display();
} }
} }