From a5330c715e34e37be1394f5c1a0a8e32f785da77 Mon Sep 17 00:00:00 2001 From: louis Date: Tue, 9 Jul 2013 00:20:49 +0200 Subject: [PATCH] forgot to add a file --- recmenus.c | 933 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 933 insertions(+) create mode 100644 recmenus.c diff --git a/recmenus.c b/recmenus.c new file mode 100644 index 0000000..4d667d0 --- /dev/null +++ b/recmenus.c @@ -0,0 +1,933 @@ +#define TEXTINPUTLENGTH 80 + +// --- cRecMenuMain --------------------------------------------------------- +class cRecMenuMain : public cRecMenu { +public: + cRecMenuMain(bool epgSearchAvailable, bool timerActive, bool switchTimerActive) { + if (!timerActive) { + AddMenuItem(new cRecMenuItemButton(tr("Instant Record"), rmsInstantRecord, true)); + } else { + AddMenuItem(new cRecMenuItemButton(tr("Delete Timer"), rmsDeleteTimer, true)); + AddMenuItem(new cRecMenuItemButton(tr("Edit Timer"), rmsEditTimer, false)); + } + AddMenuItem(new cRecMenuItemButton(tr("Create Series Timer"), rmsSeriesTimer, false)); + if (epgSearchAvailable) { + AddMenuItem(new cRecMenuItemButton(tr("Create Search Timer"), rmsSearchTimer, false)); + if (!switchTimerActive) { + AddMenuItem(new cRecMenuItemButton(tr("Create Switch Timer"), rmsSwitchTimer, false)); + } else { + AddMenuItem(new cRecMenuItemButton(tr("Delete Switch Timer"), rmsSwitchTimerDelete, false)); + } + } + if (epgSearchAvailable) { + AddMenuItem(new cRecMenuItemButton(tr("Search"), rmsSearch, false)); + } + AddMenuItem(new cRecMenuItemButton(tr("Search in Recordings"), rmsRecordingSearch, false)); + if (epgSearchAvailable) { + AddMenuItem(new cRecMenuItemButton(tr("Check for Timer Conflicts"), rmsTimerConflicts, false)); + } + int menuWidth = CalculateOptimalWidth() + 4 * border; + SetWidthPixel(menuWidth); + + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuMain(void) {}; +}; + +// --- cRecMenuConfirmTimer --------------------------------------------------------- +class cRecMenuConfirmTimer: public cRecMenu { +public: + cRecMenuConfirmTimer(const cEvent *event) { + SetWidthPercent(50); + cString channelName = Channels.GetByChannelID(event->ChannelID())->Name(); + cString message; + if (event->HasTimer()) { + message = tr("Timer created"); + } else { + message = tr("Timer NOT created"); + } + cString text = cString::sprintf("%s\n%s\n%s %s - %s\n%s", + *message, + *channelName, + *event->GetDateString(), + *event->GetTimeString(), + *event->GetEndTimeString(), + event->Title() + ); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + AddMenuItem(new cRecMenuItemButton(tr("OK"), rmsClose, true, true)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuConfirmTimer(void) {}; +}; + +// --- cRecMenuConfirmDeleteTimer --------------------------------------------------------- +class cRecMenuConfirmDeleteTimer: public cRecMenu { +public: + cRecMenuConfirmDeleteTimer(const cEvent *event) { + SetWidthPercent(50); + cString channelName = Channels.GetByChannelID(event->ChannelID())->Name(); + cString text = cString::sprintf("%s\n%s\n%s %s - %s\n%s", + tr("Timer deleted"), + *channelName, + *event->GetDateString(), + *event->GetTimeString(), + *event->GetEndTimeString(), + event->Title() + ); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text); + infoItem->CalculateHeight(width - 4 * border); + AddMenuItem(infoItem); + AddMenuItem(new cRecMenuItemButton(tr("OK"), rmsClose, true, true)); + + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuConfirmDeleteTimer(void) {}; +}; + +// --- cRecMenuAskDeleteTimer --------------------------------------------------------- +class cRecMenuAskDeleteTimer: public cRecMenu { +public: + cRecMenuAskDeleteTimer(const cEvent *event) { + SetWidthPercent(50); + cString channelName = Channels.GetByChannelID(event->ChannelID())->Name(); + cString text = cString::sprintf("%s \"%s, %s\" %s", + tr("Timer"), + *channelName, + event->Title(), + tr("still recording - really delete?")); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text); + infoItem->CalculateHeight(width - 4 * border); + AddMenuItem(infoItem); + AddMenuItem(new cRecMenuItemButtonYesNo(tr("Yes"), tr("No"), rmsDeleteTimerConfirmation, rmsClose, true)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuAskDeleteTimer(void) {}; +}; + +// --- cRecMenuTimerConflicts --------------------------------------------------------- +class cRecMenuTimerConflicts: public cRecMenu { +public: + cRecMenuTimerConflicts(std::vector conflicts) { + int numConflicts = conflicts.size(); + + cString text; + if (numConflicts == 1) { + text = cString::sprintf("%s %s %s", tr("One"), tr("Timer Conflict"), tr("detected")); + } else { + text = cString::sprintf("%d %s %s", conflicts.size(), tr("Timer Conflicts"), tr("detected")); + } + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text); + + for (int i=0; iCalculateHeight(width - 2 * border); + SetHeader(infoItem); + AddMenuItem(new cRecMenuItemButton(tr("Ignore Conflicts"), rmsIgnoreTimerConflict, false)); + + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuTimerConflicts(void) {}; +}; + +// --- cRecMenuTimerConflict --------------------------------------------------------- +class cRecMenuTimerConflict: public cRecMenu { +private: + TVGuideTimerConflict conflict; +public: + cRecMenuTimerConflict(TVGuideTimerConflict conflict) { + SetWidthPercent(80); + this->conflict = conflict; + SetHeader(new cRecMenuItemTimerConflictHeader(conflict.timeStart, + conflict.timeStop, + conflict.overlapStart, + conflict.overlapStop)); + SetFooter(new cRecMenuItemButton(tr("Ignore Conflict"), rmsIgnoreTimerConflict, false, true)); + int i=0; + for(std::vector::iterator it = conflict.timerIDs.begin(); it != conflict.timerIDs.end(); it++) { + const cTimer *timer = Timers.Get(*it); + if (timer) { + AddMenuItemScroll(new cRecMenuItemTimer( timer, + rmsTimerConflictShowInfo, + rmsDeleteTimerConflictMenu, + rmsEditTimerConflictMenu, + conflict.timeStart, + conflict.timeStop, + conflict.overlapStart, + conflict.overlapStop, + (!i)?true:false) + ); + i++; + } + if (!CheckHeight()) + break; + } + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + cRecMenuItem *GetMenuItem(int number) { + if ((number >= 0) && (number < conflict.timerIDs.size())) { + const cTimer *timer = Timers.Get(conflict.timerIDs[number]); + cRecMenuItem *result = new cRecMenuItemTimer( timer, + rmsTimerConflictShowInfo, + rmsDeleteTimerConflictMenu, + rmsEditTimerConflictMenu, + conflict.timeStart, + conflict.timeStop, + conflict.overlapStart, + conflict.overlapStop, + false); + return result; + } + return NULL; + }; + + int GetTotalNumMenuItems(void) { + return conflict.timerIDs.size(); + }; + virtual ~cRecMenuTimerConflict(void) {}; +}; + +// --- cRecMenuNoTimerConflict --------------------------------------------------------- +class cRecMenuNoTimerConflict: public cRecMenu { +public: + cRecMenuNoTimerConflict(void) { + SetWidthPercent(50); + cString text = tr("No Timer Conflicts found"); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text); + infoItem->CalculateHeight(width - 4 * border); + AddMenuItem(infoItem); + AddMenuItem(new cRecMenuItemButton(tr("Close"), rmsClose, true)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuNoTimerConflict(void) {}; +}; + +// --- cRecMenuEditTimer --------------------------------------------------------- +class cRecMenuEditTimer: public cRecMenu { +private: +public: + cRecMenuEditTimer(const cTimer *timer, eRecMenuState nextState) { + SetWidthPercent(60); + if (timer) { + cString title(""); + cString channelName(""); + if (timer->Event()) + title = timer->Event()->Title(); + if (timer->Channel()) + channelName = timer->Channel()->Name(); + cString infoText = cString::sprintf("%s:\n %s, %s", tr("Edit Timer"), *title, *channelName); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + + bool timerActive = timer->HasFlags(tfActive); + time_t day = timer->Day(); + int start = timer->Start(); + int stop = timer->Stop(); + int prio = timer->Priority(); + int lifetime = timer->Lifetime(); + + AddMenuItem(new cRecMenuItemBool(tr("Timer Active"), timerActive, false, true)); + AddMenuItem(new cRecMenuItemInt(tr("Priority"), prio, 0, MAXPRIORITY, false)); + AddMenuItem(new cRecMenuItemInt(tr("Lifetime"), lifetime, 0, MAXLIFETIME, false)); + AddMenuItem(new cRecMenuItemDay(tr("Day"), day, false)); + AddMenuItem(new cRecMenuItemTime(tr("Timer start time"), start, false)); + AddMenuItem(new cRecMenuItemTime(tr("Timer stop time"), stop, false)); + AddMenuItem(new cRecMenuItemButtonYesNo(tr("Save"), tr("Cancel"), nextState, rmsClose, false)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + } + }; + virtual ~cRecMenuEditTimer(void) {}; +}; + +// --- cRecMenuSeriesTimer --------------------------------------------------------- +class cRecMenuSeriesTimer: public cRecMenu { +private: +public: + cRecMenuSeriesTimer(cChannel *initialChannel, const cEvent *event) { + SetWidthPercent(70); + if (initialChannel) { + cString title = tr("Create Series Timer based on"); + cString infoText = cString::sprintf("%s:\n%s", *title, event->Title()); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + AddMenuItem(new cRecMenuItemBool(tr("Timer Active"), true, false, true)); + AddMenuItem(new cRecMenuItemChannelChooser(tr("Channel"), initialChannel, false)); + + time_t tstart = event->StartTime(); + tstart -= Setup.MarginStart * 60; + time_t tstop = tstart + event->Duration(); + tstop += Setup.MarginStop * 60; + + struct tm tm_r; + struct tm *time = localtime_r(&tstart, &tm_r); + int start = time->tm_hour * 100 + time->tm_min; + time = localtime_r(&tstop, &tm_r); + int stop = time->tm_hour * 100 + time->tm_min; + if (stop >= 2400) + stop -= 2400; + + AddMenuItem(new cRecMenuItemTime(tr("Series Timer start time"), start, false)); + AddMenuItem(new cRecMenuItemTime(tr("Series Timer stop time"), stop, false)); + AddMenuItem(new cRecMenuItemDayChooser(tr("Days to record"), 127, false)); + AddMenuItem(new cRecMenuItemDay(tr("Day to start"), tstart, false)); + AddMenuItem(new cRecMenuItemInt(tr("Priority"), MAXPRIORITY, 0, MAXPRIORITY, false)); + AddMenuItem(new cRecMenuItemInt(tr("Lifetime"), MAXLIFETIME, 0, MAXLIFETIME, false)); + + AddMenuItem(new cRecMenuItemButtonYesNo(tr("Create Timer"), tr("Cancel"), rmsSeriesTimerCreate, rmsClose, false)); + + CalculateHeight(); + CreatePixmap(); + Arrange(); + } + }; + virtual ~cRecMenuSeriesTimer(void) {}; +}; + +// --- cRecMenuConfirmSeriesTimer --------------------------------------------------------- +class cRecMenuConfirmSeriesTimer: public cRecMenu { +public: + cRecMenuConfirmSeriesTimer(cTimer *seriesTimer) { + SetWidthPercent(50); + cString message = tr("Series Timer created"); + cString days = cTimer::PrintDay(seriesTimer->Day(), seriesTimer->WeekDays(), true); + cString infoText = cString::sprintf("%s\n%s, %s: %s, %s: %s", *message, *days, tr("Start"), *TimeString(seriesTimer->StartTime()), tr("Stop"), *TimeString(seriesTimer->StopTime())); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + AddMenuItem(new cRecMenuItemButton(tr("OK"), rmsClose, true, true)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuConfirmSeriesTimer(void) {}; +}; + +// --- cRecMenuSearchTimer --------------------------------------------------------- +class cRecMenuSearchTimer: public cRecMenu { +private: + char initialText[TEXTINPUTLENGTH]; +public: + cRecMenuSearchTimer(const cEvent *event) { + SetWidthPercent(70); + cString message = tr("Configure Search Timer based on"); + cString infoText = cString::sprintf("%s:\n\"%s\"", *message, event->Title()); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + strn0cpy(initialText, event->Title(), sizeof(initialText)); + AddMenuItem(new cRecMenuItemText(tr("Search Expression:"), initialText, sizeof(initialText), false)); + AddMenuItem(new cRecMenuItemButtonYesNo(tr("Continue"), tr("Cancel"), rmsSearchTimerOptions, rmsClose, true)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuSearchTimer(void) {}; +}; + +// --- cRecMenuSearchTimerTemplates --------------------------------------------------------- +class cRecMenuSearchTimerTemplates: public cRecMenu { +private: + int numTemplates; + std::vector templates; +public: + cRecMenuSearchTimerTemplates(cString searchString, + std::vector templates) { + this->templates = templates; + SetWidthPercent(70); + cString message = tr("Configure Search Timer for Search String"); + cString infoText = cString::sprintf("%s:\n%s", *message, *searchString); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + SetHeader(infoItem); + + AddMenuItemScroll(new cRecMenuItemButton(tr("Manually configure Options"), rmsSearchTimerOptionsManually, true)); + + numTemplates = templates.size(); + for (int i=0; i 0) && (number < numTemplates + 1)) { + cString buttonText = cString::sprintf("%s \"%s\"", tr("Use Template"), templates[number-1].name.c_str()); + cRecMenuItem *templ = new cRecMenuItemButton(*buttonText, rmsSearchTimerUseTemplate, false); + return templ; + } + return NULL; + }; + + + int GetTotalNumMenuItems(void) { + return numTemplates + 1; + }; + + + virtual ~cRecMenuSearchTimerTemplates(void) {}; +}; + +// --- cRecMenuSearchTimerTemplatesCreate --------------------------------------------------------- +class cRecMenuSearchTimerTemplatesCreate: public cRecMenu { +private: +public: + cRecMenuSearchTimerTemplatesCreate(cString searchString, cString tmplName) { + SetWidthPercent(70); + + cString message1 = tr("Creating Search Timer"); + cString message2 = tr("Search Term"); + cString message3 = tr("Using Template"); + + cString infoText = cString::sprintf("%s\n%s: \"%s\"\n%s \"%s\"", *message1, *message2, *searchString, *message3, *tmplName); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + + AddMenuItem(new cRecMenuItemButton(tr("Display Results for Search Timer"), rmsSearchTimerTestTemplate, true)); + AddMenuItem(new cRecMenuItemButtonYesNo(tr("Create Search Timer"), tr("Use other Template"), rmsSearchTimerCreateTemplate, rmsSearchTimerOptionsReload, false)); + + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuSearchTimerTemplatesCreate(void) {}; +}; + +// --- cRecMenuSearchTimerOptions --------------------------------------------------------- +class cRecMenuSearchTimerOptions: public cRecMenu { +private: + const char * searchModes[5]; + cString searchString; +public: + cRecMenuSearchTimerOptions(cString searchString) { + this->searchString = searchString; + CreateMenuItems(); + }; + + void CreateMenuItems(void) { + bool showChannelSelectors = false; + bool showTimeSelectors = false; + if (menuItems.Count() > 0) { + showChannelSelectors = GetBoolValue(4); + if (GetIntValue(5)>-1) { + showTimeSelectors = GetBoolValue(7); + } else { + showTimeSelectors = GetBoolValue(5); + } + osdManager.releasePixmap(pixmap); + delete header; + menuItems.Clear(); + } + SetWidthPercent(70); + cString message = tr("Configure Search Timer Options for Search String"); + cString infoText = cString::sprintf("%s:\n%s", *message, *searchString); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + SetHeader(infoItem); + + searchModes[0] = tr("whole term must appear"); + searchModes[1] = tr("all terms must exist"); + searchModes[2] = tr("one term must exist"); + searchModes[3] = tr("exact match"); + searchModes[4] = tr("regular expression"); + AddMenuItem(new cRecMenuItemSelect(tr("Search Mode"), searchModes, 0, 5, false)); + AddMenuItem(new cRecMenuItemBool(tr("Use Title"), true, false, false)); + AddMenuItem(new cRecMenuItemBool(tr("Use Subtitle"), true, false, false)); + AddMenuItem(new cRecMenuItemBool(tr("Use Description"), false, false, false)); + + AddMenuItem(new cRecMenuItemBool(tr("Limit Channels"), showChannelSelectors, true, false)); + if (showChannelSelectors) { + cChannel *startChannel = NULL; + for (startChannel = Channels.First(); startChannel; startChannel = Channels.Next(startChannel)) { + if (!startChannel->GroupSep()) + break; + } + AddMenuItem(new cRecMenuItemChannelChooser(tr("Start Channel"), startChannel, false)); + AddMenuItem(new cRecMenuItemChannelChooser(tr("Stop Channel"), startChannel, false)); + } + + AddMenuItem(new cRecMenuItemBool(tr("Use Time"), showTimeSelectors, true, false)); + if (showTimeSelectors) { + AddMenuItem(new cRecMenuItemTime(tr("Start after"), 0, false)); + AddMenuItem(new cRecMenuItemTime(tr("Start before"), 2359, false)); + } + + AddMenuItem(new cRecMenuItemButton(tr("Display Results for Search Timer"), rmsSearchTimerTestManually, true)); + AddMenuItem(new cRecMenuItemButtonYesNo(tr("Create Search Timer"), tr("Cancel"), rmsSearchTimerCreateManually, rmsClose, false)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuSearchTimerOptions(void) {}; +}; + +// --- cRecMenuSearchTimerResults --------------------------------------------------------- +class cRecMenuSearchTimerResults: public cRecMenu { +private: + const cEvent **searchResults; + int numResults; +public: + cRecMenuSearchTimerResults(cString searchString, const cEvent **searchResults, int numResults, std::string templateName) { + this->searchResults = searchResults; + SetWidthPercent(70); + cString message1 = tr("search results for Search Timer"); + cString message2 = tr("search result for Search Timer"); + this->numResults = numResults; + cString message3 = tr("Using Template"); + cString infoText; + if (templateName.size() > 0) { + infoText = cString::sprintf("%d %s:\n\"%s\"\n%s \"%s\"", numResults, (numResults>1)?(*message1):(*message2), *searchString, *message3, templateName.c_str()); + } else { + infoText = cString::sprintf("%d %s:\n\"%s\"", numResults, (numResults>1)?(*message1):(*message2), *searchString); + } + cRecMenuItem *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + SetHeader(infoItem); + + cRecMenuItem *buttons = new cRecMenuItemButton(tr("Close"), rmsClose, false); + SetFooter(buttons); + if (searchResults && (numResults > 0)) { + for (int i=0; i= 0) && (number < numResults)) { + cRecMenuItem *result = new cRecMenuItemEvent(searchResults[number], rmsSearchShowInfo, rmsDisabled, false); + return result; + } + return NULL; + }; + + int GetTotalNumMenuItems(void) { + return numResults; + }; + + virtual ~cRecMenuSearchTimerResults(void) { + delete[] searchResults; + }; +}; + +// --- cRecMenuSearchTimerNothingFound --------------------------------------------------------- +class cRecMenuSearchTimerNothingFound: public cRecMenu { +public: + cRecMenuSearchTimerNothingFound(cString searchString, std::string templateName) { + SetWidthPercent(50); + cString message = tr("Nothing found for Search String"); + cString message2 = tr("Using Template"); + cString text; + if (templateName.size() > 0) { + text = cString::sprintf("%s\n\"%s\"\n%s \"%s\"", + *message, + *searchString, + *message2, + templateName.c_str()); + } else { + text = cString::sprintf("%s\n\"%s\"", + *message, + *searchString); + } + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + AddMenuItem(new cRecMenuItemButton(tr("OK"), rmsSearchTimerNothingFoundConfirm, true, true)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuSearchTimerNothingFound(void) {}; +}; + +// --- cRecMenuSearchTimerCreateConfirm --------------------------------------------------------- +class cRecMenuSearchTimerCreateConfirm: public cRecMenu { +private: +public: + cRecMenuSearchTimerCreateConfirm(bool success) { + SetWidthPercent(50); + + cString message1a = tr("Search Timer sucessfully created."); + cString message1b = tr ("Search Timer update initialised"); + cString message1 = cString::sprintf("%s\n%s", *message1a, *message1b); + cString message2 = tr("Search Timer NOT sucessfully created"); + cString infoText = success?message1:message2; + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + + AddMenuItem(new cRecMenuItemButton(tr("OK"), rmsClose, true)); + + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuSearchTimerCreateConfirm(void) {}; +}; + +// --- cRecMenuSwitchTimer --------------------------------------------------------- +class cRecMenuSwitchTimer: public cRecMenu { +private: + const char *switchModes[3]; +public: + cRecMenuSwitchTimer(void) { + SetWidthPercent(60); + + cString infoText = tr("Configure Options for Switchtimer"); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + + AddMenuItem(new cRecMenuItemInt(tr("Minutes before switching"), 2, 0, 10, false)); + switchModes[0] = tr("switch"); + switchModes[1] = tr("announce only"); + switchModes[2] = tr("ask for switch"); + AddMenuItem(new cRecMenuItemSelect(tr("Switch Mode"), switchModes, 0, 3, false)); + + AddMenuItem(new cRecMenuItemButtonYesNo(tr("Create"), tr("Cancel"), rmsSwitchTimerCreate, rmsClose, true)); + + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuSwitchTimer(void) {}; +}; + +// --- cRecMenuSwitchTimerConfirm --------------------------------------------------------- +class cRecMenuSwitchTimerConfirm: public cRecMenu { +private: +public: + cRecMenuSwitchTimerConfirm(bool success) { + SetWidthPercent(50); + + cString message1 = tr("Switch Timer sucessfully created"); + cString message2 = tr("Switch Timer NOT sucessfully created"); + cString infoText = success?message1:message2; + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + + AddMenuItem(new cRecMenuItemButton(tr("OK"), rmsClose, true)); + + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuSwitchTimerConfirm(void) {}; +}; + +// --- cRecMenuSwitchTimerDelete --------------------------------------------------------- +class cRecMenuSwitchTimerDelete: public cRecMenu { +private: +public: + cRecMenuSwitchTimerDelete(void) { + SetWidthPercent(50); + + cString infoText = tr("Switch Timer deleted"); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + + AddMenuItem(new cRecMenuItemButton(tr("OK"), rmsClose, true)); + + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuSwitchTimerDelete(void) {}; +}; + + +// --- cRecMenuSearch --------------------------------------------------------- +class cRecMenuSearch: public cRecMenu { +private: + char initialText[TEXTINPUTLENGTH]; + const char * searchModes[5]; +public: + cRecMenuSearch(const cEvent *event) { + SetWidthPercent(60); + cString infoText = tr("Search"); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + strn0cpy(initialText, event->Title(), sizeof(initialText)); + AddMenuItem(new cRecMenuItemText(tr("Search Expression:"), initialText, sizeof(initialText), false)); + AddMenuItem(new cRecMenuItemButton(tr("Show Search Options"), rmsSearchWithOptions, false)); + AddMenuItem(new cRecMenuItemButtonYesNo(tr("Perform Search"), tr("Cancel"), rmsSearchPerform, rmsClose, true)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + cRecMenuSearch(const cEvent *event, const char *searchString) { + SetWidthPercent(60); + cString infoText = tr("Search"); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + strn0cpy(initialText, searchString, sizeof(initialText)); + AddMenuItem(new cRecMenuItemText(tr("Search Expression:"), initialText, sizeof(initialText), false)); + searchModes[0] = tr("whole term must appear"); + searchModes[1] = tr("all terms must exist"); + searchModes[2] = tr("one term must exist"); + searchModes[3] = tr("exact match"); + searchModes[4] = tr("regular expression"); + AddMenuItem(new cRecMenuItemSelect(tr("Search Mode"), searchModes, 0, 5, false)); + AddMenuItem(new cRecMenuItemChannelChooser(tr("Channel to Search"), NULL, false)); + AddMenuItem(new cRecMenuItemBool(tr("Search in title"), true, false, false)); + AddMenuItem(new cRecMenuItemBool(tr("Search in Subtitle"), true, false, false)); + AddMenuItem(new cRecMenuItemBool(tr("Search in Description"), false, false, false)); + + AddMenuItem(new cRecMenuItemButtonYesNo(tr("Perform Search"), tr("Cancel"), rmsSearchPerform, rmsClose, true)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + virtual ~cRecMenuSearch(void) {}; +}; + +// --- cRecMenuSearchResults --------------------------------------------------------- +class cRecMenuSearchResults: public cRecMenu { +private: + const cEvent **searchResults; + int numResults; +public: + cRecMenuSearchResults(cString searchString, const cEvent **searchResults, int numResults) { + this->searchResults = searchResults; + SetWidthPercent(70); + this->numResults = numResults; + cString message1 = tr("search results for"); + cString message2 = tr("search result for"); + cString infoText = cString::sprintf("%d %s:\n\"%s\"", numResults, (numResults>1)?(*message1):(*message2), *searchString); + cRecMenuItem *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + SetHeader(infoItem); + + cRecMenuItem *buttons = new cRecMenuItemButtonYesNo(tr("Adapt Search"), tr("Close"), rmsSearch, rmsClose, false); + SetFooter(buttons); + if (searchResults && (numResults > 0)) { + for (int i=0; i= 0) && (number < numResults)) { + cRecMenuItem *result = new cRecMenuItemEvent(searchResults[number], rmsSearchShowInfo, rmsSearchRecord, false); + return result; + } + return NULL; + }; + + int GetTotalNumMenuItems(void) { + return numResults; + }; + + virtual ~cRecMenuSearchResults(void) { + delete[] searchResults; + }; +}; + +// --- cRecMenuSearchConfirmTimer --------------------------------------------------------- +class cRecMenuSearchConfirmTimer: public cRecMenu { +public: + cRecMenuSearchConfirmTimer(const cEvent *event) { + SetWidthPercent(50); + cString channelName = Channels.GetByChannelID(event->ChannelID())->Name(); + cString message = tr("Timer created"); + cString text = cString::sprintf("%s\n%s\n%s %s - %s\n%s", + *message, + *channelName, + *event->GetDateString(), + *event->GetTimeString(), + *event->GetEndTimeString(), + event->Title() + ); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + AddMenuItem(new cRecMenuItemButton(tr("OK"), rmsSearchRecordConfirm, true, true)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuSearchConfirmTimer(void) {}; +}; + +// --- cRecMenuSearchNothingFound --------------------------------------------------------- +class cRecMenuSearchNothingFound: public cRecMenu { +public: + cRecMenuSearchNothingFound(cString searchString) { + SetWidthPercent(50); + cString message = tr("Nothing found for Search String"); + cString text = cString::sprintf("%s\n\"%s\"", + *message, + *searchString); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + AddMenuItem(new cRecMenuItemButton(tr("OK"), rmsSearchNothingFoundConfirm, true, true)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuSearchNothingFound(void) {}; +}; + + + +// --- cRecMenuRecordingSearch --------------------------------------------------------- +class cRecMenuRecordingSearch: public cRecMenu { +private: + char initialText[TEXTINPUTLENGTH]; +public: + cRecMenuRecordingSearch(const cEvent *event) { + SetWidthPercent(60); + cString infoText = tr("Search in Recordings"); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + strn0cpy(initialText, event->Title(), sizeof(initialText)); + AddMenuItem(new cRecMenuItemText(tr("Search Expression:"), initialText, sizeof(initialText), false)); + AddMenuItem(new cRecMenuItemButtonYesNo(tr("Perform Search"), tr("Cancel"), rmsRecordingSearchResult, rmsClose, true)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + virtual ~cRecMenuRecordingSearch(void) {}; +}; + +// --- cRecMenuRecordingSearchResults --------------------------------------------------------- + +class cRecMenuRecordingSearchResults: public cRecMenu { +private: + cRecording **searchResults; + int numResults; +public: + cRecMenuRecordingSearchResults(cString searchString, cRecording **searchResults, int numResults) { + this->searchResults = searchResults; + SetWidthPercent(80); + cString message1 = tr("Found"); + cString message2 = tr("recording"); + cString message3 = tr("recordings"); + cString message4 = tr("for"); + this->numResults = numResults; + cString infoText = cString::sprintf("%s %d %s %s:\n\"%s\"", *message1, numResults, (numResults>1)?(*message3):(*message2), *message4, *searchString); + cRecMenuItem *infoItem = new cRecMenuItemInfo(*infoText); + infoItem->CalculateHeight(width - 2 * border); + SetHeader(infoItem); + + cRecMenuItem *buttons = new cRecMenuItemButtonYesNo(tr("Adapt Search"), tr("Close"), rmsRecordingSearch, rmsClose, false); + SetFooter(buttons); + if (searchResults && (numResults > 0)) { + for (int i=0; i= 0) && (number < numResults)) { + cRecMenuItem *result = new cRecMenuItemRecording(searchResults[number], false); + return result; + } + return NULL; + }; + + int GetTotalNumMenuItems(void) { + return numResults; + }; + + virtual ~cRecMenuRecordingSearchResults(void) { + delete[] searchResults; + }; +}; + +// --- cRecMenuRecordingSearchNotFound --------------------------------------------------------- +class cRecMenuRecordingSearchNotFound: public cRecMenu { +public: + cRecMenuRecordingSearchNotFound(cString searchString) { + SetWidthPercent(50); + cString message = tr("No recordings found for"); + cString text = cString::sprintf("%s\n\"%s\"", + *message, + *searchString); + cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text); + infoItem->CalculateHeight(width - 2 * border); + AddMenuItem(infoItem); + AddMenuItem(new cRecMenuItemButton(tr("OK"), rmsClose, true, true)); + CalculateHeight(); + CreatePixmap(); + Arrange(); + }; + + virtual ~cRecMenuRecordingSearchNotFound(void) {}; +}; \ No newline at end of file