diff options
author | Christian Wieninger <winni@debian.(none)> | 2007-11-11 15:40:28 +0100 |
---|---|---|
committer | Christian Wieninger <winni@debian.(none)> | 2007-11-11 15:40:28 +0100 |
commit | 8d4f8607dc1558ce73eb4c376bdbf78ddb65da83 (patch) | |
tree | d0c5dde81a36ab2e8a2edc7c1e6922556518b312 /menu_favorites.c | |
download | vdr-plugin-epgsearch-8d4f8607dc1558ce73eb4c376bdbf78ddb65da83.tar.gz vdr-plugin-epgsearch-8d4f8607dc1558ce73eb4c376bdbf78ddb65da83.tar.bz2 |
Initial commit
Diffstat (limited to 'menu_favorites.c')
-rw-r--r-- | menu_favorites.c | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/menu_favorites.c b/menu_favorites.c new file mode 100644 index 0000000..a5c201a --- /dev/null +++ b/menu_favorites.c @@ -0,0 +1,191 @@ +/* +Copyright (C) 2004-2007 Christian Wieninger + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + +The author can be reached at cwieninger@gmx.de + +The project's page is at http://winni.vdr-developer.org/epgsearch +*/ + +#include <set> +#include "menu_favorites.h" +#include "menu_whatson.h" +#include "menu_commands.h" + +using std::set; + +extern const char* ButtonBlue[3]; +extern int exitToMainMenu; + +cMenuFavorites::cMenuFavorites() + : cMenuSearchResults(cTemplFile::GetTemplateByName("MenuFavorites")) +{ + BuildList(); +} + +bool cMenuFavorites::BuildList() +{ + Clear(); + eventObjects.Clear(); + + cSearchResults* pCompleteSearchResults = NULL; + cMutexLock SearchExtsLock(&SearchExts); + cSearchExt *SearchExt = SearchExts.First(); + int timespan = EPGSearchConfig.FavoritesMenuTimespan*60; + + while (SearchExt) + { + if (SearchExt->useInFavorites) + pCompleteSearchResults = SearchExt->Run(modeBlue == showNoPayTV?1:0, false, timespan, pCompleteSearchResults, true); + SearchExt = SearchExts.Next(SearchExt); + } + + if (pCompleteSearchResults) + { + set<const cEvent*> foundEvents; + pCompleteSearchResults->SortBy(CompareEventTime); + + for (cSearchResult* pResultObj = pCompleteSearchResults->First(); + pResultObj; + pResultObj = pCompleteSearchResults->Next(pResultObj)) + { + if (foundEvents.find(pResultObj->event) == foundEvents.end()) + { + foundEvents.insert(pResultObj->event); + Add(new cMenuSearchResultsItem(pResultObj->event, modeYellow == showEpisode, false, menuTemplate)); + eventObjects.Add(pResultObj->event); + } + } + delete pCompleteSearchResults; + } + SetHelpKeys(); + char* szTitle = NULL; + asprintf(&szTitle, "%s: %d %s", tr("Favorites"), Count(), tr("Search results")); + SetTitle(szTitle); + free(szTitle); + Display(); + + return true; +} + +eOSState cMenuFavorites::OnGreen() +{ + eOSState state = osUnknown; + if(!HasSubMenu()) + { + toggleKeys = 0; + cMenuWhatsOnSearch::currentShowMode = cMenuWhatsOnSearch::GetNextMode(); + return osUnknown; + } + return state; +} + +eOSState cMenuFavorites::OnYellow() +{ + eOSState state = osUnknown; + if(!HasSubMenu()) + { + cMenuSearchResultsItem *item = (cMenuSearchResultsItem *)Get(Current()); + if (item && item->event) + { + cChannel *channel = Channels.GetByChannelID(item->event->ChannelID(), true, true); + cMenuWhatsOnSearch::scheduleChannel = channel; + cMenuWhatsOnSearch::currentShowMode = showNow; + } + toggleKeys = 0; + return osBack; + } + return state; +} + +eOSState cMenuFavorites::ProcessKey(eKeys Key) +{ + exitToMainMenu = 0; + if (!HasSubMenu() && Key == kBack) + { + exitToMainMenu = 1; + return osBack; + } + + eOSState state = cMenuSearchResults::ProcessKey(Key); + if (state == osUnknown) + { + switch (Key) { + case kRecord: + case kRed: + state = OnRed(); + break; + case k0: + if(!HasSubMenu()) + { + toggleKeys = 1 - toggleKeys; + SetHelpKeys(true); + } + state = osContinue; + break; + case k1...k9: + state = HasSubMenu()?osContinue:Commands(Key); + break; + case kBlue: + return EPGSearchConfig.useOkForSwitch?ShowSummary():Switch(); + break; + case kOk: + if(HasSubMenu()) + { + state = cOsdMenu::ProcessKey(Key); + break; + } + if (Count()) + state = EPGSearchConfig.useOkForSwitch?Switch():ShowSummary(); + else + state = osBack; + break; + default: + break; + } + } + return state; +} + +void cMenuFavorites::SetHelpKeys(bool Force) +{ + cMenuSearchResultsItem *item = (cMenuSearchResultsItem *)Get(Current()); + int NewHelpKeys = 0; + if (item) { + if (item->Selectable() && item->timerMatch == tmFull) + NewHelpKeys = 2; + else + NewHelpKeys = 1; + } + + bool hasTimer = (NewHelpKeys == 2); + if (NewHelpKeys != helpKeys || Force) + { + showMode nextShowMode = cMenuWhatsOnSearch::GetNextMode(); + cShowMode* mode = cMenuWhatsOnSearch::GetShowMode(nextShowMode); + char* szButtonGreen = NULL; + if (mode) + szButtonGreen = mode->GetDescription(); + + if (toggleKeys==0) + SetHelp((EPGSearchConfig.redkeymode==0?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")), szButtonGreen,trVDR("Button$Schedule"), EPGSearchConfig.useOkForSwitch?trVDR("Button$Info"):trVDR("Button$Switch")); + else + SetHelp((EPGSearchConfig.redkeymode==1?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")), szButtonGreen,trVDR("Button$Schedule"), EPGSearchConfig.useOkForSwitch?trVDR("Button$Info"):trVDR("Button$Switch")); + helpKeys = NewHelpKeys; + } +} + |