mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Implemented '0' key function in the "Schedule" menu
This commit is contained in:
parent
1de5335922
commit
197b8c27fa
7
HISTORY
7
HISTORY
@ -4135,7 +4135,7 @@ Video Disk Recorder Revision History
|
||||
Schneider).
|
||||
- Cleaned up some trailing white space.
|
||||
|
||||
2006-01-14: Version 1.3.39
|
||||
2006-01-15: Version 1.3.39
|
||||
|
||||
- The SVDRP command LSTT now accepts the new option 'id' to have the channels
|
||||
of the timers listed with their unique channel ids instead of their numbers
|
||||
@ -4176,3 +4176,8 @@ Video Disk Recorder Revision History
|
||||
(suggested by Andreas Brachold).
|
||||
- The SVDRP command GRAB allows file names without extension again (suggested by
|
||||
Stefan Huelswitt).
|
||||
- Pressing '0' in the "Schedule" menu now rotates through displaying "This event on
|
||||
this channel", "This event on all channels" and "All events on all channels".
|
||||
This can be used to find reruns of a given show, or the episodes of a series.
|
||||
Note that if there are many channels in your channels.conf, displaying the
|
||||
"All events on all channels" page may take a while.
|
||||
|
6
MANUAL
6
MANUAL
@ -177,6 +177,12 @@ Version 1.3
|
||||
whether there is currently a DVB card receiving the transponder this channel
|
||||
is on).
|
||||
|
||||
Pressing '0' in the "Schedule" menu rotates through displaying "This event on
|
||||
this channel", "This event on all channels" and "All events on all channels".
|
||||
This can be used to find reruns of a given show, or the episodes of a series.
|
||||
Note that if there are many channels in your channels.conf, displaying the
|
||||
"All events on all channels" page may take a while.
|
||||
|
||||
* Selecting a Channel
|
||||
|
||||
There are four ways to select a channel:
|
||||
|
65
i18n.c
65
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.234 2006/01/13 16:24:07 kls Exp $
|
||||
* $Id: i18n.c 1.235 2006/01/15 12:22:15 kls Exp $
|
||||
*
|
||||
* Translations provided by:
|
||||
*
|
||||
@ -441,6 +441,69 @@ const tI18nPhrase Phrases[] = {
|
||||
"Programm - %s",
|
||||
"Program - %s",
|
||||
},
|
||||
{ "This event - %s",
|
||||
"Diese Sendung - %s",
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
},
|
||||
{ "This event - all channels",
|
||||
"Diese Sendung - alle Kanäle",
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
},
|
||||
{ "All events - all channels",
|
||||
"Alle Sendungen - alle Kanäle",
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
},
|
||||
{ "What's on now?",
|
||||
"Was läuft jetzt?",
|
||||
"Kaj je na sporedu?",
|
||||
|
144
menu.c
144
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.393 2006/01/14 14:53:43 kls Exp $
|
||||
* $Id: menu.c 1.394 2006/01/15 12:46:07 kls Exp $
|
||||
*/
|
||||
|
||||
#include "menu.h"
|
||||
@ -323,10 +323,10 @@ public:
|
||||
cMenuChannelItem(cChannel *Channel);
|
||||
static void SetSortMode(eChannelSortMode SortMode) { sortMode = SortMode; }
|
||||
static void IncSortMode(void) { sortMode = eChannelSortMode((sortMode == csmProvider) ? csmNumber : sortMode + 1); }
|
||||
static eChannelSortMode SortMode(void) { return sortMode; }
|
||||
virtual int Compare(const cListObject &ListObject) const;
|
||||
virtual void Set(void);
|
||||
cChannel *Channel(void) { return channel; }
|
||||
static eChannelSortMode SortMode(void) { return sortMode; }
|
||||
};
|
||||
|
||||
cMenuChannelItem::eChannelSortMode cMenuChannelItem::sortMode = csmNumber;
|
||||
@ -961,22 +961,45 @@ eOSState cMenuEvent::ProcessKey(eKeys Key)
|
||||
// --- cMenuScheduleItem -----------------------------------------------------
|
||||
|
||||
class cMenuScheduleItem : public cOsdItem {
|
||||
public:
|
||||
enum eScheduleSortMode { ssmAllThis, ssmThisThis, ssmThisAll, ssmAllAll }; // "which event(s) on which channel(s)"
|
||||
private:
|
||||
static eScheduleSortMode sortMode;
|
||||
public:
|
||||
const cEvent *event;
|
||||
const cChannel *channel;
|
||||
bool withDate;
|
||||
int timerMatch;
|
||||
cMenuScheduleItem(const cEvent *Event, cChannel *Channel = NULL);
|
||||
cMenuScheduleItem(const cEvent *Event, cChannel *Channel = NULL, bool WithDate = false);
|
||||
static void SetSortMode(eScheduleSortMode SortMode) { sortMode = SortMode; }
|
||||
static void IncSortMode(void) { sortMode = eScheduleSortMode((sortMode == ssmAllAll) ? ssmAllThis : sortMode + 1); }
|
||||
static eScheduleSortMode SortMode(void) { return sortMode; }
|
||||
virtual int Compare(const cListObject &ListObject) const;
|
||||
bool Update(bool Force = false);
|
||||
};
|
||||
|
||||
cMenuScheduleItem::cMenuScheduleItem(const cEvent *Event, cChannel *Channel)
|
||||
cMenuScheduleItem::eScheduleSortMode cMenuScheduleItem::sortMode = ssmAllThis;
|
||||
|
||||
cMenuScheduleItem::cMenuScheduleItem(const cEvent *Event, cChannel *Channel, bool WithDate)
|
||||
{
|
||||
event = Event;
|
||||
channel = Channel;
|
||||
withDate = WithDate;
|
||||
timerMatch = tmNone;
|
||||
Update(true);
|
||||
}
|
||||
|
||||
int cMenuScheduleItem::Compare(const cListObject &ListObject) const
|
||||
{
|
||||
cMenuScheduleItem *p = (cMenuScheduleItem *)&ListObject;
|
||||
int r = -1;
|
||||
if (sortMode != ssmAllThis)
|
||||
r = strcoll(event->Title(), p->event->Title());
|
||||
if (sortMode == ssmAllThis || r == 0)
|
||||
r = event->StartTime() - p->event->StartTime();
|
||||
return r;
|
||||
}
|
||||
|
||||
static char *TimerMatchChars = " tT";
|
||||
|
||||
bool cMenuScheduleItem::Update(bool Force)
|
||||
@ -989,7 +1012,9 @@ bool cMenuScheduleItem::Update(bool Force)
|
||||
char t = TimerMatchChars[timerMatch];
|
||||
char v = event->Vps() && (event->Vps() - event->StartTime()) ? 'V' : ' ';
|
||||
char r = event->IsRunning() ? '*' : ' ';
|
||||
if (channel)
|
||||
if (channel && withDate)
|
||||
asprintf(&buffer, "%d\t%.*s\t%.*s\t%s\t%c%c%c\t%s", channel->Number(), 6, channel->ShortName(true), 6, *event->GetDateString(), *event->GetTimeString(), t, v, r, event->Title());
|
||||
else if (channel)
|
||||
asprintf(&buffer, "%d\t%.*s\t%s\t%c%c%c\t%s", channel->Number(), 6, channel->ShortName(true), *event->GetTimeString(), t, v, r, event->Title());
|
||||
else
|
||||
asprintf(&buffer, "%.*s\t%s\t%c%c%c\t%s", 6, *event->GetDateString(), *event->GetTimeString(), t, v, r, event->Title());
|
||||
@ -1163,9 +1188,13 @@ private:
|
||||
bool now, next;
|
||||
int otherChannel;
|
||||
int helpKeys;
|
||||
eOSState Number(void);
|
||||
eOSState Record(void);
|
||||
eOSState Switch(void);
|
||||
void PrepareSchedule(cChannel *Channel);
|
||||
void PrepareScheduleAllThis(const cEvent *Event, const cChannel *Channel);
|
||||
void PrepareScheduleThisThis(const cEvent *Event, const cChannel *Channel);
|
||||
void PrepareScheduleThisAll(const cEvent *Event, const cChannel *Channel);
|
||||
void PrepareScheduleAllAll(const cEvent *Event, const cChannel *Channel);
|
||||
bool Update(void);
|
||||
void SetHelpKeys(void);
|
||||
public:
|
||||
@ -1175,16 +1204,17 @@ public:
|
||||
};
|
||||
|
||||
cMenuSchedule::cMenuSchedule(void)
|
||||
:cOsdMenu("", 7, 6, 4)
|
||||
:cOsdMenu("")
|
||||
{
|
||||
now = next = false;
|
||||
otherChannel = 0;
|
||||
helpKeys = -1;
|
||||
cMenuScheduleItem::SetSortMode(cMenuScheduleItem::ssmAllThis);
|
||||
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
|
||||
if (channel) {
|
||||
cMenuWhatsOn::SetCurrentChannel(channel->Number());
|
||||
schedules = cSchedules::Schedules(schedulesLock);
|
||||
PrepareSchedule(channel);
|
||||
PrepareScheduleAllThis(NULL, channel);
|
||||
SetHelpKeys();
|
||||
}
|
||||
}
|
||||
@ -1194,21 +1224,80 @@ cMenuSchedule::~cMenuSchedule()
|
||||
cMenuWhatsOn::ScheduleEvent(); // makes sure any posted data is cleared
|
||||
}
|
||||
|
||||
void cMenuSchedule::PrepareSchedule(cChannel *Channel)
|
||||
void cMenuSchedule::PrepareScheduleAllThis(const cEvent *Event, const cChannel *Channel)
|
||||
{
|
||||
Clear();
|
||||
SetCols(7, 6, 4);
|
||||
char *buffer = NULL;
|
||||
asprintf(&buffer, tr("Schedule - %s"), Channel->Name());
|
||||
SetTitle(buffer);
|
||||
free(buffer);
|
||||
if (schedules) {
|
||||
if (schedules && Channel) {
|
||||
const cSchedule *Schedule = schedules->GetSchedule(Channel);
|
||||
if (Schedule) {
|
||||
const cEvent *PresentEvent = Schedule->GetPresentEvent(Channel->Number() == cDevice::CurrentChannel());
|
||||
const cEvent *PresentEvent = Event ? Event : Schedule->GetPresentEvent(Channel->Number() == cDevice::CurrentChannel());
|
||||
time_t now = time(NULL) - Setup.EPGLinger * 60;
|
||||
for (const cEvent *Event = Schedule->Events()->First(); Event; Event = Schedule->Events()->Next(Event)) {
|
||||
if (Event->EndTime() > now || Event == PresentEvent)
|
||||
Add(new cMenuScheduleItem(Event), Event == PresentEvent);
|
||||
for (const cEvent *ev = Schedule->Events()->First(); ev; ev = Schedule->Events()->Next(ev)) {
|
||||
if (ev->EndTime() > now || ev == PresentEvent)
|
||||
Add(new cMenuScheduleItem(ev), ev == PresentEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cMenuSchedule::PrepareScheduleThisThis(const cEvent *Event, const cChannel *Channel)
|
||||
{
|
||||
Clear();
|
||||
SetCols(7, 6, 4);
|
||||
char *buffer = NULL;
|
||||
asprintf(&buffer, tr("This event - %s"), Channel->Name());
|
||||
SetTitle(buffer);
|
||||
free(buffer);
|
||||
if (schedules && Channel && Event) {
|
||||
const cSchedule *Schedule = schedules->GetSchedule(Channel);
|
||||
if (Schedule) {
|
||||
time_t now = time(NULL) - Setup.EPGLinger * 60;
|
||||
for (const cEvent *ev = Schedule->Events()->First(); ev; ev = Schedule->Events()->Next(ev)) {
|
||||
if ((ev->EndTime() > now || ev == Event) && !strcmp(ev->Title(), Event->Title()))
|
||||
Add(new cMenuScheduleItem(ev), ev == Event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cMenuSchedule::PrepareScheduleThisAll(const cEvent *Event, const cChannel *Channel)
|
||||
{
|
||||
Clear();
|
||||
SetCols(CHNUMWIDTH, 7, 7, 6, 4);
|
||||
SetTitle(tr("This event - all channels"));
|
||||
if (schedules && Event) {
|
||||
for (cChannel *ch = Channels.First(); ch; ch = Channels.Next(ch)) {
|
||||
const cSchedule *Schedule = schedules->GetSchedule(ch);
|
||||
if (Schedule) {
|
||||
time_t now = time(NULL) - Setup.EPGLinger * 60;
|
||||
for (const cEvent *ev = Schedule->Events()->First(); ev; ev = Schedule->Events()->Next(ev)) {
|
||||
if ((ev->EndTime() > now || ev == Event) && !strcmp(ev->Title(), Event->Title()))
|
||||
Add(new cMenuScheduleItem(ev, ch, true), ev == Event && ch == Channel);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cMenuSchedule::PrepareScheduleAllAll(const cEvent *Event, const cChannel *Channel)
|
||||
{
|
||||
Clear();
|
||||
SetCols(CHNUMWIDTH, 7, 7, 6, 4);
|
||||
SetTitle(tr("All events - all channels"));
|
||||
if (schedules) {
|
||||
for (cChannel *ch = Channels.First(); ch; ch = Channels.Next(ch)) {
|
||||
const cSchedule *Schedule = schedules->GetSchedule(ch);
|
||||
if (Schedule) {
|
||||
time_t now = time(NULL) - Setup.EPGLinger * 60;
|
||||
for (const cEvent *ev = Schedule->Events()->First(); ev; ev = Schedule->Events()->Next(ev)) {
|
||||
if (ev->EndTime() > now || ev == Event)
|
||||
Add(new cMenuScheduleItem(ev, ch, true), ev == Event && ch == Channel);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1241,6 +1330,29 @@ void cMenuSchedule::SetHelpKeys(void)
|
||||
}
|
||||
}
|
||||
|
||||
eOSState cMenuSchedule::Number(void)
|
||||
{
|
||||
cMenuScheduleItem::IncSortMode();
|
||||
cMenuScheduleItem *CurrentItem = (cMenuScheduleItem *)Get(Current());
|
||||
const cChannel *Channel = NULL;
|
||||
const cEvent *Event = NULL;
|
||||
if (CurrentItem) {
|
||||
Event = CurrentItem->event;
|
||||
Channel = Channels.GetByChannelID(Event->ChannelID(), true);
|
||||
}
|
||||
switch (cMenuScheduleItem::SortMode()) {
|
||||
case cMenuScheduleItem::ssmAllThis: PrepareScheduleAllThis(Event, Channel); break;
|
||||
case cMenuScheduleItem::ssmThisThis: PrepareScheduleThisThis(Event, Channel); break;
|
||||
case cMenuScheduleItem::ssmThisAll: PrepareScheduleThisAll(Event, Channel); break;
|
||||
case cMenuScheduleItem::ssmAllAll: PrepareScheduleAllAll(Event, Channel); break;
|
||||
}
|
||||
CurrentItem = (cMenuScheduleItem *)Get(Current());
|
||||
Sort();
|
||||
SetCurrent(CurrentItem);
|
||||
Display();
|
||||
return osContinue;
|
||||
}
|
||||
|
||||
eOSState cMenuSchedule::Record(void)
|
||||
{
|
||||
cMenuScheduleItem *item = (cMenuScheduleItem *)Get(Current());
|
||||
@ -1290,6 +1402,7 @@ eOSState cMenuSchedule::ProcessKey(eKeys Key)
|
||||
|
||||
if (state == osUnknown) {
|
||||
switch (Key) {
|
||||
case k0: return Number();
|
||||
case kRecord:
|
||||
case kRed: return Record();
|
||||
case kGreen: if (schedules) {
|
||||
@ -1325,7 +1438,8 @@ eOSState cMenuSchedule::ProcessKey(eKeys Key)
|
||||
if (ei) {
|
||||
cChannel *channel = Channels.GetByChannelID(ei->ChannelID(), true);
|
||||
if (channel) {
|
||||
PrepareSchedule(channel);
|
||||
cMenuScheduleItem::SetSortMode(cMenuScheduleItem::ssmAllThis);
|
||||
PrepareScheduleAllThis(NULL, channel);
|
||||
if (channel->Number() != cDevice::CurrentChannel()) {
|
||||
otherChannel = channel->Number();
|
||||
SetHelp(Count() ? tr("Button$Record") : NULL, tr("Button$Now"), tr("Button$Next"), tr("Button$Switch"));
|
||||
|
Loading…
Reference in New Issue
Block a user