summaryrefslogtreecommitdiff
path: root/recmenumanager.c
diff options
context:
space:
mode:
authorkamel5 <vdr.kamel5 (at) gmx (dot) net>2019-07-10 17:35:55 +0200
committerkamel5 <vdr.kamel5 (at) gmx (dot) net>2019-07-10 17:41:35 +0200
commit27e9004629612493c036f11807c02409a908522f (patch)
tree6d4226ed882bb5a3fc7349ebfd4afc7becbcdbaf /recmenumanager.c
parent194aa06a4e2c2ab4b1957bc84872e3a1cdfebc1d (diff)
downloadvdr-plugin-tvguide-27e9004629612493c036f11807c02409a908522f.tar.gz
vdr-plugin-tvguide-27e9004629612493c036f11807c02409a908522f.tar.bz2
Rename recmenumanager.* to recmenuview.*
Diffstat (limited to 'recmenumanager.c')
-rw-r--r--recmenumanager.c939
1 files changed, 0 insertions, 939 deletions
diff --git a/recmenumanager.c b/recmenumanager.c
deleted file mode 100644
index 7371f98..0000000
--- a/recmenumanager.c
+++ /dev/null
@@ -1,939 +0,0 @@
-#include "recmenu.h"
-#include "recmenus.h"
-#include "switchtimer.h"
-#include "timerconflict.h"
-#include "recmenumanager.h"
-
-cRecMenuManager::cRecMenuManager(void) {
- footer = NULL;
- active = false;
- activeMenu = NULL;
- activeMenuBuffer = NULL;
- activeMenuBuffer2 = NULL;
- recManager = new cRecManager();
- recManager->SetEPGSearchPlugin();
- timerConflicts = NULL;
- detailViewActive = false;
-}
-
-cRecMenuManager::~cRecMenuManager(void) {
- if (activeMenu) {
- active = false;
- delete activeMenu;
- activeMenu = NULL;
- }
- if (timerConflicts) {
- delete timerConflicts;
- timerConflicts = NULL;
- }
- delete recManager;
-}
-
-void cRecMenuManager::Start(const cEvent *event) {
- active = true;
- activeMenuBuffer = NULL;
- detailViewActive = false;
- SetBackground();
- this->event = event;
- activeMenu = new cRecMenuMain(recManager->EpgSearchAvailable(), recManager->CheckEventForTimer(event), SwitchTimers.EventInSwitchList(event));
- activeMenu->Display();
- osdManager.flush();
-}
-
-void cRecMenuManager::StartFavorites(void) {
- active = true;
- activeMenuBuffer = NULL;
- detailViewActive = false;
- SetBackground();
- std::vector<cTVGuideSearchTimer> favorites;
- recManager->GetFavorites(&favorites);
- activeMenu = new cRecMenuFavorites(favorites);
- activeMenu->Display();
- osdManager.flush();
-}
-
-
-void cRecMenuManager::Close(void) {
- event = NULL;
- active = false;
- if (activeMenu) {
- delete activeMenu;
- activeMenu = NULL;
- }
- if (timerConflicts) {
- delete timerConflicts;
- timerConflicts = NULL;
- }
- DeleteBackground();
-}
-
-void cRecMenuManager::SetBackground(void) {
- int backgroundWidth = geoManager.osdWidth;
- int backgroundHeight = geoManager.osdHeight;
- pixmapBackground = osdManager.requestPixmap(3, cRect(0, 0, backgroundWidth, backgroundHeight));
- pixmapBackground->Fill(theme.Color(clrRecMenuBackground));
- if (tvguideConfig.scaleVideo) {
- int tvHeight = geoManager.statusHeaderHeight;
- int tvWidth = tvHeight * 16 / 9;
- int tvX = geoManager.osdWidth - tvWidth;
- pixmapBackground->DrawRectangle(cRect(tvX, 0, tvWidth, tvHeight), clrTransparent);
- }
-}
-
-void cRecMenuManager::DeleteBackground(void) {
- osdManager.releasePixmap(pixmapBackground);
-}
-
-eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) {
- eOSState state = osContinue;
- switch (nextState) {
- /***************************************************************************************
- * INSTANT RECORDING
- ****************************************************************************************/
- case rmsInstantRecord: {
- //caller: main menu or folder chooser
- //Creating timer for active Event, if no conflict, confirm and exit
- std::string recFolder = "";
- if (cRecMenuAskFolder *menu = dynamic_cast<cRecMenuAskFolder*>(activeMenu)) {
- recFolder = menu->GetFolder();
- }
- delete activeMenu;
- cTimer *timer = recManager->createTimer(event, recFolder);
- if (!DisplayTimerConflict(timer)) {
- activeMenu = new cRecMenuConfirmTimer(event);
- activeMenu->Display();
- }
- break; }
- case rmsInstantRecordFolder:
- //caller: main menu
- //Asking for Folder
- delete activeMenu;
- activeMenu = new cRecMenuAskFolder(event, rmsInstantRecord);
- activeMenu->Display();
- break;
- case rmsIgnoreTimerConflict:
- //caller: cRecMenuTimerConflict
- //Confirming created Timer
- delete activeMenu;
- activeMenu = new cRecMenuConfirmTimer(event);
- activeMenu->Display();
- break;
- case rmsTimerConflictShowInfo: {
- //caller: cRecMenuTimerConflict
- int timerIndex;
- if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenu)) {
- timerIndex = menu->GetTimerConflictIndex();
- } else break;
- int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex);
-#if VDRVERSNUM >= 20301
- LOCK_TIMERS_READ;
- const cTimer *t = Timers->Get(timerID);
-#else
- cTimer *t = Timers.Get(timerID);
-#endif
- if (t) {
- const cEvent *ev = t->Event();
- if (ev) {
- DisplayDetailedView(ev);
- }
- }
- break; }
- case rmsDeleteTimerConflictMenu: {
- //caller: cRecMenuTimerConflict
- //delete timer out of current timer conflict
- int timerIndex;
- if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenu)) {
- timerIndex = menu->GetTimerConflictIndex();
- } else break;
- int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex);
- recManager->DeleteTimer(timerID);
- delete activeMenu;
- if (!DisplayTimerConflict(timerID)) {
- activeMenu = new cRecMenuConfirmTimer(event);
- activeMenu->Display();
- }
- break; }
- case rmsEditTimerConflictMenu: {
- //caller: cRecMenuTimerConflict
- //edit timer out of current timer conflict
- int timerIndex;
- if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenu)) {
- timerIndex = menu->GetTimerConflictIndex();
- } else break;
- int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex);
-#if VDRVERSNUM >= 20301
- LOCK_TIMERS_READ;
- const cTimer *timer = Timers->Get(timerID);
-#else
- const cTimer *timer = Timers.Get(timerID);
-#endif
- if (timer) {
- delete activeMenu;
- activeMenu = new cRecMenuEditTimer(timer, rmsSaveTimerConflictMenu);
- activeMenu->Display();
- }
- break; }
- case rmsSaveTimerConflictMenu: {
- //caller: cRecMenuEditTimer
- //save timer from current timer conflict
- cTimer timerModified;
- const cTimer *originalTimer;
- if (cRecMenuEditTimer *menu = dynamic_cast<cRecMenuEditTimer*>(activeMenu)) {
- timerModified = menu->GetTimer();
- originalTimer = menu->GetOriginalTimer();
- } else break;
- recManager->SaveTimer(originalTimer, timerModified);
- delete activeMenu;
- if (!DisplayTimerConflict(originalTimer)) {
- activeMenu = new cRecMenuConfirmTimer(event);
- activeMenu->Display();
- }
- break; }
- case rmsDeleteTimer:
- //caller: main menu
- //delete timer for active event
- delete activeMenu;
- if (recManager->IsRecorded(event)) {
- activeMenu = new cRecMenuAskDeleteTimer(event);
- } else {
- recManager->DeleteTimer(event);
- activeMenu = new cRecMenuConfirmDeleteTimer(event);
- }
- activeMenu->Display();
- break;
- case rmsDeleteTimerConfirmation:
- //delete running timer for active event
- recManager->DeleteTimer(event);
- delete activeMenu;
- activeMenu = new cRecMenuConfirmDeleteTimer(event);
- activeMenu->Display();
- break;
- case rmsEditTimer: {
- //edit timer for active event
- const cTimer *timer;
-#if VDRVERSNUM >= 20301
- {
- LOCK_TIMERS_READ;
- timer = recManager->GetTimerForEvent(event);
- }
-#else
- timer = recManager->GetTimerForEvent(event);
-#endif
- if (timer) {
- delete activeMenu;
- activeMenu = new cRecMenuEditTimer(timer, rmsSaveTimer);
- activeMenu->Display();
- }
- break; }
- case rmsSaveTimer: {
- //caller: cRecMenuEditTimer
- //save timer for active event
- cTimer timerModified;
- const cTimer *originalTimer;
- if (cRecMenuEditTimer *menu = dynamic_cast<cRecMenuEditTimer*>(activeMenu)) {
- timerModified = menu->GetTimer();
- originalTimer = menu->GetOriginalTimer();
- } else break;
- recManager->SaveTimer(originalTimer, timerModified);
- state = osEnd;
- Close();
- break; }
- /***************************************************************************************
- * SERIES TIMER
- ****************************************************************************************/
- case rmsSeriesTimer: {
- //caller: main menu oder folder chooser
- std::string recFolder = "";
- if (cRecMenuAskFolder *menu = dynamic_cast<cRecMenuAskFolder*>(activeMenu)) {
- recFolder = menu->GetFolder();
- }
- delete activeMenu;
-#if VDRVERSNUM >= 20301
- LOCK_CHANNELS_READ;
- const cChannel *channel = Channels->GetByChannelID(event->ChannelID());
-#else
- cChannel *channel = Channels.GetByChannelID(event->ChannelID());
-#endif
- activeMenu = new cRecMenuSeriesTimer(channel, event, recFolder);
- activeMenu->Display();
- break; }
- case rmsSeriesTimerFolder:
- //caller: main menu
- //Asking for Folder
- delete activeMenu;
- activeMenu = new cRecMenuAskFolder(event, rmsSeriesTimer);
- activeMenu->Display();
- break;
- case rmsSeriesTimerCreate: {
- //caller: cRecMenuSeriesTimer
- cTimer *seriesTimer;
- if (cRecMenuSeriesTimer *menu = dynamic_cast<cRecMenuSeriesTimer*>(activeMenu)) {
- seriesTimer = menu->GetTimer();
- } else break;
- recManager->CreateSeriesTimer(seriesTimer);
- delete activeMenu;
- activeMenu = new cRecMenuConfirmSeriesTimer(seriesTimer);
- activeMenu->Display();
- break; }
- /**********************************************************************************************
- * SEARCH TIMER
- ***********************************************************************************************/
- case rmsSearchTimer:
- //Caller: main menu
- //set search String for search timer
- delete activeMenu;
- activeMenu = new cRecMenuSearchTimer(event);
- activeMenu->Display();
- break;
- case rmsSearchTimerOptions: {
- //Caller: cRecMenuSearchTimer, cRecMenuSearchTimerTemplates
- //Choose to set options manually or by template
- std::string searchString;
- cTVGuideSearchTimer searchTimer;
- bool reload = false;
- if (cRecMenuSearchTimer *menu = dynamic_cast<cRecMenuSearchTimer*>(activeMenu)) {
- searchString = menu->GetSearchString();
- } else if (cRecMenuSearchTimerTemplatesCreate *menu = dynamic_cast<cRecMenuSearchTimerTemplatesCreate*>(activeMenu)) {
- searchTimer = menu->GetSearchTimer();
- reload = true;
- } else break;
- delete activeMenu;
- if (searchString.size() < 4) {
- activeMenu = new cRecMenuSearchTimer(event);
- } else {
- if (!reload) {
- searchTimer.SetSearchString(searchString);
- }
- std::vector<TVGuideEPGSearchTemplate> epgSearchTemplates;
- recManager->ReadEPGSearchTemplates(&epgSearchTemplates);
- if (epgSearchTemplates.size() > 0) {
- activeMenu = new cRecMenuSearchTimerTemplates(searchTimer, epgSearchTemplates);
- } else {
- std::vector<std::string> channelGroups;
- recManager->GetChannelGroups(&channelGroups);
- activeMenu = new cRecMenuSearchTimerEdit(searchTimer, channelGroups);
- }
- }
- activeMenu->Display();
- break; }
- case rmsSearchTimers: {
- //caller: main menu
- DisplaySearchTimerList();
- break; }
- case rmsSearchTimerEdit: {
- //caller: cRecMenuSearchTimers, cRecMenuSearchTimerEdit, cRecMenuSearchTimerTemplates
- cTVGuideSearchTimer searchTimer;
- if (cRecMenuSearchTimers *menu = dynamic_cast<cRecMenuSearchTimers*>(activeMenu)) {
- searchTimer = menu->GetSearchTimer();
- } else if (cRecMenuSearchTimerEdit *menu = dynamic_cast<cRecMenuSearchTimerEdit*>(activeMenu)) {
- searchTimer = menu->GetSearchTimer();
- } else if (cRecMenuSearchTimerTemplates *menu = dynamic_cast<cRecMenuSearchTimerTemplates*>(activeMenu)) {
- searchTimer = menu->GetSearchTimer();
- } else break;
- delete activeMenu;
- std::vector<std::string> channelGroups;
- recManager->GetChannelGroups(&channelGroups);
- activeMenu = new cRecMenuSearchTimerEdit(searchTimer, channelGroups);
- activeMenu->Display();
- break; }
- case rmsSearchTimerTest: {
- //caller: cRecMenuSearchTimerEdit, cRecMenuSearchTimerTemplatesCreate, cRecMenuSearchTimers, cRecMenuFavorites
- //show results of currently choosen search timer
- cTVGuideSearchTimer searchTimer;
- eRecMenuState recState = rmsDisabled;
- if (cRecMenuSearchTimerEdit *menu = dynamic_cast<cRecMenuSearchTimerEdit*>(activeMenu)) {
- searchTimer = menu->GetSearchTimer();
- recState = rmsSearchTimerRecord;
- } else if (cRecMenuSearchTimers *menu = dynamic_cast<cRecMenuSearchTimers*>(activeMenu)) {
- searchTimer = menu->GetSearchTimer();
- recState = rmsSearchTimerRecord;
- } else if (cRecMenuSearchTimerTemplatesCreate *menu = dynamic_cast<cRecMenuSearchTimerTemplatesCreate*>(activeMenu)) {
- searchTimer = menu->GetSearchTimer();
- TVGuideEPGSearchTemplate tmpl = menu->GetTemplate();
- searchTimer.SetTemplate(tmpl.templValue);
- searchTimer.Parse(true);
- } else if (cRecMenuFavorites *menu = dynamic_cast<cRecMenuFavorites*>(activeMenu)) {
- searchTimer = menu->GetFavorite();
- recState = rmsFavoritesRecord;
- } else break;
- int numSearchResults = 0;
- std::string searchString = searchTimer.BuildSearchString();
- const cEvent **searchResult = recManager->PerformSearchTimerSearch(searchString, numSearchResults);
- if (numSearchResults) {
- activeMenuBuffer = activeMenu;
- activeMenuBuffer->Hide();
- activeMenu = new cRecMenuSearchTimerResults(searchTimer.GetSearchString(), searchResult, numSearchResults, "", recState);
- activeMenu->Display();
- } else {
- activeMenuBuffer = activeMenu;
- activeMenuBuffer->Hide();
- activeMenu = new cRecMenuSearchTimerNothingFound(searchTimer.GetSearchString());
- activeMenu->Display();
- }
- break; }
- case rmsSearchTimerSave: {
- //caller: cRecMenuSearchTimerEdit, cRecMenuSearchTimerTemplatesCreate
- //create new or modify existing search timer
- cTVGuideSearchTimer searchTimer;
- if (cRecMenuSearchTimerEdit *menu = dynamic_cast<cRecMenuSearchTimerEdit*>(activeMenu)) {
- searchTimer = menu->GetSearchTimer();
- } else if (cRecMenuSearchTimerTemplatesCreate *menu = dynamic_cast<cRecMenuSearchTimerTemplatesCreate*>(activeMenu)) {
- searchTimer = menu->GetSearchTimer();
- TVGuideEPGSearchTemplate tmpl = menu->GetTemplate();
- searchTimer.SetTemplate(tmpl.templValue);
- searchTimer.Parse(true);
- } else break;
- bool success = recManager->SaveSearchTimer(&searchTimer);
- recManager->UpdateSearchTimers();
- if (searchTimer.GetID() >= 0) {
- //Timer modified, show list
- DisplaySearchTimerList();
- } else {
- //new timer, confirm
- delete activeMenu;
- activeMenu = new cRecMenuSearchTimerCreateConfirm(success);
- activeMenu->Display();
- }
- break; }
- case rmsSearchTimerCreateWithTemplate: {
- //caller: cRecMenuSearchTimerTemplates
- //create new search timer from template
- TVGuideEPGSearchTemplate templ;
- cTVGuideSearchTimer searchTimer;
- if (cRecMenuSearchTimerTemplates *menu = dynamic_cast<cRecMenuSearchTimerTemplates*>(activeMenu)) {
- templ = menu->GetTemplate();
- searchTimer = menu->GetSearchTimer();
- } else break;
- delete activeMenu;
- activeMenu = new cRecMenuSearchTimerTemplatesCreate(templ, searchTimer);
- activeMenu->Display();
- break; }
- case rmsSearchTimerDeleteConfirm: {
- //caller: cRecMenuSearchTimers
- //Ask for confirmation and if timers created by this search timer should alo be deleted
- cTVGuideSearchTimer searchTimer;
- if (cRecMenuSearchTimers *menu = dynamic_cast<cRecMenuSearchTimers*>(activeMenu)) {
- searchTimer = menu->GetSearchTimer();
- } else break;
- activeMenuBuffer = activeMenu;
- activeMenuBuffer->Hide();
- activeMenu = new cRecMenuSearchTimerDeleteConfirm(searchTimer);
- activeMenu->Display();
- break; }
- case rmsSearchTimerDelete:
- case rmsSearchTimerDeleteWithTimers: {
- //caller: cRecMenuSearchTimerDeleteConfirm
- //actually delete searchtimer
- cTVGuideSearchTimer searchTimer;
- if (cRecMenuSearchTimerDeleteConfirm *menu = dynamic_cast<cRecMenuSearchTimerDeleteConfirm*>(activeMenu)) {
- searchTimer = menu->GetSearchTimer();
- } else break;
- bool delTimers = (nextState==rmsSearchTimerDeleteWithTimers)?true:false;
- recManager->DeleteSearchTimer(&searchTimer, delTimers);
- delete activeMenuBuffer;
- activeMenuBuffer = NULL;
- DisplaySearchTimerList();
- break; }
- case rmsSearchTimerRecord: {
- //caller: cRecMenuSearchTimerResults
- const cEvent *ev = NULL;
- if (cRecMenuSearchTimerResults *menu = dynamic_cast<cRecMenuSearchTimerResults*>(activeMenu)) {
- ev = menu->GetEvent();
- } else break;
- if (!ev)
- break;
- recManager->createTimer(ev, "");
- activeMenuBuffer2 = activeMenu;
- activeMenuBuffer2->Hide();
- activeMenu = new cRecMenuSearchConfirmTimer(ev, rmsFavoritesRecordConfirm);
- activeMenu->Display();
- break; }
- /**********************************************************************************************
- * SWITCH TIMER
- ***********************************************************************************************/
- case rmsSwitchTimer:
- delete activeMenu;
- activeMenu = new cRecMenuSwitchTimer();
- activeMenu->Display();
- break;
- case rmsSwitchTimerCreate: {
- cSwitchTimer switchTimer;
- if (cRecMenuSwitchTimer *menu = dynamic_cast<cRecMenuSwitchTimer*>(activeMenu)) {
- switchTimer = menu->GetSwitchTimer();
- } else break;
- bool success = recManager->CreateSwitchTimer(event, switchTimer);
- delete activeMenu;
- activeMenu = new cRecMenuSwitchTimerConfirm(success);
- activeMenu->Display();
- break; }
- case rmsSwitchTimerDelete:
- recManager->DeleteSwitchTimer(event);
- delete activeMenu;
- activeMenu = new cRecMenuSwitchTimerDelete();
- activeMenu->Display();
- break;
- /**********************************************************************************************
- * RECORDINGS SEARCH
- ***********************************************************************************************/
- case rmsRecordingSearch: {
- //caller: main menu or rmsRecordingSearchResult
- std::string searchString = event->Title();
- if (cRecMenuRecordingSearchResults *menu = dynamic_cast<cRecMenuRecordingSearchResults*>(activeMenu)) {
- searchString = menu->GetSearchString();
- };
- delete activeMenu;
- activeMenu = new cRecMenuRecordingSearch(searchString);
- activeMenu->Display();
- break; }
- case rmsRecordingSearchResult: {
- //caller: cRecMenuRecordingSearch
- std::string searchString;
- if (cRecMenuRecordingSearch *menu = dynamic_cast<cRecMenuRecordingSearch*>(activeMenu)) {
- searchString = menu->GetSearchString();
- } else break;
- delete activeMenu;
- if (searchString.size() < 4) {
- activeMenu = new cRecMenuRecordingSearch(searchString);
- } else {
- int numSearchResults = 0;
- const cRecording **searchResult = recManager->SearchForRecordings(searchString, numSearchResults);
- if (numSearchResults == 0) {
- activeMenu = new cRecMenuRecordingSearchNotFound(searchString);
- } else {
- activeMenu = new cRecMenuRecordingSearchResults(searchString, searchResult, numSearchResults);
- }
- }
- activeMenu->Display();
- break; }
- /**********************************************************************************************
- * SEARCH
- ***********************************************************************************************/
- case rmsSearch:
- case rmsSearchWithOptions: {
- //caller: main menu, cRecMenuSearch, cRecMenuSearchResults
- bool withOptions = false;
- std::string searchString = event->Title();
- if (cRecMenuSearch *menu = dynamic_cast<cRecMenuSearch*>(activeMenu)) {
- withOptions = true;
- searchString = menu->GetSearchString();
- } else if (cRecMenuSearchResults *menu = dynamic_cast<cRecMenuSearchResults*>(activeMenu)) {
- searchString = menu->GetSearchString();
- }
- delete activeMenu;
- activeMenu = new cRecMenuSearch(searchString, withOptions);
- activeMenu->Display();
- break; }
- case rmsSearchPerform: {
- //caller: cRecMenuSearch
- Epgsearch_searchresults_v1_0 epgSearchData;
- if (cRecMenuSearch *menu = dynamic_cast<cRecMenuSearch*>(activeMenu)) {
- epgSearchData = menu->GetEPGSearchStruct();
- } else break;
- std::string searchString = epgSearchData.query;
- if (searchString.size() < 3) {
- activeMenuBuffer = activeMenu;
- activeMenuBuffer->Hide();
- activeMenu = new cRecMenuSearchNothingFound(searchString, true);
- } else {
- int numSearchResults = 0;
- const cEvent **searchResult = recManager->PerformSearch(epgSearchData, numSearchResults);
- if (searchResult) {
- delete activeMenu;
- activeMenu = new cRecMenuSearchResults(searchString, searchResult, numSearchResults);
- } else {
- activeMenuBuffer = activeMenu;
- activeMenuBuffer->Hide();
- activeMenu = new cRecMenuSearchNothingFound(searchString);
- }
- }
- activeMenu->Display();
- break; }
- case rmsSearchNothingFoundConfirm:
- delete activeMenu;
- activeMenu = activeMenuBuffer;
- activeMenuBuffer = NULL;
- activeMenu->Show();
- break;
- case rmsSearchShowInfo: {
- //caller: cRecMenuSearchResults, cRecMenuSearchTimerResults
- const cEvent *ev = NULL;
- if (cRecMenuSearchResults *menu = dynamic_cast<cRecMenuSearchResults*>(activeMenu)) {
- ev = menu->GetEvent();
- } else if (cRecMenuSearchTimerResults *menu = dynamic_cast<cRecMenuSearchTimerResults*>(activeMenu)) {
- ev = menu->GetEvent();
- } else break;
- if (ev) {
- DisplayDetailedView(ev);
- }
- break;}
- case rmsSearchRecord: {
- //caller: cRecMenuSearchResults
- const cEvent *ev = NULL;
- if (cRecMenuSearchResults *menu = dynamic_cast<cRecMenuSearchResults*>(activeMenu)) {
- ev = menu->GetEvent();
- } else break;
- if (!ev)
- break;
- recManager->createTimer(ev, "");
- activeMenuBuffer = activeMenu;
- activeMenuBuffer->Hide();
- activeMenu = new cRecMenuSearchConfirmTimer(ev, rmsSearchRecordConfirm);
- activeMenu->Display();
- break;}
- case rmsSearchRecordConfirm:
- delete activeMenu;
- activeMenu = activeMenuBuffer;
- activeMenuBuffer = NULL;
- activeMenu->UpdateActiveMenuItem();
- activeMenu->Show();
- break;
- /**********************************************************************************************
- * CHECK FOR TIMER CONFLICTS
- ***********************************************************************************************/
- case rmsTimerConflicts: {
- //caller: main menu
- //Show timer conflict
- if (timerConflicts) {
- delete timerConflicts;
- }
- timerConflicts = recManager->CheckTimerConflict();
- delete activeMenu;
- int numConflicts = timerConflicts->NumConflicts();
- if (numConflicts > 0) {
- activeMenu = new cRecMenuTimerConflicts(timerConflicts);
- } else {
- activeMenu = new cRecMenuNoTimerConflict();
- }
- activeMenu->Display();
- break; }
- case rmsTimerConflict: {
- //caller: cRecMenuTimerConflicts
- //Show timer conflict
- if (!timerConflicts)
- break;
- int timerConflict;
- if (cRecMenuTimerConflicts *menu = dynamic_cast<cRecMenuTimerConflicts*>(activeMenu)) {
- timerConflict = menu->GetTimerConflict();
- } else break;
- timerConflicts->SetCurrentConflict(timerConflict);
- delete activeMenu;
- activeMenu = new cRecMenuTimerConflict(timerConflicts->GetCurrentConflict());
- activeMenu->Display();
- break; }
- case rmsSearchRerunsTimerConflictMenu: {
- //caller: cRecMenuTimerConflict
- //Show reruns for timer from timer conflict
- if (!timerConflicts)
- break;
- int timerConflict;
- if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenu)) {
- timerConflict = menu->GetTimerConflictIndex();
- } else break;
- int timerID = timerConflicts->GetCurrentConflictTimerID(timerConflict);
-#if VDRVERSNUM >= 20301
- LOCK_TIMERS_READ;
- const cTimer *timer = Timers->Get(timerID);
-#else
- cTimer *timer = Timers.Get(timerID);
-#endif
- if (timer) {
- const cEvent *event = timer->Event();
- if (event) {
- int numReruns = 0;
- const cEvent **reruns = recManager->LoadReruns(event, numReruns);
- if (reruns && (numReruns > 0)) {
- activeMenuBuffer = activeMenu;
- activeMenuBuffer->Hide();
- activeMenu = new cRecMenuRerunResults(event, reruns, numReruns);
- activeMenu->Display();
- } else {
- activeMenuBuffer = activeMenu;
- activeMenuBuffer->Hide();
- activeMenu = new cRecMenuNoRerunsFound((event->Title())?event->Title():"");
- activeMenu->Display();
- }
- }
- }
- break; }
- case rmsTimerConflictIgnoreReruns: {
- delete activeMenu;
- activeMenu = activeMenuBuffer;
- activeMenuBuffer = NULL;
- activeMenu->Show();
- break; }
- case rmsTimerConflictRecordRerun: {
- //caller: cRecMenuRerunResults
- //buffer: cRecMenuTimerConflict
- if (!activeMenuBuffer)
- break;
- if (!timerConflicts)
- break;
- const cEvent *replace;
- int originalConflictIndex;
- if (cRecMenuRerunResults *menu = dynamic_cast<cRecMenuRerunResults*>(activeMenu)) {
- replace = menu->GetRerunEvent();
- } else break;
- if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenuBuffer)) {
- originalConflictIndex = menu->GetTimerConflictIndex();
- } else break;
- int originalTimerID = timerConflicts->GetCurrentConflictTimerID(originalConflictIndex);
-#if VDRVERSNUM >= 20301
- LOCK_TIMERS_READ;
- const cTimer *timerOriginal = Timers->Get(originalTimerID);
-#else
- cTimer *timerOriginal = Timers.Get(originalTimerID);
-#endif
- if (replace && timerOriginal) {
- recManager->DeleteTimer(timerOriginal->Event());
- recManager->createTimer(replace);
- delete activeMenu;
- if (activeMenuBuffer) {
- delete activeMenuBuffer;
- activeMenuBuffer = NULL;
- }
- activeMenu = new cRecMenuConfirmRerunUsed(timerOriginal->Event(), replace);
- activeMenu->Display();
- }
- break; }
- /**********************************************************************************************
- * TIMELINE
- ***********************************************************************************************/
- case rmsTimeline: {
- if (timerConflicts) {
- delete timerConflicts;
- }
- timerConflicts = recManager->CheckTimerConflict();
- delete activeMenu;
- activeMenu = new cRecMenuTimeline(timerConflicts);
- activeMenu->Display();
- break; }
- case rmsTimelineTimerEdit: {
- const cTimer *timer;
- if (cRecMenuTimeline *menu = dynamic_cast<cRecMenuTimeline*>(activeMenu)) {
- timer = menu->GetTimer();
- } else break;
- if (timer) {
- delete activeMenu;
- activeMenu = new cRecMenuEditTimer(timer, rmsTimelineTimerSave);
- activeMenu->Display();
- }
- break;}
- case rmsTimelineTimerSave: {
- cTimer timerModified;
- const cTimer *originalTimer;
- if (cRecMenuEditTimer *menu = dynamic_cast<cRecMenuEditTimer*>(activeMenu)) {
- timerModified = menu->GetTimer();
- originalTimer = menu->GetOriginalTimer();
- } else break;
- recManager->SaveTimer(originalTimer, timerModified);
- delete activeMenu;
- if (timerConflicts) {
- delete timerConflicts;
- }
- timerConflicts = recManager->CheckTimerConflict();
- activeMenu = new cRecMenuTimeline(timerConflicts);
- activeMenu->Display();
- break; }
- case rmsTimelineTimerDelete: {
- const cTimer *timer;
- if (cRecMenuEditTimer *menu = dynamic_cast<cRecMenuEditTimer*>(activeMenu)) {
- timer = menu->GetOriginalTimer();
- } else break;
-#if VDRVERSNUM >= 20301
- {
- LOCK_TIMERS_WRITE;
- recManager->DeleteTimer(Timers->GetTimer(timer));
- }
-#else
- recManager->DeleteTimer(Timers.GetTimer((cTimer*)timer));
-#endif
- delete activeMenu;
- if (timerConflicts) {
- delete timerConflicts;
- }
- timerConflicts = recManager->CheckTimerConflict();
- activeMenu = new cRecMenuTimeline(timerConflicts);
- activeMenu->Display();
- break; }
- /**********************************************************************************************
- * FAVORITES
- *********************************************************************************************/
- case rmsFavoritesRecord: {
- //caller: cRecMenuSearchTimerResults
- const cEvent *ev = NULL;
- if (cRecMenuSearchTimerResults *menu = dynamic_cast<cRecMenuSearchTimerResults*>(activeMenu)) {
- ev = menu->GetEvent();
- } else break;
- if (!ev)
- break;
- recManager->createTimer(ev, "");
- activeMenuBuffer2 = activeMenu;
- activeMenuBuffer2->Hide();
- activeMenu = new cRecMenuSearchConfirmTimer(ev, rmsFavoritesRecordConfirm);
- activeMenu->Display();
- break;}
- case rmsFavoritesRecordConfirm:
- delete activeMenu;
- activeMenu = activeMenuBuffer2;
- activeMenuBuffer2 = NULL;
- activeMenu->UpdateActiveMenuItem();
- activeMenu->Show();
- break;
- case rmsFavoritesNow:
- case rmsFavoritesNext: {
- int numResults = 0;
- bool nowOrNext;
- std::string header;
- if (nextState == rmsFavoritesNow) {
- nowOrNext = true;
- header = tr("What's on now");
- } else {
- nowOrNext = false;
- header = tr("What's on next");
- }
- const cEvent **result = recManager->WhatsOnNow(nowOrNext, numResults);
- DisplayFavoriteResults(header, result, numResults);
- break; }
- case rmsFavoritesUser1: {
- int numResults = 0;
- const cEvent **result = recManager->UserDefinedTime(1, numResults);
- DisplayFavoriteResults(tvguideConfig.descUser1, result, numResults);
- break; }
- case rmsFavoritesUser2: {
- int numResults = 0;
- const cEvent **result = recManager->UserDefinedTime(2, numResults);
- DisplayFavoriteResults(tvguideConfig.descUser2, result, numResults);
- break; }
- case rmsFavoritesUser3: {
- int numResults = 0;
- const cEvent **result = recManager->UserDefinedTime(3, numResults);
- DisplayFavoriteResults(tvguideConfig.descUser3, result, numResults);
- break; }
- case rmsFavoritesUser4: {
- int numResults = 0;
- const cEvent **result = recManager->UserDefinedTime(4, numResults);
- DisplayFavoriteResults(tvguideConfig.descUser4, result, numResults);
- break; }
-
- /**********************************************************************************************
- * COMMON
- *********************************************************************************************/
- case rmsClose: {
- if (activeMenuBuffer == NULL) {
- state = osEnd;
- Close();
- } else {
- delete activeMenu;
- activeMenu = activeMenuBuffer;
- activeMenuBuffer = NULL;
- activeMenu->UpdateActiveMenuItem();
- activeMenu->Show();
- state = osContinue;
- }
- break; }
- default:
- break;
- }
- return state;
-}
-
-void cRecMenuManager::DisplayFavoriteResults(std::string header, const cEvent **result, int numResults) {
- if (numResults) {
- activeMenuBuffer = activeMenu;
- activeMenuBuffer->Hide();
- activeMenu = new cRecMenuSearchTimerResults(header, result, numResults, "", rmsFavoritesRecord);
- activeMenu->Display();
- } else {
- activeMenuBuffer = activeMenu;
- activeMenuBuffer->Hide();
- activeMenu = new cRecMenuSearchTimerNothingFound(header);
- activeMenu->Display();
- }
-}
-
-void cRecMenuManager::DisplaySearchTimerList(void) {
- delete activeMenu;
- std::vector<cTVGuideSearchTimer> searchTimers;
- recManager->GetSearchTimers(&searchTimers);
- activeMenu = new cRecMenuSearchTimers(searchTimers);
- activeMenu->Display();
-}
-
-bool cRecMenuManager::DisplayTimerConflict(const cTimer *timer) {
- int timerID = 0;
-#if VDRVERSNUM >= 20301
- LOCK_TIMERS_READ;
- for (const cTimer *t = Timers->First(); t; t = Timers->Next(t)) {
-#else
- for (const cTimer *t = Timers.First(); t; t = Timers.Next(t)) {
-#endif
- if (t == timer)
- return DisplayTimerConflict(timerID);
- timerID++;
- }
- return false;
-}
-
-bool cRecMenuManager::DisplayTimerConflict(int timerID) {
- if (timerConflicts)
- delete timerConflicts;
- timerConflicts = recManager->CheckTimerConflict();
- if (!timerConflicts)
- return false;
- int showTimerConflict = timerConflicts->GetCorrespondingConflict(timerID);
- if (showTimerConflict > -1) {
- timerConflicts->SetCurrentConflict(showTimerConflict);
- cTVGuideTimerConflict *conflict = timerConflicts->GetCurrentConflict();
- if (!conflict)
- return false;
- activeMenu = new cRecMenuTimerConflict(conflict);
- activeMenu->Display();
- return true;
- }
- return false;
-}
-
-void cRecMenuManager::DisplayDetailedView(const cEvent *ev) {
- activeMenu->Hide();
- detailView = new cDetailView(ev, footer);
- footer->SetDetailedViewMode(true);
- detailView->Start();
- detailViewActive = true;
-}
-
-eOSState cRecMenuManager::ProcessKey(eKeys Key) {
- eOSState state = osContinue;
- eRecMenuState nextState = rmsContinue;
- if (!activeMenu)
- return state;
- if (detailViewActive) {
- state = detailView->ProcessKey(Key);
- if (state == osEnd) {
- delete detailView;
- detailView = NULL;
- detailViewActive = false;
- activeMenu->Show();
- state = osContinue;
- }
- } else {
- nextState = activeMenu->ProcessKey(Key);
- if ((nextState == rmsClose) || ((nextState == rmsNotConsumed)&&(Key == kBack))){
- if (activeMenuBuffer == NULL) {
- state = osEnd;
- Close();
- } else {
- delete activeMenu;
- activeMenu = activeMenuBuffer;
- activeMenuBuffer = NULL;
- activeMenu->UpdateActiveMenuItem();
- activeMenu->Show();
- state = osContinue;
- osdManager.flush();
- }
- return state;
- }
- state = StateMachine(nextState);
- }
- osdManager.flush();
- return state;
-}