diff options
author | Martin Schirrmacher <vdr.neutrinoepg@schirrmacher.eu> | 2013-04-22 18:13:17 +0200 |
---|---|---|
committer | Martin Schirrmacher <vdr.neutrinoepg@schirrmacher.eu> | 2013-04-22 18:13:17 +0200 |
commit | 3d4dd169f1f34a80976c735a43080f938991a0c7 (patch) | |
tree | 6e7c6beeda617fba8f6fe1191f42c891da9af882 | |
parent | b65b597effe30fc252de5b24620e69a08fe99cbd (diff) | |
download | vdr-plugin-neutrinoepg-3d4dd169f1f34a80976c735a43080f938991a0c7.tar.gz vdr-plugin-neutrinoepg-3d4dd169f1f34a80976c735a43080f938991a0c7.tar.bz2 |
add possibility to switch between schedules with left/right key
-rw-r--r-- | menuevent.c | 65 |
1 files changed, 61 insertions, 4 deletions
diff --git a/menuevent.c b/menuevent.c index cf8a722..38abbea 100644 --- a/menuevent.c +++ b/menuevent.c @@ -183,15 +183,72 @@ eOSState myMenuEvent::ProcessKey(eKeys Key) case kUp: case kDown|k_Repeat: case kDown: - case kLeft|k_Repeat: - case kLeft: - case kRight|k_Repeat: - case kRight: DisplayMenu()->Scroll( NORMALKEY(Key) == kUp || NORMALKEY(Key) == kLeft, NORMALKEY(Key) == kLeft || NORMALKEY(Key) == kRight); cStatus::MsgOsdTextItem(NULL, NORMALKEY(Key) == kUp); return osContinue; + case kLeft: + { + // previous event + cSchedulesLock schedulesLock; + const cSchedules *schedules; + schedules = cSchedules::Schedules(schedulesLock); + const cSchedule *Schedule = schedules->GetSchedule( channel->GetChannelID() ); + + if(Schedule) + { + // do not go before first schedule + if( event == Schedule->Events()->First() ) + break; + + const cEvent *prev = NULL, *e = NULL; + for( e = Schedule->Events()->First(); e; e = Schedule->Events()->Next(e) ) + { + if( e == event ) + break; + prev = e; + } + if( prev != e ) + event = prev; + else + event = NULL; + + Display(); + } + + return osContinue; + } + case kRight: + { + // next event + cSchedulesLock schedulesLock; + const cSchedules *schedules; + schedules = cSchedules::Schedules(schedulesLock); + const cSchedule *Schedule = schedules->GetSchedule( channel->GetChannelID() ); + if(Schedule) + { + const cEvent *next, *e = NULL; + for( e = Schedule->Events()->First(); e; e = Schedule->Events()->Next(e) ) + { + if( e == event ) + break; + } + if( e ) + { + next = Schedule->Events()->Next(e); + if( next ) + event = next; + else + event = NULL; + } + else + event = NULL; + + Display(); + } + return osContinue; + } default: break; } |