From 74febbfe86b63ac894b40f1d6c5fb2de8c6973b5 Mon Sep 17 00:00:00 2001 From: louis Date: Sat, 10 Jan 2015 10:10:31 +0100 Subject: [PATCH] fixed bug that EPGSearch Favorites Menu was not displayed correctly --- HISTORY | 4 ++- displaymenu.c | 8 +++++- .../xmlfiles/displaymenuschedules.xml | 22 +++++++++++++++- .../xmlfiles/displaymenuschedules.xml | 19 ++++++++++++-- .../xmlfiles/displaymenuschedules.xml | 26 +++++++++++++++++-- .../xmlfiles/displaymenuschedules.xml | 3 +++ views/displaymenuitemcurrentview.c | 6 +++-- views/displaymenuitemcurrentview.h | 3 ++- views/displaymenuitemview.c | 8 +++--- views/displaymenuitemview.h | 3 ++- views/displaymenulistview.c | 4 +-- views/displaymenulistview.h | 2 +- views/displaymenurootview.h | 1 + views/displaymenuview.c | 4 ++- views/displaymenuview.h | 3 +++ 15 files changed, 98 insertions(+), 18 deletions(-) diff --git a/HISTORY b/HISTORY index b5292e7..260773a 100644 --- a/HISTORY +++ b/HISTORY @@ -140,4 +140,6 @@ Version 0.1.2 - display only active remote timers in main menu - fixed two possible null pointer accesses in displaymenurootview -- fixed bug in displayvolumeview +- fixed bug that EPGSearch Favorites Menu was not displayed correctly, + introduced "whatsonfavorites" Token in displaymenuschedules + diff --git a/displaymenu.c b/displaymenu.c index f5f64ec..5a1a3e6 100644 --- a/displaymenu.c +++ b/displaymenu.c @@ -94,6 +94,11 @@ bool cSDDisplayMenu::SetItemEvent(const cEvent *Event, int Index, bool Current, return false; if (config.blockFlush) rootView->LockFlush(); + bool isFav = false; + if (MenuCategory() == mcSchedule && Channel) { + isFav = true; + rootView->SetEpgSearchFavorite(); + } const cChannel *channel = Channel; if (!channel) { channel = rootView->GetChannel(); @@ -102,10 +107,11 @@ bool cSDDisplayMenu::SetItemEvent(const cEvent *Event, int Index, bool Current, channel = Channels.GetByChannelID(Event->ChannelID()); } rootView->SetChannel(channel); + cDisplayMenuListView *list = rootView->GetListView(); if (!list) return false; - list->AddSchedulesMenuItem(Index, Event, channel, TimerMatch, MenuCategory(), Current, Selectable); + list->AddSchedulesMenuItem(Index, Event, channel, TimerMatch, MenuCategory(), isFav, Current, Selectable); if (state == vsIdle) state = vsMenuUpdate; return true; diff --git a/skins/blackhole/xmlfiles/displaymenuschedules.xml b/skins/blackhole/xmlfiles/displaymenuschedules.xml index 4304bef..7bf5d29 100644 --- a/skins/blackhole/xmlfiles/displaymenuschedules.xml +++ b/skins/blackhole/xmlfiles/displaymenuschedules.xml @@ -11,10 +11,11 @@ {whatson} true if menu "What's on" is displayed {whatsonnow} true if menu "What's on now" is displayed {whatsonnext} true if menu "What's on next" is displayed + {whatsonfavorites} true if EPGSearch Favorites menu is displayed -->
- + @@ -55,6 +56,7 @@ {whatson} true if menu "What's on" is displayed {whatsonnow} true if menu "What's on now" is displayed {whatsonnext} true if menu "What's on next" is displayed + {whatsonfavorites} true if EPGSearch Favorites menu is displayed {timerpartitial} true if partitial timer is set for the event {timerfull} true if full timer is set for the event {hasVPS} true if event has VPS information @@ -127,6 +129,23 @@ + + + + + + + + + + + + + + + + + @@ -165,6 +184,7 @@ {whatson} true if menu "What's on" is displayed {whatsonnow} true if menu "What's on now" is displayed {whatsonnext} true if menu "What's on next" is displayed + {whatsonfavorites} true if EPGSearch Favorites menu is displayed {schedule[]} array with next 10 schedules, only for whatsonnow and whatsonnext {schedule[title]} title of event {schedule[shorttext]} shorttext of event diff --git a/skins/metrixhd/xmlfiles/displaymenuschedules.xml b/skins/metrixhd/xmlfiles/displaymenuschedules.xml index 75a29dc..58300c6 100644 --- a/skins/metrixhd/xmlfiles/displaymenuschedules.xml +++ b/skins/metrixhd/xmlfiles/displaymenuschedules.xml @@ -11,11 +11,12 @@ {whatson} true if menu "What's on" is displayed {whatsonnow} true if menu "What's on now" is displayed {whatsonnext} true if menu "What's on next" is displayed + {whatsonfavorites} true if EPGSearch Favorites menu is displayed -->
- - + + @@ -47,6 +48,7 @@ {whatson} true if menu "What's on" is displayed {whatsonnow} true if menu "What's on now" is displayed {whatsonnext} true if menu "What's on next" is displayed + {whatsonfavorites} true if EPGSearch Favorites menu is displayed {timerpartitial} true if partitial timer is set for the event {timerfull} true if full timer is set for the event {hasVPS} true if event has VPS information @@ -104,6 +106,19 @@ + + + + + + + + + + + + + diff --git a/skins/nopacity/xmlfiles/displaymenuschedules.xml b/skins/nopacity/xmlfiles/displaymenuschedules.xml index ddba121..130e5e0 100644 --- a/skins/nopacity/xmlfiles/displaymenuschedules.xml +++ b/skins/nopacity/xmlfiles/displaymenuschedules.xml @@ -9,10 +9,11 @@ {whatson} true if menu "What's on" is displayed {whatsonnow} true if menu "What's on now" is displayed {whatsonnext} true if menu "What's on next" is displayed + {whatsonfavorites} true if EPGSearch Favorites menu is displayed -->
- + @@ -45,6 +46,7 @@ {whatson} true if menu "What's on" is displayed {whatsonnow} true if menu "What's on now" is displayed {whatsonnext} true if menu "What's on next" is displayed + {whatsonfavorites} true if EPGSearch Favorites menu is displayed {timerpartitial} true if partitial timer is set for the event {timerfull} true if full timer is set for the event {hasVPS} true if event has VPS information @@ -123,7 +125,27 @@ - + + + + + + + + + + + + + + + + + + + + + diff --git a/skinskeleton/xmlfiles/displaymenuschedules.xml b/skinskeleton/xmlfiles/displaymenuschedules.xml index ad4c7ae..58c579d 100644 --- a/skinskeleton/xmlfiles/displaymenuschedules.xml +++ b/skinskeleton/xmlfiles/displaymenuschedules.xml @@ -11,6 +11,7 @@ {whatson} true if menu "What's on" is displayed {whatsonnow} true if menu "What's on now" is displayed {whatsonnext} true if menu "What's on next" is displayed + {whatsonfavorites} true if EPGSearch Favorites menu is displayed -->
@@ -41,6 +42,7 @@ {whatson} true if menu "What's on" is displayed {whatsonnow} true if menu "What's on now" is displayed {whatsonnext} true if menu "What's on next" is displayed + {whatsonfavorites} true if EPGSearch Favorites menu is displayed {timerpartitial} true if partitial timer is set for the event {timerfull} true if full timer is set for the event {hasVPS} true if event has VPS information @@ -80,6 +82,7 @@ {whatson} true if menu "What's on" is displayed {whatsonnow} true if menu "What's on now" is displayed {whatsonnext} true if menu "What's on next" is displayed + {whatsonfavorites} true if EPGSearch Favorites menu is displayed {schedule[]} array with next 10 schedules, only for whatsonnow and whatsonnext {schedule[title]} title of event {schedule[shorttext]} shorttext of event diff --git a/views/displaymenuitemcurrentview.c b/views/displaymenuitemcurrentview.c index de84e8b..b60d4ef 100644 --- a/views/displaymenuitemcurrentview.c +++ b/views/displaymenuitemcurrentview.c @@ -104,12 +104,13 @@ void cDisplayMenuItemCurrentMainView::Action(void) { * cDisplayMenuItemCurrentSchedulesView *************************************************************/ -cDisplayMenuItemCurrentSchedulesView::cDisplayMenuItemCurrentSchedulesView(cTemplateViewElement *tmplCurrent, const cEvent *event, const cChannel *channel, eTimerMatch timerMatch, eMenuCategory cat) +cDisplayMenuItemCurrentSchedulesView::cDisplayMenuItemCurrentSchedulesView(cTemplateViewElement *tmplCurrent, const cEvent *event, const cChannel *channel, eTimerMatch timerMatch, eMenuCategory cat, bool isEpgSearchFav) : cDisplayMenuItemCurrentView(tmplCurrent) { this->event = event; this->channel = channel; this->timerMatch = timerMatch; this->cat = cat; + this->isEpgSearchFav = isEpgSearchFav; } cDisplayMenuItemCurrentSchedulesView::~cDisplayMenuItemCurrentSchedulesView() { @@ -120,9 +121,10 @@ void cDisplayMenuItemCurrentSchedulesView::Prepare(void) { void cDisplayMenuItemCurrentSchedulesView::Render(void) { - intTokens.insert(pair("whatson", (cat == mcSchedule) ? true: false)); + intTokens.insert(pair("whatson", (cat == mcSchedule)&&(!isEpgSearchFav) ? true: false)); intTokens.insert(pair("whatsonnow", (cat == mcScheduleNow) ? true: false)); intTokens.insert(pair("whatsonnext", (cat == mcScheduleNext) ? true: false)); + intTokens.insert(pair("whatsonfavorites", isEpgSearchFav ? true: false)); if (timerMatch == tmFull) { intTokens.insert(pair("timerpartitial", false)); intTokens.insert(pair("timerfull", true)); diff --git a/views/displaymenuitemcurrentview.h b/views/displaymenuitemcurrentview.h index e88742f..680d9c8 100644 --- a/views/displaymenuitemcurrentview.h +++ b/views/displaymenuitemcurrentview.h @@ -42,10 +42,11 @@ private: const cChannel *channel; eTimerMatch timerMatch; eMenuCategory cat; + bool isEpgSearchFav; void Action(void); void ReadSchedules(vector< map > *schedulesTokens); public: - cDisplayMenuItemCurrentSchedulesView(cTemplateViewElement *tmplCurrent, const cEvent *event, const cChannel *channel, eTimerMatch timerMatch, eMenuCategory cat); + cDisplayMenuItemCurrentSchedulesView(cTemplateViewElement *tmplCurrent, const cEvent *event, const cChannel *channel, eTimerMatch timerMatch, eMenuCategory cat, bool isEpgSearchFav); virtual ~cDisplayMenuItemCurrentSchedulesView(); void Prepare(void); void Render(void); diff --git a/views/displaymenuitemview.c b/views/displaymenuitemview.c index d6b43a4..12ed4ee 100644 --- a/views/displaymenuitemview.c +++ b/views/displaymenuitemview.c @@ -267,12 +267,13 @@ void cDisplayMenuItemMainView::SplitMenuText(void) { cDisplayMenuItemSchedulesView::cDisplayMenuItemSchedulesView(cTemplateViewList *tmplList, const cEvent *event, const cChannel *channel, eTimerMatch timerMatch, - eMenuCategory cat, bool current, bool selectable) + eMenuCategory cat, bool isEpgSearchFav, bool current, bool selectable) : cDisplayMenuItemView(tmplList, current, selectable) { this->event = event; this->channel = channel; this->timerMatch = timerMatch; this->cat = cat; + this->isEpgSearchFav = isEpgSearchFav; } cDisplayMenuItemSchedulesView::~cDisplayMenuItemSchedulesView() { @@ -285,9 +286,10 @@ void cDisplayMenuItemSchedulesView::SetTokens(void) { intTokens.insert(pair("current", current)); intTokens.insert(pair("separator", !selectable)); intTokens.insert(pair("nummenuitem", num+1)); - intTokens.insert(pair("whatson", (cat == mcSchedule) ? true: false)); + intTokens.insert(pair("whatson", (cat == mcSchedule)&&(!isEpgSearchFav) ? true: false)); intTokens.insert(pair("whatsonnow", (cat == mcScheduleNow) ? true: false)); intTokens.insert(pair("whatsonnext", (cat == mcScheduleNext) ? true: false)); + intTokens.insert(pair("whatsonfavorites", isEpgSearchFav ? true: false)); if (timerMatch == tmFull) { intTokens.insert(pair("timerpartitial", false)); intTokens.insert(pair("timerfull", true)); @@ -360,7 +362,7 @@ void cDisplayMenuItemSchedulesView::Render(void) { if (current) { cTemplateViewElement *tmplCurrent = tmplList->GetListElementCurrent(); if (tmplCurrent) { - currentView = new cDisplayMenuItemCurrentSchedulesView(tmplCurrent, event, channel, timerMatch, cat); + currentView = new cDisplayMenuItemCurrentSchedulesView(tmplCurrent, event, channel, timerMatch, cat, isEpgSearchFav); currentView->Start(); } } diff --git a/views/displaymenuitemview.h b/views/displaymenuitemview.h index d47dadd..e9cfd5f 100644 --- a/views/displaymenuitemview.h +++ b/views/displaymenuitemview.h @@ -74,10 +74,11 @@ private: const cChannel *channel; eTimerMatch timerMatch; eMenuCategory cat; + bool isEpgSearchFav; string ParseSeparator(string sep); public: cDisplayMenuItemSchedulesView(cTemplateViewList *tmplList, const cEvent *event, const cChannel *channel, eTimerMatch timerMatch, - eMenuCategory cat, bool current, bool selectable); + eMenuCategory cat, bool isEpgSearchFav, bool current, bool selectable); virtual ~cDisplayMenuItemSchedulesView(); void SetTokens(void); void Prepare(void); diff --git a/views/displaymenulistview.c b/views/displaymenulistview.c index 6416857..3a51b82 100644 --- a/views/displaymenulistview.c +++ b/views/displaymenulistview.c @@ -138,14 +138,14 @@ void cDisplayMenuListView::AddSetupMenuItem(int index, const char *itemText, boo } void cDisplayMenuListView::AddSchedulesMenuItem(int index, const cEvent *event, const cChannel *channel, eTimerMatch timerMatch, - eMenuCategory cat, bool current, bool selectable) { + eMenuCategory cat, bool isEpgSearchFav, bool current, bool selectable) { if (index >= itemCount) return; if (menuItems[index]) { menuItems[index]->SetCurrent(current); return; } - cDisplayMenuItemView *item = new cDisplayMenuItemSchedulesView(tmplList, event, channel, timerMatch, cat, current, selectable); + cDisplayMenuItemView *item = new cDisplayMenuItemSchedulesView(tmplList, event, channel, timerMatch, cat, isEpgSearchFav, current, selectable); menuItems[index] = item; } diff --git a/views/displaymenulistview.h b/views/displaymenulistview.h index 2d9d30f..a407020 100644 --- a/views/displaymenulistview.h +++ b/views/displaymenulistview.h @@ -23,7 +23,7 @@ public: void AddDefaultMenuItem(int index, string *tabTexts, bool current, bool selectable); void AddMainMenuItem(int index, const char *itemText, bool current, bool selectable); void AddSetupMenuItem(int index, const char *itemText, bool current, bool selectable); - void AddSchedulesMenuItem(int index, const cEvent *event, const cChannel *channel, eTimerMatch timerMatch, eMenuCategory cat, bool current, bool selectable); + void AddSchedulesMenuItem(int index, const cEvent *event, const cChannel *channel, eTimerMatch timerMatch, eMenuCategory cat, bool isEpgSearchFav, bool current, bool selectable); void AddChannelsMenuItem(int index, const cChannel *channel, bool withProvider, bool current, bool selectable); void AddTimersMenuItem(int index, const cTimer *timer, bool current, bool selectable); void AddRecordingMenuItem(int index, const cRecording *recording, int level, int total, int isNew, bool current, bool selectable); diff --git a/views/displaymenurootview.h b/views/displaymenurootview.h index 33a78a9..b9c8c81 100644 --- a/views/displaymenurootview.h +++ b/views/displaymenurootview.h @@ -50,6 +50,7 @@ public: void SetTitle(const char *title); void SetChannel(const cChannel *channel) { view->SetChannel(channel); }; const cChannel *GetChannel(void) { return view->GetChannel(); }; + void SetEpgSearchFavorite(void) { if (view) view->SetEpgSearchFavorite(); }; void SetButtonTexts(const char *Red, const char *Green, const char *Yellow, const char *Blue); void SetTabs(int tab1, int tab2, int tab3, int tab4, int tab5); void SetMessage(eMessageType type, const char *text); diff --git a/views/displaymenuview.c b/views/displaymenuview.c index e7ec491..1487ce1 100644 --- a/views/displaymenuview.c +++ b/views/displaymenuview.c @@ -599,6 +599,7 @@ void cDisplayMenuMainView::DrawCustomTokens(void) { cDisplayMenuSchedulesView::cDisplayMenuSchedulesView(cTemplateView *tmplView, eMenuCategory menuCat, bool menuInit) : cDisplayMenuView(tmplView, menuInit) { cat = menuCat; channel = NULL; + isEpgSearchFavoritesMenu = false; } cDisplayMenuSchedulesView::~cDisplayMenuSchedulesView() { @@ -614,9 +615,10 @@ bool cDisplayMenuSchedulesView::DrawHeader(void) { map < string, string > stringTokens; map < string, int > intTokens; - intTokens.insert(pair("whatson", (cat == mcSchedule) ? true: false)); + intTokens.insert(pair("whatson", (cat == mcSchedule)&&(!isEpgSearchFavoritesMenu) ? true: false)); intTokens.insert(pair("whatsonnow", (cat == mcScheduleNow) ? true: false)); intTokens.insert(pair("whatsonnext", (cat == mcScheduleNext) ? true: false)); + intTokens.insert(pair("whatsonfavorites", isEpgSearchFavoritesMenu ? true: false)); stringTokens.insert(pair("title", menuTitle)); stringTokens.insert(pair("vdrversion", VDRVERSION)); diff --git a/views/displaymenuview.h b/views/displaymenuview.h index da1c55c..c66ae39 100644 --- a/views/displaymenuview.h +++ b/views/displaymenuview.h @@ -18,6 +18,7 @@ public: void SetTitle(const char *title) {menuTitle = title; }; virtual void SetChannel(const cChannel *channel) {}; virtual const cChannel *GetChannel(void) { return NULL; }; + virtual void SetEpgSearchFavorite(void) {}; void SetButtonTexts(string *buttonTexts) { this->buttonTexts = buttonTexts; }; bool DrawBackground(void); virtual bool DrawHeader(void); @@ -52,11 +53,13 @@ public: class cDisplayMenuSchedulesView : public cDisplayMenuView { private: const cChannel *channel; + bool isEpgSearchFavoritesMenu; public: cDisplayMenuSchedulesView(cTemplateView *tmplView, eMenuCategory menuCat, bool menuInit); virtual ~cDisplayMenuSchedulesView(); void SetChannel(const cChannel *channel) { if (channel) this->channel = channel; }; const cChannel *GetChannel(void) { return channel; }; + void SetEpgSearchFavorite(void) { isEpgSearchFavoritesMenu = true; }; bool DrawHeader(void); };