/* -*- c++ -*- Copyright (C) 2004-2011 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 #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 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(); cString szTitle = cString::sprintf("%s: %d %s", tr("Favorites"), Count(), tr("Search results")); SetTitle(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); const 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; } }