From ac0e6dbc8d1ea8fd24712dd03fea154cea6a7135 Mon Sep 17 00:00:00 2001 From: louis Date: Sat, 6 Feb 2016 09:55:15 +0100 Subject: fixed line breaks --- coreengine/viewdisplaymenu.c | 3414 +++++++++++++++++++++--------------------- 1 file changed, 1707 insertions(+), 1707 deletions(-) (limited to 'coreengine/viewdisplaymenu.c') diff --git a/coreengine/viewdisplaymenu.c b/coreengine/viewdisplaymenu.c index 07933b6..82ebf5d 100644 --- a/coreengine/viewdisplaymenu.c +++ b/coreengine/viewdisplaymenu.c @@ -1,1707 +1,1707 @@ -#include "viewdisplaymenu.h" -#include "../config.h" - -/************************************************************************************ -* cViewMenu -************************************************************************************/ -cViewMenu::cViewMenu(void) { - menuDefault = NULL; - menuMain = NULL; - menuSetup = NULL; - menuSchedules = NULL; - menuChannels = NULL; - menuTimers = NULL; - menuRecordings = NULL; - menuDetailedEpg = NULL; - menuDetailedRec = NULL; - menuDetailedText = NULL; - ClearVariables(); - viewId = eViewType::DisplayMenu; - viewName = strdup("displaymenu"); - numViewElements = (int)eVeDisplayMenu::count; - viewElements = new cViewElement*[numViewElements]; - for (int i=0; i < numViewElements; i++) { - viewElements[i] = NULL; - } - viewElementsHorizontal = new cViewElement*[numViewElements]; - for (int i=0; i < numViewElements; i++) { - viewElementsHorizontal[i] = NULL; - } - SetViewElements(); - int numPluginMenus = plgManager->GetNumPluginMenus(); - numSubviews = (int)eSvDisplayMenu::count + numPluginMenus; - subViews = new cSubView*[numSubviews]; - for (int i=0; i < numSubviews; i++) { - subViews[i] = NULL; - } - SetSubViews(); - menuCat = mcUnknown; - plugName = NULL; -} - -cViewMenu::~cViewMenu() { - for (int i=0; i< numSubviews; i++) - delete subViews[i]; - delete[] subViews; -} - -void cViewMenu::SetGlobals(cGlobals *globals) { - cView::SetGlobals(globals); - for (int i=0; i < numSubviews; ++i) { - if (subViews[i]) { - subViews[i]->SetGlobals(globals); - } - } -} - -void cViewMenu::PreCache(void) { - cView::PreCache(); - for (int i=0; i < numSubviews; i++) { - if (subViews[i]) { - subViews[i]->SetContainer(0, 0, attribs->Width(), attribs->Height()); - subViews[i]->PreCache(); - //setting default viewelements for subviews - for (int ve = (int)eVeDisplayMenu::background; ve < (int)eVeDisplayMenu::count; ve++) { - if (viewElements[ve] && !subViews[i]->ViewElementSet(ve)) { - subViews[i]->SetViewElement((eVeDisplayMenu)ve, viewElements[ve]); - } - } - for (int ve = (int)eVeDisplayMenu::background; ve < (int)eVeDisplayMenu::count; ve++) { - if (viewElementsHorizontal[ve] && !subViews[i]->ViewElementHorizontalSet(ve)) { - subViews[i]->SetViewElementHorizontal((eVeDisplayMenu)ve, viewElementsHorizontal[ve]); - } - } - } - } -} - -void cViewMenu::SetViewElementObjects(void) { - //setting subviews - for (int i=0; i < numSubviews; i++) { - if (!subViews[i]) - continue; - if (i == (int)eSvDisplayMenu::menudefault) - menuDefault = dynamic_cast(subViews[i]); - else if (i == (int)eSvDisplayMenu::main) - menuMain = dynamic_cast(subViews[i]); - else if (i == (int)eSvDisplayMenu::setup) - menuSetup = dynamic_cast(subViews[i]); - else if (i == (int)eSvDisplayMenu::schedules) - menuSchedules = dynamic_cast(subViews[i]); - else if (i == (int)eSvDisplayMenu::channels) - menuChannels = dynamic_cast(subViews[i]); - else if (i == (int)eSvDisplayMenu::timers) - menuTimers = dynamic_cast(subViews[i]); - else if (i == (int)eSvDisplayMenu::recordings) - menuRecordings = dynamic_cast(subViews[i]); - else if (i == (int)eSvDisplayMenu::detailepg) - menuDetailedEpg = dynamic_cast(subViews[i]); - else if (i == (int)eSvDisplayMenu::detailrec) - menuDetailedRec = dynamic_cast(subViews[i]); - else if (i == (int)eSvDisplayMenu::detailtext) - menuDetailedText = dynamic_cast(subViews[i]); - } -} - -void cViewMenu::SetViewElements(void) { - viewElementNames.insert(pair("background", (int)eVeDisplayMenu::background)); - viewElementNames.insert(pair("header", (int)eVeDisplayMenu::header)); - viewElementNames.insert(pair("datetime", (int)eVeDisplayMenu::datetime)); - viewElementNames.insert(pair("time", (int)eVeDisplayMenu::time)); - viewElementNames.insert(pair("colorbuttons", (int)eVeDisplayMenu::colorbuttons)); - viewElementNames.insert(pair("message", (int)eVeDisplayMenu::message)); - viewElementNames.insert(pair("scrollbar", (int)eVeDisplayMenu::scrollbar)); - viewElementNames.insert(pair("sortmode", (int)eVeDisplayMenu::sortmode)); -} - -void cViewMenu::SetSubViews(void) { - //adding VDR submenus - subviewNames.insert(pair("menudefault", (int)eSvDisplayMenu::menudefault)); - subviewNames.insert(pair("menumain", (int)eSvDisplayMenu::main)); - subviewNames.insert(pair("menusetup", (int)eSvDisplayMenu::setup)); - subviewNames.insert(pair("menuschedules", (int)eSvDisplayMenu::schedules)); - subviewNames.insert(pair("menuchannels", (int)eSvDisplayMenu::channels)); - subviewNames.insert(pair("menutimers", (int)eSvDisplayMenu::timers)); - subviewNames.insert(pair("menurecordings", (int)eSvDisplayMenu::recordings)); - subviewNames.insert(pair("menudetailedepg", (int)eSvDisplayMenu::detailepg)); - subviewNames.insert(pair("menudetailedrecording", (int)eSvDisplayMenu::detailrec)); - subviewNames.insert(pair("menudetailedtext", (int)eSvDisplayMenu::detailtext)); - //adding additional plugin subviews - int subViewNumber = (int)eSvDisplayMenu::count; - map *plugMenus = NULL; - string plugName = ""; - int plugId = -1; - plgManager->InitPluginMenuIterator(); - while ( plugMenus = plgManager->GetPluginMenus(plugName, plugId) ) { - for (map ::iterator it = plugMenus->begin(); it != plugMenus->end(); it++) { - int menuNumber = it->first; - cString menuName = cString::sprintf("menuplugin-%s-%d", plugName.c_str(), menuNumber); - subviewNames.insert(pair(*menuName, subViewNumber)); - plgManager->AddSubviewMapping(plugId, menuNumber, subViewNumber); - subViewNumber++; - } - } -} - -void cViewMenu::ClearVariables(void) { - cView::ClearVariables(); - menuChange = true; - listChange = true; - detailViewInit = false; - menuCat = mcUnknown; - pluginIdSet = false; - plugId = -1; - plugMenuId = -1; - activeSubview = NULL; - activeSubviewLast = NULL; -} - -int cViewMenu::SubviewId(const char *name) { - map::iterator hit = subviewNames.find(name); - if (hit != subviewNames.end()) - return (int)hit->second; - return ATTR_UNKNOWN; -} - -bool cViewMenu::ValidSubView(const char *subView) { - if (SubviewId(subView) != ATTR_UNKNOWN) - return true; - return false; -} - -cSubView *cViewMenu::CreateSubview(const char *name) { - cSubView *sv = NULL; - if (!strcmp(name, "menudefault")) - sv = new cViewMenuDefault(name); - else if (!strcmp(name, "menumain")) - sv = new cViewMenuMain(name); - else if (!strcmp(name, "menusetup")) - sv = new cViewMenuSetup(name); - else if (!strcmp(name, "menuschedules")) - sv = new cViewMenuSchedules(name); - else if (!strcmp(name, "menuchannels")) - sv = new cViewMenuChannels(name); - else if (!strcmp(name, "menutimers")) - sv = new cViewMenuTimers(name); - else if (!strcmp(name, "menurecordings")) - sv = new cViewMenuRecordings(name); - else if (!strcmp(name, "menudetailedepg")) - sv = new cViewMenuDetail(name); - else if (!strcmp(name, "menudetailedrecording")) - sv = new cViewMenuDetail(name); - else if (!strcmp(name, "menudetailedtext")) - sv = new cViewMenuDetail(name); - return sv; -} - -cSubView *cViewMenu::CreatePluginview(const char *plugname, int plugId, int menuNumber, int menuType) { - cString menuName = cString::sprintf("menuplugin-%s-%d", plugname, menuNumber); - cSubView *pv = NULL; - if (menuType == skindesignerapi::mtList) - pv = new cViewMenuPlugin(*menuName); - else if (menuType == skindesignerapi::mtText) - pv = new cViewMenuDetail(*menuName); - if (pv) { - pv->SetPlugId(plugId); - pv->SetPlugMenuId(menuNumber); - } - return pv; -} - - -void cViewMenu::AddPluginview(cSubView *plugView) { - int id = SubviewId(plugView->GetViewName()); - if (id == ATTR_UNKNOWN) - return; - subViews[id] = plugView; -} - -void cViewMenu::AddSubview(const char *sSubView, cSubView *subView) { - int id = SubviewId(sSubView); - if (id == ATTR_UNKNOWN) - return; - subViews[id] = subView; -} - -/* eMenuCategory: - -1 mcUndefined, - 0 mcUnknown, - 1 mcMain, - 2 mcSchedule, - 3 mcScheduleNow, - 4 mcScheduleNext, - 5 mcChannel, - 6 mcChannelEdit, - 7 mcTimer, - 8 mcTimerEdit, - 9 mcRecording, - 10 mcRecordingInfo, - 11 mcRecordingEdit, - 12 mcPlugin, - 13 mcPluginSetup, - 14 mcSetup, - 15 mcSetupOsd, - 16 mcSetupEpg, - 17 mcSetupDvb, - 18 mcSetupLnb, - 19 mcSetupCam, - 20 mcSetupRecord, - 21 mcSetupReplay, - 22 mcSetupMisc, - 23 mcSetupPlugins, - 24 mcCommand, - 25 mcEvent, - 26 mcText, - 27 mcFolder, - 28 mcCam -*/ -void cViewMenu::SetSubView(eMenuCategory MenuCat) { - //menuCat --> old menucat - //MenuCat --> new menucat - if (menuCat == mcMain) { - cViewMenuMain *menuMain = dynamic_cast(activeSubview); - if (menuMain) { - plugName = menuMain->GetPlugin(); - } - } - //first check plugin menu - if (MenuCat == mcPlugin) { - bool plugMenuFound = SetPluginSubView(MenuCat); - if (plugMenuFound) { - menuCat = MenuCat; - return; - } - } - //then check regular menus - bool catChange = false; - if (menuCat != MenuCat) { - catChange = true; - } else { - return; - } - cSubView *newSubview = NULL; - menuCat = MenuCat; - switch (MenuCat) { - case mcMain: - newSubview = subViews[(int)eSvDisplayMenu::main]; - break; - case mcSchedule: - case mcScheduleNow: - case mcScheduleNext: - newSubview = subViews[(int)eSvDisplayMenu::schedules]; - break; - case mcChannel: - newSubview = subViews[(int)eSvDisplayMenu::channels]; - break; - case mcTimer: - newSubview = subViews[(int)eSvDisplayMenu::timers]; - break; - case mcRecording: - newSubview = subViews[(int)eSvDisplayMenu::recordings]; - break; - case mcSetup: - newSubview = subViews[(int)eSvDisplayMenu::setup]; - break; - case mcEvent: - newSubview = subViews[(int)eSvDisplayMenu::detailepg]; - break; - case mcRecordingInfo: - newSubview = subViews[(int)eSvDisplayMenu::detailrec]; - break; - case mcText: - newSubview = subViews[(int)eSvDisplayMenu::detailtext]; - break; - default: - newSubview = subViews[(int)eSvDisplayMenu::menudefault]; - //setting plugin name for detecting plugins in default menus - cViewMenuDefault *menuDefault = dynamic_cast(newSubview); - if (menuDefault) { - menuDefault->SetPlugin(plugName); - } - break; - }; - if (catChange) { - menuChange = true; - activeSubview->Clear(); - activeSubviewLast = activeSubview; - activeSubview = newSubview; - if (!activeSubview) - activeSubview = subViews[(int)eSvDisplayMenu::menudefault]; - activeSubview->SetMenuCategory(MenuCat); - } -} - -bool cViewMenu::SetPluginSubView(eMenuCategory menuCat) { - if (!pluginIdSet) - return false; - cSubView *newSubview = NULL; - if (plugId >= 0 && plugMenuId >= 0) { - int subViewId = plgManager->GetSubviewId(plugId, plugMenuId); - if (subViewId >= 0 && subViews[subViewId]) { - newSubview = subViews[subViewId]; - menuChange = true; - activeSubview->Clear(); - activeSubviewLast = activeSubview; - activeSubview = newSubview; - activeSubview->SetMenuCategory(menuCat); - return true; - } - } - return false; -} - -void cViewMenu::WakeViewElements(void) { - cView::WakeViewElements(); - if (activeSubview) - activeSubview->WakeViewElements(); -} - - -void cViewMenu::SetSortMode(eMenuSortMode sortMode) { - if (activeSubview) - activeSubview->SetSortMode(sortMode); -} - -void cViewMenu::SetPluginMenu(int plugId, int plugMenuId) { - this->plugId = plugId; - this->plugMenuId = plugMenuId; - pluginIdSet = true; -} - -int cViewMenu::NumListItems(void) { - return activeSubview->NumListItems(); -} - -eMenuOrientation cViewMenu::MenuOrientation(void) { - return activeSubview->MenuOrientation(); -} - -const cFont *cViewMenu::GetTextAreaFont(void) { - return activeSubview->GetTextAreaFont(); -} - -int cViewMenu::GetTextAreaWidth(void) { - if (!menuDetailedText) - return 0; - return menuDetailedText->GetWidth(); -} - -int cViewMenu::GetListWidth(void) { - return activeSubview->GetListWidth(); -} - -void cViewMenu::SetTitleHeader(const char *title) { - activeSubview->SetTitle(title); -} - -void cViewMenu::SetMessage(eMessageType type, const char *text) { - activeSubview->SetMessage(type, text); -} - -void cViewMenu::SetChannelHeader(const cEvent *event) { - if (menuChange && menuCat == mcSchedule) { - const cChannel *channel = Channels.GetByChannelID(event->ChannelID()); - if (channel) - activeSubview->SetChannel(channel); - } -} - -void cViewMenu::SetMenuButtons(const char *red, const char *green, const char *yellow, const char *blue) { - activeSubview->SetMenuButtons(red, green, yellow, blue); -} - -void cViewMenu::SetScrollbar(int total, int offset) { - activeSubview->SetScrollbar(total, offset); -} - -void cViewMenu::SetTabs(int tab1, int tab2, int tab3, int tab4, int tab5) { - menuDefault->SetTabs(tab1, tab2, tab3, tab4, tab5); -} - -void cViewMenu::SetItem(const char *text, int index, bool current, bool selectable) { - if (menuCat == mcMain && menuMain) { - menuMain->SetItem(text, index, current, selectable); - } else if (menuCat == mcSetup && menuSetup) { - menuSetup->SetItem(text, index, current, selectable); - } else { - menuDefault->SetItem(text, index, current, selectable); - } - listChange = true; -} - -bool cViewMenu::SetItemEvent(const cEvent *event, int index, bool current, bool selectable, - const cChannel *channel, bool withDate, eTimerMatch timerMatch) { - if (!menuSchedules) - return false; - menuSchedules->SetItem(event, index, current, selectable, channel, withDate, timerMatch); - listChange = true; - return true; -} - -bool cViewMenu::SetItemTimer(const cTimer *timer, int index, bool current, bool selectable) { - if (!menuTimers) - return false; - menuTimers->SetItem(timer, index, current, selectable); - listChange = true; - return true; -} - -bool cViewMenu::SetItemChannel(const cChannel *channel, int index, bool current, bool selectable, bool withProvider) { - if (!menuChannels) - return false; - menuChannels->SetItem(channel, index, current, selectable, withProvider); - listChange = true; - return true; -} - -bool cViewMenu::SetItemRecording(const cRecording *recording, int index, bool current, bool selectable, int level, int total, int New) { - if (!menuRecordings) - return false; - menuRecordings->SetItem(recording, index, current, selectable, level, total, New); - listChange = true; - return true; -} - -bool cViewMenu::SetItemPlugin(skindesignerapi::cTokenContainer *tk, int index, bool current, bool selectable) { - cViewMenuPlugin *menuPlugin = dynamic_cast(activeSubview); - if (!menuPlugin) { - return false; - } - menuPlugin->SetItem(tk, index, current, selectable); - listChange = true; - return true; -} - -void cViewMenu::SetEvent(const cEvent *event) { - menuDetailedEpg->SetEvent(event); - detailViewInit = true; -} - -void cViewMenu::SetRecording(const cRecording *recording) { - menuDetailedRec->SetRecording(recording); - detailViewInit = true; -} - -void cViewMenu::SetText(const char *text) { - menuDetailedText->SetText(text); - detailViewInit = true; -} - -bool cViewMenu::SetPluginText(skindesignerapi::cTokenContainer *tk) { - cViewMenuDetail *menuPlugin = dynamic_cast(activeSubview); - if (!menuPlugin) { - return false; - } - menuPlugin->SetPluginText(tk); - detailViewInit = true; - return true; -} - -void cViewMenu::SetCurrentRecording(const char *currentRec) { - if (menuMain) { - menuMain->SetCurrentRecording(currentRec); } -} - -void cViewMenu::KeyDetailView(bool up, bool page) { - cViewMenuDetail *detailView = dynamic_cast(activeSubview); - if (!detailView) - return; - if (up && page) { - detailView->KeyLeft(); - } else if (!up && page) { - detailView->KeyRight(); - } else if (up && !page) { - detailView->KeyUp(); - } else if (!up && !page) { - detailView->KeyDown(); - } -} - -bool cViewMenu::Init(void) { - activeSubview = subViews[(int)eSvDisplayMenu::main]; - return cView::Init(); -} - -void cViewMenu::Close(void) { - delete fader; - fader = NULL; - if (FadeTime() > 0) { - fader = new cAnimation((cFadable*)this, false); - fader->Fade(); - delete fader; - fader = NULL; - } - for (int i=0; i < numSubviews; i++) { - if (subViews[i]) { - subViews[i]->Close(); - } - } - for (int i=0; i < numViewElements; i++) { - if (viewElements[i]) { - viewElements[i]->Close(); - } - if (viewElementsHorizontal[i]) { - viewElementsHorizontal[i]->Close(); - } - } - UnScaleTv(); - ClearVariables(); - sdOsd.DeleteOsd(); -} - -void cViewMenu::Clear(void) { - activeSubview->ClearViewList(); -} - -void cViewMenu::Flush(void) { - if (init) { - sdOsd.LockFlush(); - } - bool staticInitiated = false; - if (menuChange) { - newTvFrame = activeSubview->GetTvFrame(); - menuInit = true; - activeSubview->DrawStaticVEs(); - pluginIdSet = false; - menuChange = false; - staticInitiated = true; - } - if (listChange) { - activeSubview->DrawList(); - listChange = false; - } - if (detailViewInit) { - if (!staticInitiated) - activeSubview->DrawStaticVEs(); - activeSubview->DrawDetailedView(); - pluginIdSet = false; - detailViewInit = false; - } - activeSubview->DrawDynamicVEs(); - cView::Flush(); -} - -void cViewMenu::SetTransparency(int transparency, bool forceDetached) { - activeSubview->SetTransparency(transparency, forceDetached); - if (menuDetailedEpg) - menuDetailedEpg->SetTransparency(transparency); - if (menuDetailedRec) - menuDetailedRec->SetTransparency(transparency); - if (menuDetailedText) - menuDetailedText->SetTransparency(transparency); -} - -void cViewMenu::Debug(void) { - cView::Debug(); - for (int i=0; i < numSubviews; i++) { - if (subViews[i]) { - subViews[i]->Debug(); - } - } -} - -/*********************************************************** -* cSubView -***********************************************************/ -cSubView::cSubView(const char *name) { - menuCat = mcUnknown; - plugId = -1; - plugMenuId = -1; - this->viewName = strdup(name); - numViewElements = (int)eVeDisplayMenu::count; - viewElements = new cViewElement*[numViewElements]; - for (int i=0; i < numViewElements; i++) { - viewElements[i] = NULL; - } - viewElementsHorizontal = new cViewElement*[numViewElements]; - for (int i=0; i < numViewElements; i++) { - viewElementsHorizontal[i] = NULL; - } - background = NULL; - header = NULL; - datetime = NULL; - time = NULL; - message = NULL; - sortmode = NULL; - colorbuttons = NULL; - scrollbar = NULL; - viewList = NULL; - viewListVertical = NULL; - viewListHorizontal = NULL; - SetViewElements(); -} - -cSubView::~cSubView(void) { - delete viewListHorizontal; - delete viewListVertical; -} - -void cSubView::SetGlobals(cGlobals *globals) { - cView::SetGlobals(globals); - if (viewListVertical) - viewListVertical->SetGlobals(globals); - if (viewListHorizontal) - viewListHorizontal->SetGlobals(globals); -} - -void cSubView::PreCache(void) { - attribs->SetContainer(container.X(), container.Y(), container.Width(), container.Height()); - attribs->Cache(); - cView::PreCache(); - if (viewListVertical) { - viewListVertical->SetPlugId(plugId); - viewListVertical->SetPlugMenuId(plugMenuId); - viewListVertical->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height()); - viewListVertical->PreCache(); - } - if (viewListHorizontal) { - viewListHorizontal->SetPlugId(plugId); - viewListHorizontal->SetPlugMenuId(plugMenuId); - viewListHorizontal->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height()); - viewListHorizontal->PreCache(); - } -} - -bool cSubView::ViewElementSet(int ve) { - if (ve >= 0 && ve < (int)eVeDisplayMenu::count && viewElements[ve]) - return true; - return false; -} - -bool cSubView::ViewElementHorizontalSet(int ve) { - if (ve >= 0 && ve < (int)eVeDisplayMenu::count && viewElementsHorizontal[ve]) - return true; - return false; -} - -void cSubView::SetViewElement(eVeDisplayMenu ve, cViewElement *viewElement) { - switch (ve) { - case eVeDisplayMenu::background: - if (!background) - background = viewElement; - break; - case eVeDisplayMenu::header: - if (!header) - header = dynamic_cast(viewElement); - break; - case eVeDisplayMenu::datetime: - if (!datetime) - datetime = dynamic_cast(viewElement); - break; - case eVeDisplayMenu::time: - if (!time) - time = dynamic_cast(viewElement); - break; - case eVeDisplayMenu::message: - if (!message) - message = dynamic_cast(viewElement); - break; - case eVeDisplayMenu::sortmode: - if (!sortmode) - sortmode = dynamic_cast(viewElement); - break; - case eVeDisplayMenu::colorbuttons: - if (!colorbuttons) - colorbuttons = dynamic_cast(viewElement); - break; - case eVeDisplayMenu::scrollbar: - if (!scrollbar) - scrollbar = dynamic_cast(viewElement); - break; - default: - break; - }; -} - -void cSubView::SetViewElementHorizontal(eVeDisplayMenu ve, cViewElement *viewElement) { - eOrientation orientation = attribs->Orientation(); - if (orientation != eOrientation::horizontal) - return; - switch (ve) { - case eVeDisplayMenu::background: - if (!background) - background = viewElement; - break; - case eVeDisplayMenu::header: - if (!header) - header = dynamic_cast(viewElement); - break; - case eVeDisplayMenu::datetime: - if (!datetime) - datetime = dynamic_cast(viewElement); - break; - case eVeDisplayMenu::time: - if (!time) - time = dynamic_cast(viewElement); - break; - case eVeDisplayMenu::message: - if (!message) - message = dynamic_cast(viewElement); - break; - case eVeDisplayMenu::sortmode: - if (!sortmode) - sortmode = dynamic_cast(viewElement); - break; - case eVeDisplayMenu::colorbuttons: - if (!colorbuttons) - colorbuttons = dynamic_cast(viewElement); - break; - case eVeDisplayMenu::scrollbar: - if (!scrollbar) - scrollbar = dynamic_cast(viewElement); - break; - default: - break; - }; -} - -void cSubView::AddViewList(cViewList *viewList) { - eOrientation orientation = viewList->Orientation(); - if (orientation == eOrientation::vertical) { - viewListVertical = viewList; - } else if (orientation == eOrientation::horizontal) { - viewListHorizontal = viewList; - } else { - viewListVertical = viewList; - } -} - -int cSubView::NumListItems(void) { - if (viewList) - return viewList->NumItems(); - return 0; -} - -eMenuOrientation cSubView::MenuOrientation(void) { - eOrientation orientation = attribs->Orientation(); - if (orientation == eOrientation::horizontal) - return moHorizontal; - return moVertical; -} - -void cSubView::SetTitle(const char *title) { - if (header) { - header->SetTitle(title); - } -} - -void cSubView::SetChannel(const cChannel *channel) { - if (header) { - header->SetChannel(channel); - } -} - -void cSubView::SetMessage(eMessageType type, const char *text) { - if (!message) - return; - if (!text) { - message->Clear(); - message->Hide(); - return; - } - message->Set(type, text); - message->Show(); - if (message->Parse()) - message->Render(); -} - -void cSubView::SetMenuButtons(const char *red, const char *green, const char *yellow, const char *blue) { - if (!colorbuttons) - return; - colorbuttons->SetButtons(red, green, yellow, blue); - if (colorbuttons->Parse()) { - colorbuttons->Show(); - colorbuttons->Render(); - } -} - -void cSubView::SetScrollbar(int total, int offset) { - if (!scrollbar) - return; - scrollbar->SetList(total, offset, NumListItems()); - if (scrollbar->Parse()) { - scrollbar->Show(); - scrollbar->Render(); - } -} - -void cSubView::SetSortMode(eMenuSortMode sortMode) { - if (!sortmode) - return; - sortmode->Set(sortMode); - if (sortmode->Parse()) { - sortmode->Show(); - sortmode->Render(); - } -} - -void cSubView::Close(void) { - ClearVariables(); - for (int i=0; i < numViewElements; i++) { - if (!viewElements[i]) - continue; - viewElements[i]->Close(); - } - for (int i=0; i < numViewElements; i++) { - if (!viewElementsHorizontal[i]) - continue; - viewElementsHorizontal[i]->Close(); - } - if (viewList) - viewList->Close(); -} - -void cSubView::ClearViewList(void) { - if (viewList) - viewList->Clear(); -} - -void cSubView::WakeViewElements(void) { - for (int i = 0; i < numViewElements; i++) { - if (viewElements[i]) { - viewElements[i]->WakeUp(); - } - if (viewElementsHorizontal[i]) { - viewElementsHorizontal[i]->WakeUp(); - } - } -} - -void cSubView::Clear(void) { - if (background) background->Hide(); - if (datetime) datetime->Hide(); - if (time) time->Hide(); - if (header) header->Hide(); - if (colorbuttons) colorbuttons->Hide(); - if (scrollbar) scrollbar->Hide(); - if (sortmode) { - sortmode->Reset(); - sortmode->Hide(); - } - - if (viewList) viewList->Close(); -} - -void cSubView::DrawStaticVEs(void) { - if (background) { - background->Show(); - background->Render(); - } - if (header) { - header->Show(); - header->Set(menuCat); - if (header->Parse()) - header->Render(); - } -} - -void cSubView::DrawDynamicVEs(void) { - if (datetime) { - datetime->Show(); - if (datetime->Parse()) - datetime->Render(); - } - if (time) { - time->Show(); - if (time->Parse()) { - time->Render(); - } - } -} - -void cSubView::DrawList(void) { - if (viewList) { - viewList->Draw(menuCat); - } -} - -void cSubView::SetTransparency(int transparency, bool forceDetached) { - for (int i = 0; i < numViewElements; i++) { - if (viewElements[i] && (!viewElements[i]->Detached() || forceDetached)) { - viewElements[i]->SetTransparency(transparency); - } - if (viewElementsHorizontal[i] && (!viewElementsHorizontal[i]->Detached() || forceDetached)) { - viewElementsHorizontal[i]->SetTransparency(transparency); - } - } - if (viewList) - viewList->SetTransparency(transparency); -} -/*********************************************************** -* Protected Functions -***********************************************************/ -void cSubView::SetViewElementObjects(void) { - eOrientation orientation = attribs->Orientation(); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::background]) - background = viewElementsHorizontal[(int)eVeDisplayMenu::background]; - else if (viewElements[(int)eVeDisplayMenu::background]) - background = viewElements[(int)eVeDisplayMenu::background]; - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::header]) - header = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::header]); - else if (viewElements[(int)eVeDisplayMenu::header]) - header = dynamic_cast(viewElements[(int)eVeDisplayMenu::header]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::datetime]) - datetime = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::datetime]); - else if (viewElements[(int)eVeDisplayMenu::datetime]) - datetime = dynamic_cast(viewElements[(int)eVeDisplayMenu::datetime]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::time]) - time = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::time]); - else if (viewElements[(int)eVeDisplayMenu::time]) - time = dynamic_cast(viewElements[(int)eVeDisplayMenu::time]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::message]) - message = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::message]); - else if (viewElements[(int)eVeDisplayMenu::message]) - message = dynamic_cast(viewElements[(int)eVeDisplayMenu::message]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::sortmode]) - sortmode = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::sortmode]); - else if (viewElements[(int)eVeDisplayMenu::sortmode]) - sortmode = dynamic_cast(viewElements[(int)eVeDisplayMenu::sortmode]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::colorbuttons]) - colorbuttons = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::colorbuttons]); - else if (viewElements[(int)eVeDisplayMenu::colorbuttons]) - colorbuttons = dynamic_cast(viewElements[(int)eVeDisplayMenu::colorbuttons]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::scrollbar]) - scrollbar = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::scrollbar]); - else if (viewElements[(int)eVeDisplayMenu::scrollbar]) - scrollbar = dynamic_cast(viewElements[(int)eVeDisplayMenu::scrollbar]); - - - if (attribs->Orientation() == eOrientation::horizontal) - viewList = viewListHorizontal; - else - viewList = viewListVertical; -} - -void cSubView::SetViewElements(void) { - viewElementNames.insert(pair("background", (int)eVeDisplayMenu::background)); - viewElementNames.insert(pair("header", (int)eVeDisplayMenu::header)); - viewElementNames.insert(pair("datetime", (int)eVeDisplayMenu::datetime)); - viewElementNames.insert(pair("time", (int)eVeDisplayMenu::time)); - viewElementNames.insert(pair("colorbuttons", (int)eVeDisplayMenu::colorbuttons)); - viewElementNames.insert(pair("message", (int)eVeDisplayMenu::message)); - viewElementNames.insert(pair("scrollbar", (int)eVeDisplayMenu::scrollbar)); - viewElementNames.insert(pair("sortmode", (int)eVeDisplayMenu::sortmode)); -} - -/*********************************************************** -* cViewMenuDefault -***********************************************************/ -cViewMenuDefault::cViewMenuDefault(const char *name) : cSubView(name) { - listDefault = NULL; -} - -cViewMenuDefault::~cViewMenuDefault(void) { -} - -void cViewMenuDefault::SetViewElementObjects(void) { - cSubView::SetViewElementObjects(); - listDefault = dynamic_cast(viewList); -} - -void cViewMenuDefault::SetTabs(int tab1, int tab2, int tab3, int tab4, int tab5) { - if (listDefault) - listDefault->SetTabs(tab1, tab2, tab3, tab4, tab5); -} - -void cViewMenuDefault::SetPlugin(const char *plugName) { - listDefault->SetPlugin(plugName); -} - -void cViewMenuDefault::SetItem(const char *text, int index, bool current, bool selectable) { - listDefault->Set(text, index, current, selectable); -} - -const cFont *cViewMenuDefault::GetTextAreaFont(void) { - if (!listDefault) - return NULL; - return listDefault->GetListFont(); -} - -int cViewMenuDefault::GetListWidth(void) { - if (!listDefault) - return 0; - return listDefault->GetListWidth(); -} - -/************************************************************************************ -* cViewMenuMain -************************************************************************************/ -cViewMenuMain::cViewMenuMain(const char *name) : cSubView(name) { - for (int i=0; i < numViewElements; i++) { - delete viewElements[i]; - } - delete[] viewElements; - numViewElements = (int)eVeDisplayMenuMain::count; - viewElements = new cViewElement*[numViewElements]; - for (int i=0; i < numViewElements; i++) { - viewElements[i] = NULL; - } - delete[] viewElementsHorizontal; - viewElementsHorizontal = new cViewElement*[numViewElements]; - for (int i=0; i < numViewElements; i++) { - viewElementsHorizontal[i] = NULL; - } - listMain = NULL; - timers = NULL; - devices = NULL; - weather = NULL; - discusage = NULL; - load = NULL; - memory = NULL; - vdrstats = NULL; - temperatures = NULL; - currentSchedule = NULL; - lastRecordings = NULL; - customTokens = NULL; - lastDrawDynamic = 0; - SetViewElements(); -} - -cViewMenuMain::~cViewMenuMain() { -} - -void cViewMenuMain::ClearVariables(void) { - init = true; -} - -void cViewMenuMain::SetViewElements(void) { - viewElementNames.insert(pair("timers", (int)eVeDisplayMenuMain::timers)); - viewElementNames.insert(pair("devices", (int)eVeDisplayMenuMain::devices)); - viewElementNames.insert(pair("currentweather", (int)eVeDisplayMenuMain::currentweather)); - viewElementNames.insert(pair("currentschedule", (int)eVeDisplayMenuMain::currentschedule)); - viewElementNames.insert(pair("discusage", (int)eVeDisplayMenuMain::discusage)); - viewElementNames.insert(pair("systemload", (int)eVeDisplayMenuMain::systemload)); - viewElementNames.insert(pair("systemmemory", (int)eVeDisplayMenuMain::systemmemory)); - viewElementNames.insert(pair("vdrstatistics", (int)eVeDisplayMenuMain::vdrstatistics)); - viewElementNames.insert(pair("temperatures", (int)eVeDisplayMenuMain::temperatures)); - viewElementNames.insert(pair("lastrecordings", (int)eVeDisplayMenuMain::lastrecordings)); - viewElementNames.insert(pair("customtokens", (int)eVeDisplayMenuMain::customtokens)); -} - -void cViewMenuMain::SetViewElementObjects(void) { - cSubView::SetViewElementObjects(); - eOrientation orientation = attribs->Orientation(); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::timers]) - timers = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::timers]); - else if (viewElements[(int)eVeDisplayMenuMain::timers]) - timers = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::timers]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::devices]) - devices = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::devices]); - else if (viewElements[(int)eVeDisplayMenuMain::devices]) - devices = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::devices]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::currentweather]) - weather = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::currentweather]); - else if (viewElements[(int)eVeDisplayMenuMain::currentweather]) - weather = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::currentweather]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::currentschedule]) - currentSchedule = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::currentschedule]); - else if (viewElements[(int)eVeDisplayMenuMain::currentschedule]) - currentSchedule = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::currentschedule]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::discusage]) - discusage = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::discusage]); - else if (viewElements[(int)eVeDisplayMenuMain::discusage]) - discusage = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::discusage]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::systemload]) - load = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::systemload]); - else if (viewElements[(int)eVeDisplayMenuMain::systemload]) - load = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::systemload]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::systemmemory]) - memory = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::systemmemory]); - else if (viewElements[(int)eVeDisplayMenuMain::systemmemory]) - memory = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::systemmemory]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::vdrstatistics]) - vdrstats = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::vdrstatistics]); - else if (viewElements[(int)eVeDisplayMenuMain::vdrstatistics]) - vdrstats = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::vdrstatistics]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::temperatures]) - temperatures = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::temperatures]); - else if (viewElements[(int)eVeDisplayMenuMain::temperatures]) - temperatures = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::temperatures]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::lastrecordings]) - lastRecordings = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::lastrecordings]); - else if (viewElements[(int)eVeDisplayMenuMain::lastrecordings]) - lastRecordings = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::lastrecordings]); - - if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::customtokens]) - customTokens = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::customtokens]); - else if (viewElements[(int)eVeDisplayMenuMain::customtokens]) - customTokens = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::customtokens]); - - if (devices) devices->SetDetached(); - if (weather) weather->SetDetached(); - if (discusage) discusage->SetDetached(); - if (load) load->SetDetached(); - if (memory) memory->SetDetached(); - if (vdrstats) vdrstats->SetDetached(); - if (temperatures) temperatures->SetDetached(); - if (timers) timers->SetDetached(); - if (currentSchedule) currentSchedule->SetDetached(); - if (lastRecordings) lastRecordings->SetDetached(); - if (customTokens) customTokens->SetDetached(); - - listMain = dynamic_cast(viewList); -} - -void cViewMenuMain::Clear(void) { - cSubView::Clear(); - lastDrawDynamic = 0; - - if (devices) - devices->Hide(); - - if (weather) - weather->Hide(); - - if (discusage) - discusage->Hide(); - - if (load) { - load->Reset(); - load->Hide(); - } - - if (memory) { - memory->Reset(); - memory->Hide(); - } - - if (vdrstats) { - vdrstats->Reset(); - vdrstats->Hide(); - } - - if (temperatures) { - temperatures->Reset(); - temperatures->Hide(); - } - - if (timers) { - timers->Hide(); - } - - if (currentSchedule) { - currentSchedule->Hide(); - } - - if (lastRecordings) { - lastRecordings->Hide(); - } - - if (customTokens) { - customTokens->Reset(); - customTokens->Hide(); - } -} - -void cViewMenuMain::SetItem(const char *text, int index, bool current, bool selectable) { - listMain->Set(text, index, current, selectable); -} - -void cViewMenuMain::SetCurrentRecording(const char *currentRec) { - if (currentSchedule) - currentSchedule->SetRecording(currentRec); -} - -void cViewMenuMain::DrawStaticVEs(void) { - cSubView::DrawStaticVEs(); - if (weather) { - weather->Show(); - if (weather->Parse()) - weather->Render(); - } - if (discusage) { - discusage->Show(); - if (discusage->Parse()) - discusage->Render(); - } - if (timers) { - timers->Show(); - if (timers->Parse()) - timers->Render(); - } - if (currentSchedule) { - currentSchedule->Show(); - if (currentSchedule->Parse()) - currentSchedule->Render(); - } - if (lastRecordings) { - lastRecordings->Show(); - if (lastRecordings->Parse()) - lastRecordings->Render(); - } -} - -void cViewMenuMain::DrawDynamicVEs(void) { - cSubView::DrawDynamicVEs(); - //draw main menu dynamic elements - //only every 3 seconds - uint64_t now = cTimeMs::Now(); - if (now - lastDrawDynamic < 3000) - return; - else { - lastDrawDynamic = now; - } - - if (devices) { - devices->Show(); - if (devices->Parse()) - devices->Render(); - } - if (load) { - load->Show(); - if (load->Parse()) - load->Render(); - } - if (memory) { - memory->Show(); - if (memory->Parse()) - memory->Render(); - } - if (vdrstats) { - vdrstats->Show(); - if (vdrstats->Parse()) - vdrstats->Render(); - } - if (temperatures) { - temperatures->Show(); - if (temperatures->Parse()) - temperatures->Render(); - } - if (customTokens) { - customTokens->Show(); - if (customTokens->Parse()) - customTokens->Render(); - } -} - -const char *cViewMenuMain::GetPlugin(void) { - return listMain->GetPlugin(); -} - -/*********************************************************** -* cViewMenuSetup -***********************************************************/ -cViewMenuSetup::cViewMenuSetup(const char *name) : cSubView(name) { - listSetup = NULL; -} - -cViewMenuSetup::~cViewMenuSetup(void) { - -} - -void cViewMenuSetup::SetViewElementObjects(void) { - cSubView::SetViewElementObjects(); - listSetup = dynamic_cast(viewList); -} - -void cViewMenuSetup::SetItem(const char *text, int index, bool current, bool selectable) { - listSetup->Set(text, index, current, selectable); -} - -/*********************************************************** -* cViewMenuSchedules -***********************************************************/ -cViewMenuSchedules::cViewMenuSchedules(const char *name) : cSubView(name) { - listSchedules = NULL; -} - -cViewMenuSchedules::~cViewMenuSchedules(void) { -} - -void cViewMenuSchedules::SetViewElementObjects(void) { - cSubView::SetViewElementObjects(); - listSchedules = dynamic_cast(viewList); -} - -void cViewMenuSchedules::SetItem(const cEvent *event, int index, bool current, bool selectable, - const cChannel *channel, bool withDate, eTimerMatch timerMatch) { - - bool epgSearchFavMenu = (menuCat == mcSchedule && channel) ? true : false; - listSchedules->IsEpgSearchFav(epgSearchFavMenu); - if (header) header->IsEpgSearchFav(epgSearchFavMenu); - listSchedules->Set(event, index, current, selectable, channel, withDate, timerMatch); -} - -/*********************************************************** -* cViewMenuChannels -***********************************************************/ -cViewMenuChannels::cViewMenuChannels(const char *name) : cSubView(name) { - listChannels = NULL; -} - -cViewMenuChannels::~cViewMenuChannels(void) { -} - -void cViewMenuChannels::SetViewElementObjects(void) { - cSubView::SetViewElementObjects(); - listChannels = dynamic_cast(viewList); -} - -void cViewMenuChannels::SetItem(const cChannel *channel, int index, bool current, bool selectable, bool withProvider) { - listChannels->Set(channel, index, current, selectable, withProvider); -} - -/*********************************************************** -* cViewMenuTimers -***********************************************************/ -cViewMenuTimers::cViewMenuTimers(const char *name) : cSubView(name) { - listTimers = NULL; -} - -cViewMenuTimers::~cViewMenuTimers(void) { -} - -void cViewMenuTimers::SetViewElementObjects(void) { - cSubView::SetViewElementObjects(); - listTimers = dynamic_cast(viewList); -} - -void cViewMenuTimers::SetItem(const cTimer *timer, int index, bool current, bool selectable) { - listTimers->Set(timer, index, current, selectable); -} - -/*********************************************************** -* cViewMenuRecordings -***********************************************************/ -cViewMenuRecordings::cViewMenuRecordings(const char *name) : cSubView(name) { - listRecordings = NULL; -} - -cViewMenuRecordings::~cViewMenuRecordings(void) { -} - -void cViewMenuRecordings::SetViewElementObjects(void) { - cSubView::SetViewElementObjects(); - listRecordings = dynamic_cast(viewList); -} - -void cViewMenuRecordings::SetItem(const cRecording *recording, int index, bool current, bool selectable, int level, int total, int New) { - listRecordings->Set(recording, index, current, selectable, level, total, New); -} - -/*********************************************************** -* cViewMenuPlugin -***********************************************************/ -cViewMenuPlugin::cViewMenuPlugin(const char *name) : cSubView(name) { - listPlugin = NULL; -} - -cViewMenuPlugin::~cViewMenuPlugin(void) { -} - -void cViewMenuPlugin::SetViewElementObjects(void) { - cSubView::SetViewElementObjects(); - listPlugin = dynamic_cast(viewList); -} - -void cViewMenuPlugin::SetItem(skindesignerapi::cTokenContainer *tk, int index, bool current, bool selectable) { - listPlugin->Set(tk, index, current, selectable); -} - -/*********************************************************** -* cViewMenuDetail -***********************************************************/ -cViewMenuDetail::cViewMenuDetail(const char *name) : cSubView(name) { - firstTab = true; - for (int i=0; i < numViewElements; i++) { - delete viewElements[i]; - } - delete[] viewElements; - numViewElements = (int)eVeDisplayDetailedMenu::count; - viewElements = new cViewElement*[numViewElements]; - for (int i=0; i < numViewElements; i++) { - viewElements[i] = NULL; - } - delete[] viewElementsHorizontal; - viewElementsHorizontal = new cViewElement*[numViewElements]; - for (int i=0; i < numViewElements; i++) { - viewElementsHorizontal[i] = NULL; - } - SetViewElements(); - detailedheaderEpg = NULL; - detailedheaderRec = NULL; - detailedheaderPlug = NULL; - tablabels = NULL; - detailViewEpg = NULL; - detailViewRec = NULL; - detailViewText = NULL; - detailViewPlugin = NULL; - SetDetailedView(); -} - -cViewMenuDetail::~cViewMenuDetail(void) { -} - -void cViewMenuDetail::SetDetailedView(void) { - if (!strcmp(viewName, "menudetailedepg")) { - detailViewEpg = new cViewDetailEpg(); - detailView = detailViewEpg; - } else if (!strcmp(viewName, "menudetailedrecording")) { - detailViewRec = new cViewDetailRec(); - detailView = detailViewRec; - } else if (!strcmp(viewName, "menudetailedtext")) { - detailViewText = new cViewDetailText(); - detailView = detailViewText; - } else if (startswith(viewName, "menuplugin")) { - detailViewPlugin = new cViewDetailPlugin(); - detailView = detailViewPlugin; - } else { - esyslog("skindesigner: invalid detailedview %s", viewName); - } - if (detailView) { - detailView->SetOsd(&sdOsd); - } -} - -void cViewMenuDetail::AddTab(cArea *tab) { - if (firstTab) { - tab->SetActiveTab(true); - firstTab = false; - } - detailView->AddArea(tab); -} - -void cViewMenuDetail::SetGlobals(cGlobals *globals) { - cView::SetGlobals(globals); - detailView->SetGlobals(globals); -} - -void cViewMenuDetail::PreCache(void) { - attribs->SetContainer(container.X(), container.Y(), container.Width(), container.Height()); - attribs->Cache(); - if (plugId >= 0 && plugMenuId >= 0) { - cVeDmDetailheaderPlugin *dhPlug = dynamic_cast(viewElements[(int)eVeDisplayDetailedMenu::detailheader]); - dhPlug->SetPlugId(plugId); - dhPlug->SetPlugMenuId(plugMenuId); - dhPlug->SetTokenContainer(); - } - cView::PreCache(); - detailView->SetPlugId(plugId); - detailView->SetPlugMenuId(plugMenuId); - detailView->SetTokenContainer(); - detailView->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height()); - detailView->Cache(); -} - -int cViewMenuDetail::GetWidth(void) { - return detailView->GetWidth(); -} - -void cViewMenuDetail::SetViewElements(void) { - viewElementNames.insert(pair("detailheader", (int)eVeDisplayDetailedMenu::detailheader)); - viewElementNames.insert(pair("tablabels", (int)eVeDisplayDetailedMenu::tablabels)); -} - -void cViewMenuDetail::SetViewElementObjects(void) { - cSubView::SetViewElementObjects(); - if (viewElements[(int)eVeDisplayDetailedMenu::detailheader]) { - if (!strcmp(viewName, "menudetailedepg")) - detailedheaderEpg = dynamic_cast(viewElements[(int)eVeDisplayDetailedMenu::detailheader]); - else if (!strcmp(viewName, "menudetailedrecording")) - detailedheaderRec = dynamic_cast(viewElements[(int)eVeDisplayDetailedMenu::detailheader]); - else if (startswith(viewName, "menuplugin")) - detailedheaderPlug = dynamic_cast(viewElements[(int)eVeDisplayDetailedMenu::detailheader]); - } - - if (viewElements[(int)eVeDisplayDetailedMenu::tablabels]) - tablabels = dynamic_cast(viewElements[(int)eVeDisplayDetailedMenu::tablabels]); -} - -void cViewMenuDetail::SetEvent(const cEvent *event) { - if (detailedheaderEpg) - detailedheaderEpg->SetEvent(event); - if (detailViewEpg) - detailViewEpg->SetEvent(event); -} - -void cViewMenuDetail::SetRecording(const cRecording *recording) { - if (detailedheaderRec) - detailedheaderRec->SetRecording(recording); - if (detailViewRec) - detailViewRec->SetRecording(recording); -} - -void cViewMenuDetail::SetText(const char *text) { - if (detailViewText) - detailViewText->SetText(text); -} - -void cViewMenuDetail::SetPluginText(skindesignerapi::cTokenContainer *tk) { - if (detailedheaderPlug) - detailedheaderPlug->Set(tk); - if (detailViewPlugin) - detailViewPlugin->Set(tk); -} - -void cViewMenuDetail::Clear(void) { - cSubView::Clear(); - cSubView::Close(); - if (detailedheaderEpg) { - detailedheaderEpg->Close(); - } else if (detailedheaderRec) { - detailedheaderRec->Close(); - } else if (detailedheaderPlug) { - detailedheaderPlug->Close(); - } - if (header) { - header->Hide(); - } - if (detailView) { - detailView->Close(); - } -} - -void cViewMenuDetail::Close(void) { - cSubView::Clear(); - cSubView::Close(); - if (detailView) { - detailView->Close(); - } -} - -void cViewMenuDetail::DrawStaticVEs(void) { - cSubView::DrawStaticVEs(); - if (detailedheaderEpg && detailedheaderEpg->Parse()) { - detailedheaderEpg->Render(); - } else if (detailedheaderRec && detailedheaderRec->Parse()) { - detailedheaderRec->Render(); - } else if (detailedheaderPlug && detailedheaderPlug->Parse()) { - detailedheaderPlug->Render(); - } -} - -void cViewMenuDetail::DrawDynamicVEs(void) { - if (datetime) { - datetime->Show(); - if (datetime->Parse()) - datetime->Render(); - } - if (time) { - time->Show(); - if (time->Parse()) - time->Render(); - } -} - -void cViewMenuDetail::DrawDetailedView(void) { - detailView->Clear(); - detailView->ResetTabs(); - if (detailView->Parse()) { - detailView->Render(); - } - if (scrollbar) { - scrollbar->Show(); - DrawScrollbar(); - } - vector tabs; - int activeTab = detailView->GetTabs(tabs); - if (tablabels) { - tablabels->SetTabs(tabs); - tablabels->SetActiveTab(activeTab); - if (tablabels->Parse()) - tablabels->Render(); - } -} - -void cViewMenuDetail::KeyLeft(void) { - if (detailView->NumTabs() > 1) { - detailView->Clear(); - detailView->PrevTab(); - detailView->SetDirty(); - if (tablabels) { - tablabels->Clear(); - tablabels->SetActiveTab(detailView->ActiveTab()); - if (tablabels->Parse()) - tablabels->Render(); - } - sdOsd.Flush(); - detailView->Render(); - if (scrollbar) { - DrawScrollbar(); - } - } else { - //scroll page - if (detailView->ScrollUp(true)) { - if (scrollbar) - DrawScrollbar(); - } - } -} - -void cViewMenuDetail::KeyRight(void) { - if (detailView->NumTabs() > 1) { - detailView->Clear(); - detailView->NextTab(); - detailView->SetDirty(); - if (tablabels) { - tablabels->Clear(); - tablabels->SetActiveTab(detailView->ActiveTab()); - if (tablabels->Parse()) - tablabels->Render(); - } - sdOsd.Flush(); - detailView->Render(); - if (scrollbar) { - DrawScrollbar(); - } - - } else { - //scroll page - if (detailView->ScrollDown(true)) { - if (scrollbar) - DrawScrollbar(); - } - } -} - -void cViewMenuDetail::KeyUp(void) { - if (detailView->ScrollUp()) { - if (scrollbar) - DrawScrollbar(); - } -} - -void cViewMenuDetail::KeyDown(void) { - if (scrollbar && detailView->ScrollDown()) { - if (scrollbar) - DrawScrollbar(); - } -} - -void cViewMenuDetail::SetTransparency(int transparency, bool forceDetached) { - if (detailedheaderEpg) - detailedheaderEpg->SetTransparency(transparency); - if (detailedheaderRec) - detailedheaderRec->SetTransparency(transparency); - if (tablabels) - tablabels->SetTransparency(transparency); - if (detailView) - detailView->SetTransparency(transparency); -} - -void cViewMenuDetail::DrawScrollbar(void) { - int barheight = 0; - int offset = 0; - bool end = true; - detailView->Scrollbar(barheight, offset, end); - scrollbar->SetDetail(barheight, offset, end); - scrollbar->Render(); -} +#include "viewdisplaymenu.h" +#include "../config.h" + +/************************************************************************************ +* cViewMenu +************************************************************************************/ +cViewMenu::cViewMenu(void) { + menuDefault = NULL; + menuMain = NULL; + menuSetup = NULL; + menuSchedules = NULL; + menuChannels = NULL; + menuTimers = NULL; + menuRecordings = NULL; + menuDetailedEpg = NULL; + menuDetailedRec = NULL; + menuDetailedText = NULL; + ClearVariables(); + viewId = eViewType::DisplayMenu; + viewName = strdup("displaymenu"); + numViewElements = (int)eVeDisplayMenu::count; + viewElements = new cViewElement*[numViewElements]; + for (int i=0; i < numViewElements; i++) { + viewElements[i] = NULL; + } + viewElementsHorizontal = new cViewElement*[numViewElements]; + for (int i=0; i < numViewElements; i++) { + viewElementsHorizontal[i] = NULL; + } + SetViewElements(); + int numPluginMenus = plgManager->GetNumPluginMenus(); + numSubviews = (int)eSvDisplayMenu::count + numPluginMenus; + subViews = new cSubView*[numSubviews]; + for (int i=0; i < numSubviews; i++) { + subViews[i] = NULL; + } + SetSubViews(); + menuCat = mcUnknown; + plugName = NULL; +} + +cViewMenu::~cViewMenu() { + for (int i=0; i< numSubviews; i++) + delete subViews[i]; + delete[] subViews; +} + +void cViewMenu::SetGlobals(cGlobals *globals) { + cView::SetGlobals(globals); + for (int i=0; i < numSubviews; ++i) { + if (subViews[i]) { + subViews[i]->SetGlobals(globals); + } + } +} + +void cViewMenu::PreCache(void) { + cView::PreCache(); + for (int i=0; i < numSubviews; i++) { + if (subViews[i]) { + subViews[i]->SetContainer(0, 0, attribs->Width(), attribs->Height()); + subViews[i]->PreCache(); + //setting default viewelements for subviews + for (int ve = (int)eVeDisplayMenu::background; ve < (int)eVeDisplayMenu::count; ve++) { + if (viewElements[ve] && !subViews[i]->ViewElementSet(ve)) { + subViews[i]->SetViewElement((eVeDisplayMenu)ve, viewElements[ve]); + } + } + for (int ve = (int)eVeDisplayMenu::background; ve < (int)eVeDisplayMenu::count; ve++) { + if (viewElementsHorizontal[ve] && !subViews[i]->ViewElementHorizontalSet(ve)) { + subViews[i]->SetViewElementHorizontal((eVeDisplayMenu)ve, viewElementsHorizontal[ve]); + } + } + } + } +} + +void cViewMenu::SetViewElementObjects(void) { + //setting subviews + for (int i=0; i < numSubviews; i++) { + if (!subViews[i]) + continue; + if (i == (int)eSvDisplayMenu::menudefault) + menuDefault = dynamic_cast(subViews[i]); + else if (i == (int)eSvDisplayMenu::main) + menuMain = dynamic_cast(subViews[i]); + else if (i == (int)eSvDisplayMenu::setup) + menuSetup = dynamic_cast(subViews[i]); + else if (i == (int)eSvDisplayMenu::schedules) + menuSchedules = dynamic_cast(subViews[i]); + else if (i == (int)eSvDisplayMenu::channels) + menuChannels = dynamic_cast(subViews[i]); + else if (i == (int)eSvDisplayMenu::timers) + menuTimers = dynamic_cast(subViews[i]); + else if (i == (int)eSvDisplayMenu::recordings) + menuRecordings = dynamic_cast(subViews[i]); + else if (i == (int)eSvDisplayMenu::detailepg) + menuDetailedEpg = dynamic_cast(subViews[i]); + else if (i == (int)eSvDisplayMenu::detailrec) + menuDetailedRec = dynamic_cast(subViews[i]); + else if (i == (int)eSvDisplayMenu::detailtext) + menuDetailedText = dynamic_cast(subViews[i]); + } +} + +void cViewMenu::SetViewElements(void) { + viewElementNames.insert(pair("background", (int)eVeDisplayMenu::background)); + viewElementNames.insert(pair("header", (int)eVeDisplayMenu::header)); + viewElementNames.insert(pair("datetime", (int)eVeDisplayMenu::datetime)); + viewElementNames.insert(pair("time", (int)eVeDisplayMenu::time)); + viewElementNames.insert(pair("colorbuttons", (int)eVeDisplayMenu::colorbuttons)); + viewElementNames.insert(pair("message", (int)eVeDisplayMenu::message)); + viewElementNames.insert(pair("scrollbar", (int)eVeDisplayMenu::scrollbar)); + viewElementNames.insert(pair("sortmode", (int)eVeDisplayMenu::sortmode)); +} + +void cViewMenu::SetSubViews(void) { + //adding VDR submenus + subviewNames.insert(pair("menudefault", (int)eSvDisplayMenu::menudefault)); + subviewNames.insert(pair("menumain", (int)eSvDisplayMenu::main)); + subviewNames.insert(pair("menusetup", (int)eSvDisplayMenu::setup)); + subviewNames.insert(pair("menuschedules", (int)eSvDisplayMenu::schedules)); + subviewNames.insert(pair("menuchannels", (int)eSvDisplayMenu::channels)); + subviewNames.insert(pair("menutimers", (int)eSvDisplayMenu::timers)); + subviewNames.insert(pair("menurecordings", (int)eSvDisplayMenu::recordings)); + subviewNames.insert(pair("menudetailedepg", (int)eSvDisplayMenu::detailepg)); + subviewNames.insert(pair("menudetailedrecording", (int)eSvDisplayMenu::detailrec)); + subviewNames.insert(pair("menudetailedtext", (int)eSvDisplayMenu::detailtext)); + //adding additional plugin subviews + int subViewNumber = (int)eSvDisplayMenu::count; + map *plugMenus = NULL; + string plugName = ""; + int plugId = -1; + plgManager->InitPluginMenuIterator(); + while ( plugMenus = plgManager->GetPluginMenus(plugName, plugId) ) { + for (map ::iterator it = plugMenus->begin(); it != plugMenus->end(); it++) { + int menuNumber = it->first; + cString menuName = cString::sprintf("menuplugin-%s-%d", plugName.c_str(), menuNumber); + subviewNames.insert(pair(*menuName, subViewNumber)); + plgManager->AddSubviewMapping(plugId, menuNumber, subViewNumber); + subViewNumber++; + } + } +} + +void cViewMenu::ClearVariables(void) { + cView::ClearVariables(); + menuChange = true; + listChange = true; + detailViewInit = false; + menuCat = mcUnknown; + pluginIdSet = false; + plugId = -1; + plugMenuId = -1; + activeSubview = NULL; + activeSubviewLast = NULL; +} + +int cViewMenu::SubviewId(const char *name) { + map::iterator hit = subviewNames.find(name); + if (hit != subviewNames.end()) + return (int)hit->second; + return ATTR_UNKNOWN; +} + +bool cViewMenu::ValidSubView(const char *subView) { + if (SubviewId(subView) != ATTR_UNKNOWN) + return true; + return false; +} + +cSubView *cViewMenu::CreateSubview(const char *name) { + cSubView *sv = NULL; + if (!strcmp(name, "menudefault")) + sv = new cViewMenuDefault(name); + else if (!strcmp(name, "menumain")) + sv = new cViewMenuMain(name); + else if (!strcmp(name, "menusetup")) + sv = new cViewMenuSetup(name); + else if (!strcmp(name, "menuschedules")) + sv = new cViewMenuSchedules(name); + else if (!strcmp(name, "menuchannels")) + sv = new cViewMenuChannels(name); + else if (!strcmp(name, "menutimers")) + sv = new cViewMenuTimers(name); + else if (!strcmp(name, "menurecordings")) + sv = new cViewMenuRecordings(name); + else if (!strcmp(name, "menudetailedepg")) + sv = new cViewMenuDetail(name); + else if (!strcmp(name, "menudetailedrecording")) + sv = new cViewMenuDetail(name); + else if (!strcmp(name, "menudetailedtext")) + sv = new cViewMenuDetail(name); + return sv; +} + +cSubView *cViewMenu::CreatePluginview(const char *plugname, int plugId, int menuNumber, int menuType) { + cString menuName = cString::sprintf("menuplugin-%s-%d", plugname, menuNumber); + cSubView *pv = NULL; + if (menuType == skindesignerapi::mtList) + pv = new cViewMenuPlugin(*menuName); + else if (menuType == skindesignerapi::mtText) + pv = new cViewMenuDetail(*menuName); + if (pv) { + pv->SetPlugId(plugId); + pv->SetPlugMenuId(menuNumber); + } + return pv; +} + + +void cViewMenu::AddPluginview(cSubView *plugView) { + int id = SubviewId(plugView->GetViewName()); + if (id == ATTR_UNKNOWN) + return; + subViews[id] = plugView; +} + +void cViewMenu::AddSubview(const char *sSubView, cSubView *subView) { + int id = SubviewId(sSubView); + if (id == ATTR_UNKNOWN) + return; + subViews[id] = subView; +} + +/* eMenuCategory: + -1 mcUndefined, + 0 mcUnknown, + 1 mcMain, + 2 mcSchedule, + 3 mcScheduleNow, + 4 mcScheduleNext, + 5 mcChannel, + 6 mcChannelEdit, + 7 mcTimer, + 8 mcTimerEdit, + 9 mcRecording, + 10 mcRecordingInfo, + 11 mcRecordingEdit, + 12 mcPlugin, + 13 mcPluginSetup, + 14 mcSetup, + 15 mcSetupOsd, + 16 mcSetupEpg, + 17 mcSetupDvb, + 18 mcSetupLnb, + 19 mcSetupCam, + 20 mcSetupRecord, + 21 mcSetupReplay, + 22 mcSetupMisc, + 23 mcSetupPlugins, + 24 mcCommand, + 25 mcEvent, + 26 mcText, + 27 mcFolder, + 28 mcCam +*/ +void cViewMenu::SetSubView(eMenuCategory MenuCat) { + //menuCat --> old menucat + //MenuCat --> new menucat + if (menuCat == mcMain) { + cViewMenuMain *menuMain = dynamic_cast(activeSubview); + if (menuMain) { + plugName = menuMain->GetPlugin(); + } + } + //first check plugin menu + if (MenuCat == mcPlugin) { + bool plugMenuFound = SetPluginSubView(MenuCat); + if (plugMenuFound) { + menuCat = MenuCat; + return; + } + } + //then check regular menus + bool catChange = false; + if (menuCat != MenuCat) { + catChange = true; + } else { + return; + } + cSubView *newSubview = NULL; + menuCat = MenuCat; + switch (MenuCat) { + case mcMain: + newSubview = subViews[(int)eSvDisplayMenu::main]; + break; + case mcSchedule: + case mcScheduleNow: + case mcScheduleNext: + newSubview = subViews[(int)eSvDisplayMenu::schedules]; + break; + case mcChannel: + newSubview = subViews[(int)eSvDisplayMenu::channels]; + break; + case mcTimer: + newSubview = subViews[(int)eSvDisplayMenu::timers]; + break; + case mcRecording: + newSubview = subViews[(int)eSvDisplayMenu::recordings]; + break; + case mcSetup: + newSubview = subViews[(int)eSvDisplayMenu::setup]; + break; + case mcEvent: + newSubview = subViews[(int)eSvDisplayMenu::detailepg]; + break; + case mcRecordingInfo: + newSubview = subViews[(int)eSvDisplayMenu::detailrec]; + break; + case mcText: + newSubview = subViews[(int)eSvDisplayMenu::detailtext]; + break; + default: + newSubview = subViews[(int)eSvDisplayMenu::menudefault]; + //setting plugin name for detecting plugins in default menus + cViewMenuDefault *menuDefault = dynamic_cast(newSubview); + if (menuDefault) { + menuDefault->SetPlugin(plugName); + } + break; + }; + if (catChange) { + menuChange = true; + activeSubview->Clear(); + activeSubviewLast = activeSubview; + activeSubview = newSubview; + if (!activeSubview) + activeSubview = subViews[(int)eSvDisplayMenu::menudefault]; + activeSubview->SetMenuCategory(MenuCat); + } +} + +bool cViewMenu::SetPluginSubView(eMenuCategory menuCat) { + if (!pluginIdSet) + return false; + cSubView *newSubview = NULL; + if (plugId >= 0 && plugMenuId >= 0) { + int subViewId = plgManager->GetSubviewId(plugId, plugMenuId); + if (subViewId >= 0 && subViews[subViewId]) { + newSubview = subViews[subViewId]; + menuChange = true; + activeSubview->Clear(); + activeSubviewLast = activeSubview; + activeSubview = newSubview; + activeSubview->SetMenuCategory(menuCat); + return true; + } + } + return false; +} + +void cViewMenu::WakeViewElements(void) { + cView::WakeViewElements(); + if (activeSubview) + activeSubview->WakeViewElements(); +} + + +void cViewMenu::SetSortMode(eMenuSortMode sortMode) { + if (activeSubview) + activeSubview->SetSortMode(sortMode); +} + +void cViewMenu::SetPluginMenu(int plugId, int plugMenuId) { + this->plugId = plugId; + this->plugMenuId = plugMenuId; + pluginIdSet = true; +} + +int cViewMenu::NumListItems(void) { + return activeSubview->NumListItems(); +} + +eMenuOrientation cViewMenu::MenuOrientation(void) { + return activeSubview->MenuOrientation(); +} + +const cFont *cViewMenu::GetTextAreaFont(void) { + return activeSubview->GetTextAreaFont(); +} + +int cViewMenu::GetTextAreaWidth(void) { + if (!menuDetailedText) + return 0; + return menuDetailedText->GetWidth(); +} + +int cViewMenu::GetListWidth(void) { + return activeSubview->GetListWidth(); +} + +void cViewMenu::SetTitleHeader(const char *title) { + activeSubview->SetTitle(title); +} + +void cViewMenu::SetMessage(eMessageType type, const char *text) { + activeSubview->SetMessage(type, text); +} + +void cViewMenu::SetChannelHeader(const cEvent *event) { + if (menuChange && menuCat == mcSchedule) { + const cChannel *channel = Channels.GetByChannelID(event->ChannelID()); + if (channel) + activeSubview->SetChannel(channel); + } +} + +void cViewMenu::SetMenuButtons(const char *red, const char *green, const char *yellow, const char *blue) { + activeSubview->SetMenuButtons(red, green, yellow, blue); +} + +void cViewMenu::SetScrollbar(int total, int offset) { + activeSubview->SetScrollbar(total, offset); +} + +void cViewMenu::SetTabs(int tab1, int tab2, int tab3, int tab4, int tab5) { + menuDefault->SetTabs(tab1, tab2, tab3, tab4, tab5); +} + +void cViewMenu::SetItem(const char *text, int index, bool current, bool selectable) { + if (menuCat == mcMain && menuMain) { + menuMain->SetItem(text, index, current, selectable); + } else if (menuCat == mcSetup && menuSetup) { + menuSetup->SetItem(text, index, current, selectable); + } else { + menuDefault->SetItem(text, index, current, selectable); + } + listChange = true; +} + +bool cViewMenu::SetItemEvent(const cEvent *event, int index, bool current, bool selectable, + const cChannel *channel, bool withDate, eTimerMatch timerMatch) { + if (!menuSchedules) + return false; + menuSchedules->SetItem(event, index, current, selectable, channel, withDate, timerMatch); + listChange = true; + return true; +} + +bool cViewMenu::SetItemTimer(const cTimer *timer, int index, bool current, bool selectable) { + if (!menuTimers) + return false; + menuTimers->SetItem(timer, index, current, selectable); + listChange = true; + return true; +} + +bool cViewMenu::SetItemChannel(const cChannel *channel, int index, bool current, bool selectable, bool withProvider) { + if (!menuChannels) + return false; + menuChannels->SetItem(channel, index, current, selectable, withProvider); + listChange = true; + return true; +} + +bool cViewMenu::SetItemRecording(const cRecording *recording, int index, bool current, bool selectable, int level, int total, int New) { + if (!menuRecordings) + return false; + menuRecordings->SetItem(recording, index, current, selectable, level, total, New); + listChange = true; + return true; +} + +bool cViewMenu::SetItemPlugin(skindesignerapi::cTokenContainer *tk, int index, bool current, bool selectable) { + cViewMenuPlugin *menuPlugin = dynamic_cast(activeSubview); + if (!menuPlugin) { + return false; + } + menuPlugin->SetItem(tk, index, current, selectable); + listChange = true; + return true; +} + +void cViewMenu::SetEvent(const cEvent *event) { + menuDetailedEpg->SetEvent(event); + detailViewInit = true; +} + +void cViewMenu::SetRecording(const cRecording *recording) { + menuDetailedRec->SetRecording(recording); + detailViewInit = true; +} + +void cViewMenu::SetText(const char *text) { + menuDetailedText->SetText(text); + detailViewInit = true; +} + +bool cViewMenu::SetPluginText(skindesignerapi::cTokenContainer *tk) { + cViewMenuDetail *menuPlugin = dynamic_cast(activeSubview); + if (!menuPlugin) { + return false; + } + menuPlugin->SetPluginText(tk); + detailViewInit = true; + return true; +} + +void cViewMenu::SetCurrentRecording(const char *currentRec) { + if (menuMain) { + menuMain->SetCurrentRecording(currentRec); } +} + +void cViewMenu::KeyDetailView(bool up, bool page) { + cViewMenuDetail *detailView = dynamic_cast(activeSubview); + if (!detailView) + return; + if (up && page) { + detailView->KeyLeft(); + } else if (!up && page) { + detailView->KeyRight(); + } else if (up && !page) { + detailView->KeyUp(); + } else if (!up && !page) { + detailView->KeyDown(); + } +} + +bool cViewMenu::Init(void) { + activeSubview = subViews[(int)eSvDisplayMenu::main]; + return cView::Init(); +} + +void cViewMenu::Close(void) { + delete fader; + fader = NULL; + if (FadeTime() > 0) { + fader = new cAnimation((cFadable*)this, false); + fader->Fade(); + delete fader; + fader = NULL; + } + for (int i=0; i < numSubviews; i++) { + if (subViews[i]) { + subViews[i]->Close(); + } + } + for (int i=0; i < numViewElements; i++) { + if (viewElements[i]) { + viewElements[i]->Close(); + } + if (viewElementsHorizontal[i]) { + viewElementsHorizontal[i]->Close(); + } + } + UnScaleTv(); + ClearVariables(); + sdOsd.DeleteOsd(); +} + +void cViewMenu::Clear(void) { + activeSubview->ClearViewList(); +} + +void cViewMenu::Flush(void) { + if (init) { + sdOsd.LockFlush(); + } + bool staticInitiated = false; + if (menuChange) { + newTvFrame = activeSubview->GetTvFrame(); + menuInit = true; + activeSubview->DrawStaticVEs(); + pluginIdSet = false; + menuChange = false; + staticInitiated = true; + } + if (listChange) { + activeSubview->DrawList(); + listChange = false; + } + if (detailViewInit) { + if (!staticInitiated) + activeSubview->DrawStaticVEs(); + activeSubview->DrawDetailedView(); + pluginIdSet = false; + detailViewInit = false; + } + activeSubview->DrawDynamicVEs(); + cView::Flush(); +} + +void cViewMenu::SetTransparency(int transparency, bool forceDetached) { + activeSubview->SetTransparency(transparency, forceDetached); + if (menuDetailedEpg) + menuDetailedEpg->SetTransparency(transparency); + if (menuDetailedRec) + menuDetailedRec->SetTransparency(transparency); + if (menuDetailedText) + menuDetailedText->SetTransparency(transparency); +} + +void cViewMenu::Debug(void) { + cView::Debug(); + for (int i=0; i < numSubviews; i++) { + if (subViews[i]) { + subViews[i]->Debug(); + } + } +} + +/*********************************************************** +* cSubView +***********************************************************/ +cSubView::cSubView(const char *name) { + menuCat = mcUnknown; + plugId = -1; + plugMenuId = -1; + this->viewName = strdup(name); + numViewElements = (int)eVeDisplayMenu::count; + viewElements = new cViewElement*[numViewElements]; + for (int i=0; i < numViewElements; i++) { + viewElements[i] = NULL; + } + viewElementsHorizontal = new cViewElement*[numViewElements]; + for (int i=0; i < numViewElements; i++) { + viewElementsHorizontal[i] = NULL; + } + background = NULL; + header = NULL; + datetime = NULL; + time = NULL; + message = NULL; + sortmode = NULL; + colorbuttons = NULL; + scrollbar = NULL; + viewList = NULL; + viewListVertical = NULL; + viewListHorizontal = NULL; + SetViewElements(); +} + +cSubView::~cSubView(void) { + delete viewListHorizontal; + delete viewListVertical; +} + +void cSubView::SetGlobals(cGlobals *globals) { + cView::SetGlobals(globals); + if (viewListVertical) + viewListVertical->SetGlobals(globals); + if (viewListHorizontal) + viewListHorizontal->SetGlobals(globals); +} + +void cSubView::PreCache(void) { + attribs->SetContainer(container.X(), container.Y(), container.Width(), container.Height()); + attribs->Cache(); + cView::PreCache(); + if (viewListVertical) { + viewListVertical->SetPlugId(plugId); + viewListVertical->SetPlugMenuId(plugMenuId); + viewListVertical->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height()); + viewListVertical->PreCache(); + } + if (viewListHorizontal) { + viewListHorizontal->SetPlugId(plugId); + viewListHorizontal->SetPlugMenuId(plugMenuId); + viewListHorizontal->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height()); + viewListHorizontal->PreCache(); + } +} + +bool cSubView::ViewElementSet(int ve) { + if (ve >= 0 && ve < (int)eVeDisplayMenu::count && viewElements[ve]) + return true; + return false; +} + +bool cSubView::ViewElementHorizontalSet(int ve) { + if (ve >= 0 && ve < (int)eVeDisplayMenu::count && viewElementsHorizontal[ve]) + return true; + return false; +} + +void cSubView::SetViewElement(eVeDisplayMenu ve, cViewElement *viewElement) { + switch (ve) { + case eVeDisplayMenu::background: + if (!background) + background = viewElement; + break; + case eVeDisplayMenu::header: + if (!header) + header = dynamic_cast(viewElement); + break; + case eVeDisplayMenu::datetime: + if (!datetime) + datetime = dynamic_cast(viewElement); + break; + case eVeDisplayMenu::time: + if (!time) + time = dynamic_cast(viewElement); + break; + case eVeDisplayMenu::message: + if (!message) + message = dynamic_cast(viewElement); + break; + case eVeDisplayMenu::sortmode: + if (!sortmode) + sortmode = dynamic_cast(viewElement); + break; + case eVeDisplayMenu::colorbuttons: + if (!colorbuttons) + colorbuttons = dynamic_cast(viewElement); + break; + case eVeDisplayMenu::scrollbar: + if (!scrollbar) + scrollbar = dynamic_cast(viewElement); + break; + default: + break; + }; +} + +void cSubView::SetViewElementHorizontal(eVeDisplayMenu ve, cViewElement *viewElement) { + eOrientation orientation = attribs->Orientation(); + if (orientation != eOrientation::horizontal) + return; + switch (ve) { + case eVeDisplayMenu::background: + if (!background) + background = viewElement; + break; + case eVeDisplayMenu::header: + if (!header) + header = dynamic_cast(viewElement); + break; + case eVeDisplayMenu::datetime: + if (!datetime) + datetime = dynamic_cast(viewElement); + break; + case eVeDisplayMenu::time: + if (!time) + time = dynamic_cast(viewElement); + break; + case eVeDisplayMenu::message: + if (!message) + message = dynamic_cast(viewElement); + break; + case eVeDisplayMenu::sortmode: + if (!sortmode) + sortmode = dynamic_cast(viewElement); + break; + case eVeDisplayMenu::colorbuttons: + if (!colorbuttons) + colorbuttons = dynamic_cast(viewElement); + break; + case eVeDisplayMenu::scrollbar: + if (!scrollbar) + scrollbar = dynamic_cast(viewElement); + break; + default: + break; + }; +} + +void cSubView::AddViewList(cViewList *viewList) { + eOrientation orientation = viewList->Orientation(); + if (orientation == eOrientation::vertical) { + viewListVertical = viewList; + } else if (orientation == eOrientation::horizontal) { + viewListHorizontal = viewList; + } else { + viewListVertical = viewList; + } +} + +int cSubView::NumListItems(void) { + if (viewList) + return viewList->NumItems(); + return 0; +} + +eMenuOrientation cSubView::MenuOrientation(void) { + eOrientation orientation = attribs->Orientation(); + if (orientation == eOrientation::horizontal) + return moHorizontal; + return moVertical; +} + +void cSubView::SetTitle(const char *title) { + if (header) { + header->SetTitle(title); + } +} + +void cSubView::SetChannel(const cChannel *channel) { + if (header) { + header->SetChannel(channel); + } +} + +void cSubView::SetMessage(eMessageType type, const char *text) { + if (!message) + return; + if (!text) { + message->Clear(); + message->Hide(); + return; + } + message->Set(type, text); + message->Show(); + if (message->Parse()) + message->Render(); +} + +void cSubView::SetMenuButtons(const char *red, const char *green, const char *yellow, const char *blue) { + if (!colorbuttons) + return; + colorbuttons->SetButtons(red, green, yellow, blue); + if (colorbuttons->Parse()) { + colorbuttons->Show(); + colorbuttons->Render(); + } +} + +void cSubView::SetScrollbar(int total, int offset) { + if (!scrollbar) + return; + scrollbar->SetList(total, offset, NumListItems()); + if (scrollbar->Parse()) { + scrollbar->Show(); + scrollbar->Render(); + } +} + +void cSubView::SetSortMode(eMenuSortMode sortMode) { + if (!sortmode) + return; + sortmode->Set(sortMode); + if (sortmode->Parse()) { + sortmode->Show(); + sortmode->Render(); + } +} + +void cSubView::Close(void) { + ClearVariables(); + for (int i=0; i < numViewElements; i++) { + if (!viewElements[i]) + continue; + viewElements[i]->Close(); + } + for (int i=0; i < numViewElements; i++) { + if (!viewElementsHorizontal[i]) + continue; + viewElementsHorizontal[i]->Close(); + } + if (viewList) + viewList->Close(); +} + +void cSubView::ClearViewList(void) { + if (viewList) + viewList->Clear(); +} + +void cSubView::WakeViewElements(void) { + for (int i = 0; i < numViewElements; i++) { + if (viewElements[i]) { + viewElements[i]->WakeUp(); + } + if (viewElementsHorizontal[i]) { + viewElementsHorizontal[i]->WakeUp(); + } + } +} + +void cSubView::Clear(void) { + if (background) background->Hide(); + if (datetime) datetime->Hide(); + if (time) time->Hide(); + if (header) header->Hide(); + if (colorbuttons) colorbuttons->Hide(); + if (scrollbar) scrollbar->Hide(); + if (sortmode) { + sortmode->Reset(); + sortmode->Hide(); + } + + if (viewList) viewList->Close(); +} + +void cSubView::DrawStaticVEs(void) { + if (background) { + background->Show(); + background->Render(); + } + if (header) { + header->Show(); + header->Set(menuCat); + if (header->Parse()) + header->Render(); + } +} + +void cSubView::DrawDynamicVEs(void) { + if (datetime) { + datetime->Show(); + if (datetime->Parse()) + datetime->Render(); + } + if (time) { + time->Show(); + if (time->Parse()) { + time->Render(); + } + } +} + +void cSubView::DrawList(void) { + if (viewList) { + viewList->Draw(menuCat); + } +} + +void cSubView::SetTransparency(int transparency, bool forceDetached) { + for (int i = 0; i < numViewElements; i++) { + if (viewElements[i] && (!viewElements[i]->Detached() || forceDetached)) { + viewElements[i]->SetTransparency(transparency); + } + if (viewElementsHorizontal[i] && (!viewElementsHorizontal[i]->Detached() || forceDetached)) { + viewElementsHorizontal[i]->SetTransparency(transparency); + } + } + if (viewList) + viewList->SetTransparency(transparency); +} +/*********************************************************** +* Protected Functions +***********************************************************/ +void cSubView::SetViewElementObjects(void) { + eOrientation orientation = attribs->Orientation(); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::background]) + background = viewElementsHorizontal[(int)eVeDisplayMenu::background]; + else if (viewElements[(int)eVeDisplayMenu::background]) + background = viewElements[(int)eVeDisplayMenu::background]; + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::header]) + header = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::header]); + else if (viewElements[(int)eVeDisplayMenu::header]) + header = dynamic_cast(viewElements[(int)eVeDisplayMenu::header]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::datetime]) + datetime = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::datetime]); + else if (viewElements[(int)eVeDisplayMenu::datetime]) + datetime = dynamic_cast(viewElements[(int)eVeDisplayMenu::datetime]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::time]) + time = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::time]); + else if (viewElements[(int)eVeDisplayMenu::time]) + time = dynamic_cast(viewElements[(int)eVeDisplayMenu::time]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::message]) + message = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::message]); + else if (viewElements[(int)eVeDisplayMenu::message]) + message = dynamic_cast(viewElements[(int)eVeDisplayMenu::message]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::sortmode]) + sortmode = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::sortmode]); + else if (viewElements[(int)eVeDisplayMenu::sortmode]) + sortmode = dynamic_cast(viewElements[(int)eVeDisplayMenu::sortmode]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::colorbuttons]) + colorbuttons = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::colorbuttons]); + else if (viewElements[(int)eVeDisplayMenu::colorbuttons]) + colorbuttons = dynamic_cast(viewElements[(int)eVeDisplayMenu::colorbuttons]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::scrollbar]) + scrollbar = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenu::scrollbar]); + else if (viewElements[(int)eVeDisplayMenu::scrollbar]) + scrollbar = dynamic_cast(viewElements[(int)eVeDisplayMenu::scrollbar]); + + + if (attribs->Orientation() == eOrientation::horizontal) + viewList = viewListHorizontal; + else + viewList = viewListVertical; +} + +void cSubView::SetViewElements(void) { + viewElementNames.insert(pair("background", (int)eVeDisplayMenu::background)); + viewElementNames.insert(pair("header", (int)eVeDisplayMenu::header)); + viewElementNames.insert(pair("datetime", (int)eVeDisplayMenu::datetime)); + viewElementNames.insert(pair("time", (int)eVeDisplayMenu::time)); + viewElementNames.insert(pair("colorbuttons", (int)eVeDisplayMenu::colorbuttons)); + viewElementNames.insert(pair("message", (int)eVeDisplayMenu::message)); + viewElementNames.insert(pair("scrollbar", (int)eVeDisplayMenu::scrollbar)); + viewElementNames.insert(pair("sortmode", (int)eVeDisplayMenu::sortmode)); +} + +/*********************************************************** +* cViewMenuDefault +***********************************************************/ +cViewMenuDefault::cViewMenuDefault(const char *name) : cSubView(name) { + listDefault = NULL; +} + +cViewMenuDefault::~cViewMenuDefault(void) { +} + +void cViewMenuDefault::SetViewElementObjects(void) { + cSubView::SetViewElementObjects(); + listDefault = dynamic_cast(viewList); +} + +void cViewMenuDefault::SetTabs(int tab1, int tab2, int tab3, int tab4, int tab5) { + if (listDefault) + listDefault->SetTabs(tab1, tab2, tab3, tab4, tab5); +} + +void cViewMenuDefault::SetPlugin(const char *plugName) { + listDefault->SetPlugin(plugName); +} + +void cViewMenuDefault::SetItem(const char *text, int index, bool current, bool selectable) { + listDefault->Set(text, index, current, selectable); +} + +const cFont *cViewMenuDefault::GetTextAreaFont(void) { + if (!listDefault) + return NULL; + return listDefault->GetListFont(); +} + +int cViewMenuDefault::GetListWidth(void) { + if (!listDefault) + return 0; + return listDefault->GetListWidth(); +} + +/************************************************************************************ +* cViewMenuMain +************************************************************************************/ +cViewMenuMain::cViewMenuMain(const char *name) : cSubView(name) { + for (int i=0; i < numViewElements; i++) { + delete viewElements[i]; + } + delete[] viewElements; + numViewElements = (int)eVeDisplayMenuMain::count; + viewElements = new cViewElement*[numViewElements]; + for (int i=0; i < numViewElements; i++) { + viewElements[i] = NULL; + } + delete[] viewElementsHorizontal; + viewElementsHorizontal = new cViewElement*[numViewElements]; + for (int i=0; i < numViewElements; i++) { + viewElementsHorizontal[i] = NULL; + } + listMain = NULL; + timers = NULL; + devices = NULL; + weather = NULL; + discusage = NULL; + load = NULL; + memory = NULL; + vdrstats = NULL; + temperatures = NULL; + currentSchedule = NULL; + lastRecordings = NULL; + customTokens = NULL; + lastDrawDynamic = 0; + SetViewElements(); +} + +cViewMenuMain::~cViewMenuMain() { +} + +void cViewMenuMain::ClearVariables(void) { + init = true; +} + +void cViewMenuMain::SetViewElements(void) { + viewElementNames.insert(pair("timers", (int)eVeDisplayMenuMain::timers)); + viewElementNames.insert(pair("devices", (int)eVeDisplayMenuMain::devices)); + viewElementNames.insert(pair("currentweather", (int)eVeDisplayMenuMain::currentweather)); + viewElementNames.insert(pair("currentschedule", (int)eVeDisplayMenuMain::currentschedule)); + viewElementNames.insert(pair("discusage", (int)eVeDisplayMenuMain::discusage)); + viewElementNames.insert(pair("systemload", (int)eVeDisplayMenuMain::systemload)); + viewElementNames.insert(pair("systemmemory", (int)eVeDisplayMenuMain::systemmemory)); + viewElementNames.insert(pair("vdrstatistics", (int)eVeDisplayMenuMain::vdrstatistics)); + viewElementNames.insert(pair("temperatures", (int)eVeDisplayMenuMain::temperatures)); + viewElementNames.insert(pair("lastrecordings", (int)eVeDisplayMenuMain::lastrecordings)); + viewElementNames.insert(pair("customtokens", (int)eVeDisplayMenuMain::customtokens)); +} + +void cViewMenuMain::SetViewElementObjects(void) { + cSubView::SetViewElementObjects(); + eOrientation orientation = attribs->Orientation(); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::timers]) + timers = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::timers]); + else if (viewElements[(int)eVeDisplayMenuMain::timers]) + timers = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::timers]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::devices]) + devices = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::devices]); + else if (viewElements[(int)eVeDisplayMenuMain::devices]) + devices = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::devices]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::currentweather]) + weather = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::currentweather]); + else if (viewElements[(int)eVeDisplayMenuMain::currentweather]) + weather = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::currentweather]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::currentschedule]) + currentSchedule = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::currentschedule]); + else if (viewElements[(int)eVeDisplayMenuMain::currentschedule]) + currentSchedule = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::currentschedule]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::discusage]) + discusage = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::discusage]); + else if (viewElements[(int)eVeDisplayMenuMain::discusage]) + discusage = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::discusage]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::systemload]) + load = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::systemload]); + else if (viewElements[(int)eVeDisplayMenuMain::systemload]) + load = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::systemload]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::systemmemory]) + memory = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::systemmemory]); + else if (viewElements[(int)eVeDisplayMenuMain::systemmemory]) + memory = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::systemmemory]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::vdrstatistics]) + vdrstats = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::vdrstatistics]); + else if (viewElements[(int)eVeDisplayMenuMain::vdrstatistics]) + vdrstats = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::vdrstatistics]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::temperatures]) + temperatures = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::temperatures]); + else if (viewElements[(int)eVeDisplayMenuMain::temperatures]) + temperatures = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::temperatures]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::lastrecordings]) + lastRecordings = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::lastrecordings]); + else if (viewElements[(int)eVeDisplayMenuMain::lastrecordings]) + lastRecordings = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::lastrecordings]); + + if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::customtokens]) + customTokens = dynamic_cast(viewElementsHorizontal[(int)eVeDisplayMenuMain::customtokens]); + else if (viewElements[(int)eVeDisplayMenuMain::customtokens]) + customTokens = dynamic_cast(viewElements[(int)eVeDisplayMenuMain::customtokens]); + + if (devices) devices->SetDetached(); + if (weather) weather->SetDetached(); + if (discusage) discusage->SetDetached(); + if (load) load->SetDetached(); + if (memory) memory->SetDetached(); + if (vdrstats) vdrstats->SetDetached(); + if (temperatures) temperatures->SetDetached(); + if (timers) timers->SetDetached(); + if (currentSchedule) currentSchedule->SetDetached(); + if (lastRecordings) lastRecordings->SetDetached(); + if (customTokens) customTokens->SetDetached(); + + listMain = dynamic_cast(viewList); +} + +void cViewMenuMain::Clear(void) { + cSubView::Clear(); + lastDrawDynamic = 0; + + if (devices) + devices->Hide(); + + if (weather) + weather->Hide(); + + if (discusage) + discusage->Hide(); + + if (load) { + load->Reset(); + load->Hide(); + } + + if (memory) { + memory->Reset(); + memory->Hide(); + } + + if (vdrstats) { + vdrstats->Reset(); + vdrstats->Hide(); + } + + if (temperatures) { + temperatures->Reset(); + temperatures->Hide(); + } + + if (timers) { + timers->Hide(); + } + + if (currentSchedule) { + currentSchedule->Hide(); + } + + if (lastRecordings) { + lastRecordings->Hide(); + } + + if (customTokens) { + customTokens->Reset(); + customTokens->Hide(); + } +} + +void cViewMenuMain::SetItem(const char *text, int index, bool current, bool selectable) { + listMain->Set(text, index, current, selectable); +} + +void cViewMenuMain::SetCurrentRecording(const char *currentRec) { + if (currentSchedule) + currentSchedule->SetRecording(currentRec); +} + +void cViewMenuMain::DrawStaticVEs(void) { + cSubView::DrawStaticVEs(); + if (weather) { + weather->Show(); + if (weather->Parse()) + weather->Render(); + } + if (discusage) { + discusage->Show(); + if (discusage->Parse()) + discusage->Render(); + } + if (timers) { + timers->Show(); + if (timers->Parse()) + timers->Render(); + } + if (currentSchedule) { + currentSchedule->Show(); + if (currentSchedule->Parse()) + currentSchedule->Render(); + } + if (lastRecordings) { + lastRecordings->Show(); + if (lastRecordings->Parse()) + lastRecordings->Render(); + } +} + +void cViewMenuMain::DrawDynamicVEs(void) { + cSubView::DrawDynamicVEs(); + //draw main menu dynamic elements + //only every 3 seconds + uint64_t now = cTimeMs::Now(); + if (now - lastDrawDynamic < 3000) + return; + else { + lastDrawDynamic = now; + } + + if (devices) { + devices->Show(); + if (devices->Parse()) + devices->Render(); + } + if (load) { + load->Show(); + if (load->Parse()) + load->Render(); + } + if (memory) { + memory->Show(); + if (memory->Parse()) + memory->Render(); + } + if (vdrstats) { + vdrstats->Show(); + if (vdrstats->Parse()) + vdrstats->Render(); + } + if (temperatures) { + temperatures->Show(); + if (temperatures->Parse()) + temperatures->Render(); + } + if (customTokens) { + customTokens->Show(); + if (customTokens->Parse()) + customTokens->Render(); + } +} + +const char *cViewMenuMain::GetPlugin(void) { + return listMain->GetPlugin(); +} + +/*********************************************************** +* cViewMenuSetup +***********************************************************/ +cViewMenuSetup::cViewMenuSetup(const char *name) : cSubView(name) { + listSetup = NULL; +} + +cViewMenuSetup::~cViewMenuSetup(void) { + +} + +void cViewMenuSetup::SetViewElementObjects(void) { + cSubView::SetViewElementObjects(); + listSetup = dynamic_cast(viewList); +} + +void cViewMenuSetup::SetItem(const char *text, int index, bool current, bool selectable) { + listSetup->Set(text, index, current, selectable); +} + +/*********************************************************** +* cViewMenuSchedules +***********************************************************/ +cViewMenuSchedules::cViewMenuSchedules(const char *name) : cSubView(name) { + listSchedules = NULL; +} + +cViewMenuSchedules::~cViewMenuSchedules(void) { +} + +void cViewMenuSchedules::SetViewElementObjects(void) { + cSubView::SetViewElementObjects(); + listSchedules = dynamic_cast(viewList); +} + +void cViewMenuSchedules::SetItem(const cEvent *event, int index, bool current, bool selectable, + const cChannel *channel, bool withDate, eTimerMatch timerMatch) { + + bool epgSearchFavMenu = (menuCat == mcSchedule && channel) ? true : false; + listSchedules->IsEpgSearchFav(epgSearchFavMenu); + if (header) header->IsEpgSearchFav(epgSearchFavMenu); + listSchedules->Set(event, index, current, selectable, channel, withDate, timerMatch); +} + +/*********************************************************** +* cViewMenuChannels +***********************************************************/ +cViewMenuChannels::cViewMenuChannels(const char *name) : cSubView(name) { + listChannels = NULL; +} + +cViewMenuChannels::~cViewMenuChannels(void) { +} + +void cViewMenuChannels::SetViewElementObjects(void) { + cSubView::SetViewElementObjects(); + listChannels = dynamic_cast(viewList); +} + +void cViewMenuChannels::SetItem(const cChannel *channel, int index, bool current, bool selectable, bool withProvider) { + listChannels->Set(channel, index, current, selectable, withProvider); +} + +/*********************************************************** +* cViewMenuTimers +***********************************************************/ +cViewMenuTimers::cViewMenuTimers(const char *name) : cSubView(name) { + listTimers = NULL; +} + +cViewMenuTimers::~cViewMenuTimers(void) { +} + +void cViewMenuTimers::SetViewElementObjects(void) { + cSubView::SetViewElementObjects(); + listTimers = dynamic_cast(viewList); +} + +void cViewMenuTimers::SetItem(const cTimer *timer, int index, bool current, bool selectable) { + listTimers->Set(timer, index, current, selectable); +} + +/*********************************************************** +* cViewMenuRecordings +***********************************************************/ +cViewMenuRecordings::cViewMenuRecordings(const char *name) : cSubView(name) { + listRecordings = NULL; +} + +cViewMenuRecordings::~cViewMenuRecordings(void) { +} + +void cViewMenuRecordings::SetViewElementObjects(void) { + cSubView::SetViewElementObjects(); + listRecordings = dynamic_cast(viewList); +} + +void cViewMenuRecordings::SetItem(const cRecording *recording, int index, bool current, bool selectable, int level, int total, int New) { + listRecordings->Set(recording, index, current, selectable, level, total, New); +} + +/*********************************************************** +* cViewMenuPlugin +***********************************************************/ +cViewMenuPlugin::cViewMenuPlugin(const char *name) : cSubView(name) { + listPlugin = NULL; +} + +cViewMenuPlugin::~cViewMenuPlugin(void) { +} + +void cViewMenuPlugin::SetViewElementObjects(void) { + cSubView::SetViewElementObjects(); + listPlugin = dynamic_cast(viewList); +} + +void cViewMenuPlugin::SetItem(skindesignerapi::cTokenContainer *tk, int index, bool current, bool selectable) { + listPlugin->Set(tk, index, current, selectable); +} + +/*********************************************************** +* cViewMenuDetail +***********************************************************/ +cViewMenuDetail::cViewMenuDetail(const char *name) : cSubView(name) { + firstTab = true; + for (int i=0; i < numViewElements; i++) { + delete viewElements[i]; + } + delete[] viewElements; + numViewElements = (int)eVeDisplayDetailedMenu::count; + viewElements = new cViewElement*[numViewElements]; + for (int i=0; i < numViewElements; i++) { + viewElements[i] = NULL; + } + delete[] viewElementsHorizontal; + viewElementsHorizontal = new cViewElement*[numViewElements]; + for (int i=0; i < numViewElements; i++) { + viewElementsHorizontal[i] = NULL; + } + SetViewElements(); + detailedheaderEpg = NULL; + detailedheaderRec = NULL; + detailedheaderPlug = NULL; + tablabels = NULL; + detailViewEpg = NULL; + detailViewRec = NULL; + detailViewText = NULL; + detailViewPlugin = NULL; + SetDetailedView(); +} + +cViewMenuDetail::~cViewMenuDetail(void) { +} + +void cViewMenuDetail::SetDetailedView(void) { + if (!strcmp(viewName, "menudetailedepg")) { + detailViewEpg = new cViewDetailEpg(); + detailView = detailViewEpg; + } else if (!strcmp(viewName, "menudetailedrecording")) { + detailViewRec = new cViewDetailRec(); + detailView = detailViewRec; + } else if (!strcmp(viewName, "menudetailedtext")) { + detailViewText = new cViewDetailText(); + detailView = detailViewText; + } else if (startswith(viewName, "menuplugin")) { + detailViewPlugin = new cViewDetailPlugin(); + detailView = detailViewPlugin; + } else { + esyslog("skindesigner: invalid detailedview %s", viewName); + } + if (detailView) { + detailView->SetOsd(&sdOsd); + } +} + +void cViewMenuDetail::AddTab(cArea *tab) { + if (firstTab) { + tab->SetActiveTab(true); + firstTab = false; + } + detailView->AddArea(tab); +} + +void cViewMenuDetail::SetGlobals(cGlobals *globals) { + cView::SetGlobals(globals); + detailView->SetGlobals(globals); +} + +void cViewMenuDetail::PreCache(void) { + attribs->SetContainer(container.X(), container.Y(), container.Width(), container.Height()); + attribs->Cache(); + if (plugId >= 0 && plugMenuId >= 0) { + cVeDmDetailheaderPlugin *dhPlug = dynamic_cast(viewElements[(int)eVeDisplayDetailedMenu::detailheader]); + dhPlug->SetPlugId(plugId); + dhPlug->SetPlugMenuId(plugMenuId); + dhPlug->SetTokenContainer(); + } + cView::PreCache(); + detailView->SetPlugId(plugId); + detailView->SetPlugMenuId(plugMenuId); + detailView->SetTokenContainer(); + detailView->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height()); + detailView->Cache(); +} + +int cViewMenuDetail::GetWidth(void) { + return detailView->GetWidth(); +} + +void cViewMenuDetail::SetViewElements(void) { + viewElementNames.insert(pair("detailheader", (int)eVeDisplayDetailedMenu::detailheader)); + viewElementNames.insert(pair("tablabels", (int)eVeDisplayDetailedMenu::tablabels)); +} + +void cViewMenuDetail::SetViewElementObjects(void) { + cSubView::SetViewElementObjects(); + if (viewElements[(int)eVeDisplayDetailedMenu::detailheader]) { + if (!strcmp(viewName, "menudetailedepg")) + detailedheaderEpg = dynamic_cast(viewElements[(int)eVeDisplayDetailedMenu::detailheader]); + else if (!strcmp(viewName, "menudetailedrecording")) + detailedheaderRec = dynamic_cast(viewElements[(int)eVeDisplayDetailedMenu::detailheader]); + else if (startswith(viewName, "menuplugin")) + detailedheaderPlug = dynamic_cast(viewElements[(int)eVeDisplayDetailedMenu::detailheader]); + } + + if (viewElements[(int)eVeDisplayDetailedMenu::tablabels]) + tablabels = dynamic_cast(viewElements[(int)eVeDisplayDetailedMenu::tablabels]); +} + +void cViewMenuDetail::SetEvent(const cEvent *event) { + if (detailedheaderEpg) + detailedheaderEpg->SetEvent(event); + if (detailViewEpg) + detailViewEpg->SetEvent(event); +} + +void cViewMenuDetail::SetRecording(const cRecording *recording) { + if (detailedheaderRec) + detailedheaderRec->SetRecording(recording); + if (detailViewRec) + detailViewRec->SetRecording(recording); +} + +void cViewMenuDetail::SetText(const char *text) { + if (detailViewText) + detailViewText->SetText(text); +} + +void cViewMenuDetail::SetPluginText(skindesignerapi::cTokenContainer *tk) { + if (detailedheaderPlug) + detailedheaderPlug->Set(tk); + if (detailViewPlugin) + detailViewPlugin->Set(tk); +} + +void cViewMenuDetail::Clear(void) { + cSubView::Clear(); + cSubView::Close(); + if (detailedheaderEpg) { + detailedheaderEpg->Close(); + } else if (detailedheaderRec) { + detailedheaderRec->Close(); + } else if (detailedheaderPlug) { + detailedheaderPlug->Close(); + } + if (header) { + header->Hide(); + } + if (detailView) { + detailView->Close(); + } +} + +void cViewMenuDetail::Close(void) { + cSubView::Clear(); + cSubView::Close(); + if (detailView) { + detailView->Close(); + } +} + +void cViewMenuDetail::DrawStaticVEs(void) { + cSubView::DrawStaticVEs(); + if (detailedheaderEpg && detailedheaderEpg->Parse()) { + detailedheaderEpg->Render(); + } else if (detailedheaderRec && detailedheaderRec->Parse()) { + detailedheaderRec->Render(); + } else if (detailedheaderPlug && detailedheaderPlug->Parse()) { + detailedheaderPlug->Render(); + } +} + +void cViewMenuDetail::DrawDynamicVEs(void) { + if (datetime) { + datetime->Show(); + if (datetime->Parse()) + datetime->Render(); + } + if (time) { + time->Show(); + if (time->Parse()) + time->Render(); + } +} + +void cViewMenuDetail::DrawDetailedView(void) { + detailView->Clear(); + detailView->ResetTabs(); + if (detailView->Parse()) { + detailView->Render(); + } + if (scrollbar) { + scrollbar->Show(); + DrawScrollbar(); + } + vector tabs; + int activeTab = detailView->GetTabs(tabs); + if (tablabels) { + tablabels->SetTabs(tabs); + tablabels->SetActiveTab(activeTab); + if (tablabels->Parse()) + tablabels->Render(); + } +} + +void cViewMenuDetail::KeyLeft(void) { + if (detailView->NumTabs() > 1) { + detailView->Clear(); + detailView->PrevTab(); + detailView->SetDirty(); + if (tablabels) { + tablabels->Clear(); + tablabels->SetActiveTab(detailView->ActiveTab()); + if (tablabels->Parse()) + tablabels->Render(); + } + sdOsd.Flush(); + detailView->Render(); + if (scrollbar) { + DrawScrollbar(); + } + } else { + //scroll page + if (detailView->ScrollUp(true)) { + if (scrollbar) + DrawScrollbar(); + } + } +} + +void cViewMenuDetail::KeyRight(void) { + if (detailView->NumTabs() > 1) { + detailView->Clear(); + detailView->NextTab(); + detailView->SetDirty(); + if (tablabels) { + tablabels->Clear(); + tablabels->SetActiveTab(detailView->ActiveTab()); + if (tablabels->Parse()) + tablabels->Render(); + } + sdOsd.Flush(); + detailView->Render(); + if (scrollbar) { + DrawScrollbar(); + } + + } else { + //scroll page + if (detailView->ScrollDown(true)) { + if (scrollbar) + DrawScrollbar(); + } + } +} + +void cViewMenuDetail::KeyUp(void) { + if (detailView->ScrollUp()) { + if (scrollbar) + DrawScrollbar(); + } +} + +void cViewMenuDetail::KeyDown(void) { + if (scrollbar && detailView->ScrollDown()) { + if (scrollbar) + DrawScrollbar(); + } +} + +void cViewMenuDetail::SetTransparency(int transparency, bool forceDetached) { + if (detailedheaderEpg) + detailedheaderEpg->SetTransparency(transparency); + if (detailedheaderRec) + detailedheaderRec->SetTransparency(transparency); + if (tablabels) + tablabels->SetTransparency(transparency); + if (detailView) + detailView->SetTransparency(transparency); +} + +void cViewMenuDetail::DrawScrollbar(void) { + int barheight = 0; + int offset = 0; + bool end = true; + detailView->Scrollbar(barheight, offset, end); + scrollbar->SetDetail(barheight, offset, end); + scrollbar->Render(); +} -- cgit v1.2.3