diff -up autopatch/menu.c ./menu.c --- autopatch/menu.c Sun Jan 15 18:33:26 2006 +++ ./menu.c Sun Jan 15 20:04:02 2006 @@ -1202,6 +1202,21 @@ eOSState cMenuWhatsOn::ProcessKey(eKeys return state; } +// --- cMenuScheduleSeparator ------------------------------------------------ + +class cMenuScheduleSeparator : public cOsdItem { +public: + const cEvent *event; + cMenuScheduleSeparator(const char *DateString); +}; + +cMenuScheduleSeparator::cMenuScheduleSeparator(const char *DateString) +{ + event = NULL; + SetText(DateString, true); + SetSelectable(false); +} + // --- cMenuSchedule --------------------------------------------------------- class cMenuSchedule : public cOsdMenu { @@ -1219,6 +1234,7 @@ private: void PrepareScheduleThisThis(const cEvent *Event, const cChannel *Channel); void PrepareScheduleThisAll(const cEvent *Event, const cChannel *Channel); void PrepareScheduleAllAll(const cEvent *Event, const cChannel *Channel); + void AddSeparators(void); bool Update(void); void SetHelpKeys(void); public: @@ -1242,6 +1258,7 @@ cMenuSchedule::cMenuSchedule(void) cMenuWhatsOn::SetCurrentChannel(channel->Number()); schedules = cSchedules::Schedules(schedulesLock); PrepareScheduleAllThis(NULL, channel); + AddSeparators(); SetHelpKeys(); } } @@ -1335,7 +1352,8 @@ bool cMenuSchedule::Update(void) bool result = false; if (Timers.Modified(timerState)) { for (cOsdItem *item = First(); item; item = Next(item)) { - if (((cMenuScheduleItem *)item)->Update()) + cMenuScheduleItem *msItem = dynamic_cast (item); + if (msItem && msItem->Update()) result = true; } } @@ -1359,6 +1377,16 @@ void cMenuSchedule::SetHelpKeys(void) } } +void cMenuSchedule::AddSeparators(void) { + char curDate[10] = ""; + for (cOsdItem *item = First(); item; item = Next(item)) { + cMenuScheduleItem *msItem = dynamic_cast (item); + if (msItem && strlen(curDate) > 0 && strncmp(msItem->event->GetDateString(), curDate, 10) != 0) + Ins(new cMenuScheduleSeparator(msItem->event->GetDateString()), false, msItem); + strncpy(curDate, msItem->event->GetDateString(), 10); + } +} + eOSState cMenuSchedule::Number(void) { cMenuScheduleItem::IncSortMode(); @@ -1377,6 +1405,7 @@ eOSState cMenuSchedule::Number(void) } CurrentItem = (cMenuScheduleItem *)Get(Current()); Sort(); + if (cMenuScheduleItem::SortMode() != cMenuScheduleItem::ssmAllAll) AddSeparators(); SetCurrent(CurrentItem); Display(); return osContinue;