summaryrefslogtreecommitdiff
path: root/views/displaymenurootview.c
diff options
context:
space:
mode:
Diffstat (limited to 'views/displaymenurootview.c')
-rw-r--r--views/displaymenurootview.c732
1 files changed, 0 insertions, 732 deletions
diff --git a/views/displaymenurootview.c b/views/displaymenurootview.c
deleted file mode 100644
index 76d8b86..0000000
--- a/views/displaymenurootview.c
+++ /dev/null
@@ -1,732 +0,0 @@
-#define __STL_CONFIG_H
-#include <vdr/menu.h>
-#include "../displaymenu.h"
-#include "displaymenurootview.h"
-#include "displayviewelements.h"
-#include "../config.h"
-#include "../libcore/helpers.h"
-
-cDisplayMenuRootView::cDisplayMenuRootView(cTemplateView *rootView) : cView(rootView) {
- fadeOut = false;
- cat = mcUndefined;
- selectedPluginMainMenu = "";
- sortMode = msmUnknown;
- sortModeLast = msmUnknown;
- menuTitle = "";
- currentRecording = "";
- viewType = svUndefined;
- subView = NULL;
- subViewAvailable = false;
- subViewInit = true;
- pluginName = "";
- pluginMenu = -1;
- pluginMenuType = mtUnknown;
- pluginMenuChanged = false;
- view = NULL;
- listView = NULL;
- detailView = NULL;
- buttonTexts[0] = "";
- buttonTexts[1] = "";
- buttonTexts[2] = "";
- buttonTexts[3] = "";
- defaultBackgroundDrawn = false;
- defaultHeaderDrawn = false;
- defaultButtonsDrawn = false;
- defaultDateTimeDrawn = false;
- defaultTimeDrawn = false;
- defaultMessageDrawn = false;
- defaultSortmodeDrawn = false;
- DeleteOsdOnExit();
-}
-
-cDisplayMenuRootView::~cDisplayMenuRootView() {
- if (view) {
- delete view;
- view = NULL;
- }
- if (listView) {
- delete listView;
- listView = NULL;
- }
- if (detailView) {
- delete detailView;
- detailView = NULL;
- }
-}
-
-/*******************************************************************
-* Public Functions
-*******************************************************************/
-
-bool cDisplayMenuRootView::createOsd(void) {
- cRect osdSize = tmplView->GetOsdSize();
- bool ok = CreateOsd(cOsd::OsdLeft() + osdSize.X(),
- cOsd::OsdTop() + osdSize.Y(),
- osdSize.Width(),
- osdSize.Height());
- return ok;
-}
-
-/* Categories:
--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 cDisplayMenuRootView::SetMenu(eMenuCategory menuCat, bool menuInit) {
- eSubView newViewType = svUndefined;
- cat = menuCat;
- subViewInit = true;
- bool isListView = true;
- if (menuCat != mcPlugin) {
- pluginName = "";
- pluginMenu = -1;
- pluginMenuType = mtUnknown;
- pluginMenuChanged = false;
- }
- switch (menuCat) {
- case mcMain:
- newViewType = svMenuMain;
- break;
- case mcSetup:
- newViewType = svMenuSetup;
- break;
- case mcSchedule:
- case mcScheduleNow:
- case mcScheduleNext:
- newViewType = svMenuSchedules;
- if (view)
- view->SetMenuCat(menuCat);
- break;
- case mcChannel:
- newViewType = svMenuChannels;
- break;
- case mcTimer:
- newViewType = svMenuTimers;
- break;
- case mcRecording:
- newViewType = svMenuRecordings;
- break;
- case mcEvent:
- newViewType = svMenuDetailedEpg;
- isListView = false;
- break;
- case mcRecordingInfo:
- newViewType = svMenuDetailedRecording;
- isListView = false;
- break;
- case mcText:
- newViewType = svMenuDetailedText;
- isListView = false;
- break;
- case mcPlugin:
- newViewType = svMenuPlugin;
- isListView = ( pluginMenuType == mtList ) ? true : false;
- break;
- default:
- newViewType = svMenuDefault;
- break;
- }
- if (newViewType != viewType || pluginMenuChanged) {
- if (newViewType == svMenuPlugin) {
- subView = tmplView->GetPluginView(pluginName, pluginMenu);
- if (!subView) {
- subViewAvailable = false;
- if (isListView)
- subView = tmplView->GetSubView(svMenuDefault);
- else
- subView = tmplView->GetSubView(svMenuDetailedText);
- } else {
- subViewAvailable = true;
- }
- } else {
- subView = tmplView->GetSubView(newViewType);
- if (!subView) {
- subViewAvailable = false;
- subView = tmplView->GetSubView(svMenuDefault);
- } else {
- subViewAvailable = true;
- }
- }
- //Cleanup
- if (view) {
- delete view;
- view = NULL;
- }
- if (listView) {
- delete listView;
- listView = NULL;
- }
- if (detailView) {
- delete detailView;
- detailView = NULL;
- }
- //Create new View
- switch (newViewType) {
- case svMenuMain:
- view = new cDisplayMenuMainView(subView, menuInit, currentRecording);
- break;
- case svMenuSchedules:
- if (subViewAvailable)
- view = new cDisplayMenuSchedulesView(subView, menuCat, menuInit);
- else
- view = new cDisplayMenuView(subView, menuInit);
- break;
- default:
- view = new cDisplayMenuView(subView, menuInit);
- }
- view->SetMenuCat(cat);
- view->SetButtonTexts(buttonTexts);
- //Cleanup root view
- ClearRootView();
- if (isListView) {
- //Create menu item list
- cTemplateViewList *tmplMenuItems = subView->GetViewList(vlMenuItem);
- if (!tmplMenuItems)
- return;
- listView = new cDisplayMenuListView(tmplMenuItems, -1, menuCat, selectedPluginMainMenu);
- } else {
- //Create detailed view
- detailView = new cDisplayMenuDetailView(subView);
- }
- viewType = newViewType;
- }
-}
-
-void cDisplayMenuRootView::SetSortMode(eMenuSortMode sortMode) {
- this->sortMode = sortMode;
- if (!view)
- return;
- view->SetSortMode(sortMode);
-}
-
-eMenuOrientation cDisplayMenuRootView::MenuOrientation(void) {
- if (!listView) {
- return moVertical;
- }
- return listView->MenuOrientation();
-}
-
-void cDisplayMenuRootView::CorrectDefaultMenu(void) {
- if (viewType > svMenuDefault && viewType != svMenuPlugin) {
- SetMenu(mcUnknown, true);
- }
-}
-
-void cDisplayMenuRootView::SetPluginMenu(string name, int menu, int type) {
- if (pluginName.compare(name) || menu != pluginMenu || type != pluginMenuType)
- pluginMenuChanged = true;
- else
- pluginMenuChanged = false;
- pluginName = name;
- pluginMenu = menu;
- pluginMenuType = (ePluginMenuType)type;
-}
-
-void cDisplayMenuRootView::SetTitle(const char *title) {
- menuTitle = title;
- if (view)
- view->SetTitle(title);
-}
-
-void cDisplayMenuRootView::SetButtonTexts(const char *Red, const char *Green, const char *Yellow, const char *Blue) {
- if (Red)
- buttonTexts[0] = Red;
- else
- buttonTexts[0] = "";
- if (Green)
- buttonTexts[1] = Green;
- else
- buttonTexts[1] = "";
- if (Yellow)
- buttonTexts[2] = Yellow;
- else
- buttonTexts[2] = "";
- if (Blue)
- buttonTexts[3] = Blue;
- else
- buttonTexts[3] = "";
- if (view)
- view->SetButtonTexts(buttonTexts);
-}
-
-void cDisplayMenuRootView::SetTabs(int tab1, int tab2, int tab3, int tab4, int tab5) {
- if (listView) {
- listView->SetTabs(tab1, tab2, tab3, tab4, tab5);
- }
-}
-
-void cDisplayMenuRootView::SetMessage(eMessageType type, const char *text) {
- if (!view)
- return;
- if (!view->DrawMessage(type, text)) {
- defaultMessageDrawn = true;
- DrawMessage(type, text);
- } else {
- defaultMessageDrawn = false;
- }
-}
-
-void cDisplayMenuRootView::SetDetailedViewEvent(const cEvent *event) {
- if (!detailView) {
- if (viewType != svMenuDetailedEpg) {
- SetMenu(mcEvent, true);
- } else {
- detailView = new cDisplayMenuDetailView(subView);
- }
- }
- detailView->SetEvent(event);
-}
-
-void cDisplayMenuRootView::SetDetailedViewRecording(const cRecording *recording) {
- if (!detailView) {
- if (viewType != svMenuDetailedRecording) {
- SetMenu(mcRecordingInfo, true);
- } else {
- detailView = new cDisplayMenuDetailView(subView);
- }
- }
- detailView->SetRecording(recording);
-}
-
-void cDisplayMenuRootView::SetDetailedViewText(const char *text) {
- if (!detailView) {
- if (viewType != svMenuDetailedText) {
- SetMenu(mcText, true);
- } else {
- detailView = new cDisplayMenuDetailView(subView);
- }
- }
- detailView->SetText(text);
-}
-
-bool cDisplayMenuRootView::SetDetailedViewPlugin(map<string,string> *stringTokens, map<string,int> *intTokens, map<string,vector<map<string,string> > > *loopTokens) {
- if (!detailView) {
- SetMenu(mcPlugin, true);
- }
- if (!subViewAvailable) {
- return false;
- }
- detailView->SetPluginTokens(stringTokens, intTokens, loopTokens);
- return true;
-}
-
-void cDisplayMenuRootView::KeyInput(bool up, bool page) {
- 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();
- }
-}
-
-void cDisplayMenuRootView::Clear(void) {
- if (view) {
- view->Lock();
- view->ClearChannel();
- view->ClearEpgSearchFavorite();
- view->Unlock();
- }
- if (listView) {
- listView->Lock();
- listView->Clear();
- listView->Unlock();
- }
- if (detailView) {
- delete detailView;
- detailView = NULL;
- }
-}
-
-void cDisplayMenuRootView::ClearRootView(void) {
- if (defaultBackgroundDrawn && view && view->BackgroundImplemented())
- ClearViewElement(veBackground);
- if (defaultHeaderDrawn)
- ClearViewElement(veHeader);
- if (defaultButtonsDrawn)
- ClearViewElement(veButtons);
- if (defaultDateTimeDrawn)
- ClearViewElement(veDateTime);
- if (defaultTimeDrawn)
- ClearViewElement(veTime);
- if (defaultMessageDrawn)
- ClearViewElement(veMessage);
- if (defaultSortmodeDrawn)
- ClearViewElement(veSortMode);
-}
-
-int cDisplayMenuRootView::GetMaxItems(void) {
- if (listView) {
- return listView->GetMaxItems();
- }
- //wrong menucat
- SetMenu(mcUnknown, true);
- return listView->GetMaxItems();
-}
-
-int cDisplayMenuRootView::GetListViewWidth(void) {
- if (listView) {
- return listView->GetListWidth();
- }
- return 0;
-}
-
-int cDisplayMenuRootView::GetTextAreaWidth(void) {
- if (!tmplView)
- return 1900;
- cTemplateView *tmplSubView = tmplView->GetSubView(svMenuDefault);
- if (!tmplSubView)
- return 1900;
- int areaWidth = tmplSubView->GetNumericParameter(ptWidth);
- if (areaWidth > 0)
- return areaWidth;
- return 1900;
-}
-
-cFont *cDisplayMenuRootView::GetTextAreaFont(void) {
- if (!tmplView)
- return NULL;
- cTemplateView *tmplSubViewDefault = tmplView->GetSubView(svMenuDefault);
- if (!tmplSubViewDefault)
- return NULL;
-
- cTemplateViewList *tmplViewList = tmplSubViewDefault->GetViewList(vlMenuItem);
- if (!tmplViewList)
- return NULL;
-
- return tmplViewList->GetTextAreaFont();
-}
-
-
-void cDisplayMenuRootView::Render(void) {
- if (!view)
- return;
- view->Lock();
- view->DrawDebugGrid();
- if (!view->DrawBackground()) {
- defaultBackgroundDrawn = true;
- DrawBackground();
- } else {
- defaultBackgroundDrawn = false;
- }
-
- if (!view->DrawHeader()) {
- defaultHeaderDrawn = true;
- DrawHeader();
- } else {
- defaultHeaderDrawn = false;
- }
-
- if (!view->DrawSortMode()) {
- defaultSortmodeDrawn = true;
- DrawSortMode();
- } else {
- defaultSortmodeDrawn = false;
- }
-
- if (!view->DrawColorButtons()) {
- defaultButtonsDrawn = true;
- DrawColorButtons();
- } else {
- defaultButtonsDrawn = false;
- }
-
- view->DrawStaticViewElements();
- view->DrawDynamicViewElements();
- view->Unlock();
-}
-
-void cDisplayMenuRootView::RenderMenuItems(void) {
- if (listView)
- listView->Render();
-}
-
-void cDisplayMenuRootView::RenderDetailView(void) {
- if (detailView)
- detailView->Render();
-}
-
-void cDisplayMenuRootView::RenderMenuScrollBar(int Total, int Offset) {
- if (!listView)
- return;
- view->DrawScrollbar(listView->GetMaxItems(), Total, Offset);
-}
-
-bool cDisplayMenuRootView::RenderDynamicElements(void) {
- if (!view)
- return false;
- bool updated = false;
- bool implemented = false;
- if (view->DrawTime(subViewInit, implemented)) {
- defaultTimeDrawn = false;
- updated = true;
- } else if (!implemented && DrawTime(subViewInit)) {
- defaultTimeDrawn = true;
- updated = true;
- }
-
- implemented = false;
- if (view->DrawDateTime(subViewInit, implemented)) {
- defaultDateTimeDrawn = false;
- } else if (!implemented) {
- DrawDateTime(subViewInit);
- defaultDateTimeDrawn = true;
- }
-
- if (view->DrawDynamicViewElements()) {
- updated = true;
- }
-
- if (subViewInit) {
- subViewInit = false;
- return true;
- }
- subViewInit = false;
- return updated;
-}
-
-/*******************************************************************
-* Private Functions
-*******************************************************************/
-
-void cDisplayMenuRootView::DrawBackground(void) {
- map < string, string > stringTokens;
- map < string, int > intTokens;
- DrawViewElement(veBackground, &stringTokens, &intTokens);
-}
-
-void cDisplayMenuRootView::DrawHeader(void) {
- if (!ExecuteViewElement(veHeader)) {
- return;
- }
- if (DetachViewElement(veHeader)) {
- cViewElement *viewElement = GetViewElement(veHeader);
- if (!viewElement) {
- viewElement = new cViewElementMenuHeader(tmplView->GetViewElement(veHeader), cat, menuTitle);
- AddViewElement(veHeader, viewElement);
- viewElement->Start();
- } else {
- if (!viewElement->Starting())
- viewElement->Render();
- }
- } else {
- map < string, string > stringTokens;
- map < string, int > intTokens;
- SetMenuHeader(cat, menuTitle, stringTokens, intTokens);
- ClearViewElement(veHeader);
- DrawViewElement(veHeader, &stringTokens, &intTokens);
- }
-}
-
-void cDisplayMenuRootView::DrawDateTime(bool forced) {
- if (!ExecuteViewElement(veDateTime)) {
- return;
- }
-
- if (DetachViewElement(veDateTime)) {
- cViewElement *viewElement = GetViewElement(veDateTime);
- if (!viewElement) {
- viewElement = new cViewElement(tmplView->GetViewElement(veDateTime), this);
- viewElement->SetCallback(veDateTime, &cDisplayMenuRootView::SetDate);
- AddViewElement(veDateTime, viewElement);
- viewElement->Start();
- } else {
- if (!viewElement->Starting())
- viewElement->Render();
- }
- } else {
- map < string, string > stringTokens;
- map < string, int > intTokens;
-
- if (!SetDate(forced, stringTokens, intTokens))
- return;
- ClearViewElement(veDateTime);
- DrawViewElement(veDateTime, &stringTokens, &intTokens);
- }
-}
-
-bool cDisplayMenuRootView::DrawTime(bool forced) {
- if (!ExecuteViewElement(veTime)) {
- return false;
- }
-
- if (DetachViewElement(veTime)) {
- cViewElement *viewElement = GetViewElement(veTime);
- if (!viewElement) {
- viewElement = new cViewElement(tmplView->GetViewElement(veTime), this);
- viewElement->SetCallback(veTime, &cDisplayMenuRootView::SetTime);
- AddViewElement(veTime, viewElement);
- viewElement->Start();
- } else {
- if (!viewElement->Starting())
- if (!viewElement->Render())
- return false;
- }
- } else {
-
- map < string, string > stringTokens;
- map < string, int > intTokens;
-
- if (!SetTime(forced, stringTokens, intTokens)) {
- return false;
- }
-
- ClearViewElement(veTime);
- DrawViewElement(veTime, &stringTokens, &intTokens);
- }
- return true;
-}
-
-void cDisplayMenuRootView::DrawSortMode(void) {
- if (!ExecuteViewElement(veSortMode)) {
- return;
- }
- if (sortMode == msmUnknown) {
- if (sortModeLast != msmUnknown)
- ClearViewElement(veSortMode);
- sortModeLast = msmUnknown;
- return;
- }
- if (sortMode == sortModeLast) {
- return;
- }
- sortModeLast = sortMode;
-
- map < string, string > stringTokens;
- map < string, int > intTokens;
-
- bool sortNumber = (sortMode == msmNumber) ? true : false;
- bool sortName = (sortMode == msmName) ? true : false;
- bool sortTime = (sortMode == msmTime) ? true : false;
- bool sortProvider = (sortMode == msmProvider) ? true : false;
-
- intTokens.insert(pair<string, int>("sortnumber", sortNumber));
- intTokens.insert(pair<string, int>("sortname", sortName));
- intTokens.insert(pair<string, int>("sorttime", sortTime));
- intTokens.insert(pair<string, int>("sortprovider", sortProvider));
-
- ClearViewElement(veSortMode);
- DrawViewElement(veSortMode, &stringTokens, &intTokens);
- return;
-}
-
-void cDisplayMenuRootView::DrawColorButtons(void) {
- if (!ExecuteViewElement(veButtons)) {
- return;
- }
-
- map < string, string > stringTokens;
- map < string, int > intTokens;
-
- stringTokens.insert(pair<string,string>("red", buttonTexts[0]));
- stringTokens.insert(pair<string,string>("green", buttonTexts[1]));
- stringTokens.insert(pair<string,string>("yellow", buttonTexts[2]));
- stringTokens.insert(pair<string,string>("blue", buttonTexts[3]));
-
- int colorKeys[4] = { Setup.ColorKey0, Setup.ColorKey1, Setup.ColorKey2, Setup.ColorKey3 };
-
- for (int button = 1; button < 5; button++) {
- string red = *cString::sprintf("red%d", button);
- string green = *cString::sprintf("green%d", button);
- string yellow = *cString::sprintf("yellow%d", button);
- string blue = *cString::sprintf("blue%d", button);
- bool isRed = false;
- bool isGreen = false;
- bool isYellow = false;
- bool isBlue = false;
- switch (colorKeys[button-1]) {
- case 0:
- isRed = true;
- break;
- case 1:
- isGreen = true;
- break;
- case 2:
- isYellow = true;
- break;
- case 3:
- isBlue = true;
- break;
- default:
- break;
- }
- intTokens.insert(pair<string, int>(red, isRed));
- intTokens.insert(pair<string, int>(green, isGreen));
- intTokens.insert(pair<string, int>(yellow, isYellow));
- intTokens.insert(pair<string, int>(blue, isBlue));
- }
-
- ClearViewElement(veButtons);
- DrawViewElement(veButtons, &stringTokens, &intTokens);
-}
-
-void cDisplayMenuRootView::DrawMessage(eMessageType type, const char *text) {
- if (!text) {
- if (DetachViewElement(veMessage))
- DestroyDetachedViewElement(veMessage);
- else
- ClearViewElement(veMessage);
- return;
- }
-
- if (DetachViewElement(veMessage)) {
- cViewElement *viewElement = GetViewElement(veMessage);
- if (!viewElement) {
- viewElement = new cViewElementMenuMessage(tmplView->GetViewElement(veMessage), type, text);
- AddViewElement(veMessage, viewElement);
- viewElement->Start();
- } else {
- if (!viewElement->Starting())
- viewElement->Render();
- }
- } else {
- map < string, string > stringTokens;
- map < string, int > intTokens;
- SetMenuMessage(type, text, stringTokens, intTokens);
- ClearViewElement(veMessage);
- DrawViewElement(veMessage, &stringTokens, &intTokens);
- }
-}
-
-void cDisplayMenuRootView::Action(void) {
- if (!view)
- return;
- SetInitFinished();
- Render();
- view->Start();
- FadeIn();
- DoFlush();
-}