diff options
Diffstat (limited to 'views')
-rw-r--r-- | views/displaychannelview.c | 1 | ||||
-rw-r--r-- | views/displaymenudetailview.c | 24 | ||||
-rw-r--r-- | views/displaymenudetailview.h | 2 | ||||
-rw-r--r-- | views/displaymenuitemcurrentview.c | 45 | ||||
-rw-r--r-- | views/displaymenuitemcurrentview.h | 13 | ||||
-rw-r--r-- | views/displaymenuitemview.c | 55 | ||||
-rw-r--r-- | views/displaymenuitemview.h | 12 | ||||
-rw-r--r-- | views/displaymenulistview.c | 11 | ||||
-rw-r--r-- | views/displaymenulistview.h | 1 | ||||
-rw-r--r-- | views/displaymenurootview.c | 62 | ||||
-rw-r--r-- | views/displaymenurootview.h | 12 |
11 files changed, 229 insertions, 9 deletions
diff --git a/views/displaychannelview.c b/views/displaychannelview.c index 626658f..0c0d8fd 100644 --- a/views/displaychannelview.c +++ b/views/displaychannelview.c @@ -515,6 +515,7 @@ string cDisplayChannelView::GetChannelSep(const cChannel *channel, bool prev) { void cDisplayChannelView::DisplayMessage(eMessageType Type, const char *Text) { if (!Text) { ClearViewElement(veMessage); + return; } map < string, string > stringTokens; diff --git a/views/displaymenudetailview.c b/views/displaymenudetailview.c index 390ef86..c1fbc9c 100644 --- a/views/displaymenudetailview.c +++ b/views/displaymenudetailview.c @@ -8,6 +8,7 @@ cDisplayMenuDetailView::cDisplayMenuDetailView(cTemplateView *tmplDetailView) : recording = NULL; text = NULL; detailViewInit = true; + isPluginTextView = false; currentTmplTab = NULL; tabView = NULL; } @@ -18,6 +19,21 @@ cDisplayMenuDetailView::~cDisplayMenuDetailView() { delete tabView; } +void cDisplayMenuDetailView::SetPluginTokens(map<string,string> *plugStringTokens, map<string,int> *plugIntTokens, map<string,vector<map<string,string> > > *plugLoopTokens) { + for (map<string,string>::iterator it = plugStringTokens->begin(); it != plugStringTokens->end(); it++) { + stringTokens.insert(pair<string,string>(it->first, it->second)); + } + + for (map<string,int>::iterator it = plugIntTokens->begin(); it != plugIntTokens->end(); it++) { + intTokens.insert(pair<string,int>(it->first, it->second)); + } + + for(map<string,vector<map<string,string> > >::iterator it = plugLoopTokens->begin(); it != plugLoopTokens->end(); it++) { + loopTokens.insert(pair<string,vector<map<string,string> > >(it->first, it->second)); + } + isPluginTextView = true; +} + void cDisplayMenuDetailView::Clear(void) { ClearViewElement(veDetailHeader); ClearViewElement(veScrollbar); @@ -435,7 +451,7 @@ bool cDisplayMenuDetailView::LoadReruns(vector< map< string, string > > *reruns) int rerunNaxChannel = config.rerunMaxChannel; Epgsearch_searchresults_v1_0 data; - string strQuery = event->Title(); + string strQuery = (event->Title()) ? event->Title() : ""; data.query = (char *)strQuery.c_str(); data.mode = 0; data.channelNr = 0; @@ -879,6 +895,7 @@ void cDisplayMenuDetailView::DrawHeader(void) { } DrawViewElement(veDetailHeader, &headerStringTokens, &headerIntTokens); + return; } else if (recording) { string name = recording->Name() ? recording->Name() : ""; headerStringTokens.insert(pair<string,string>("name", name)); @@ -937,6 +954,11 @@ void cDisplayMenuDetailView::DrawHeader(void) { headerStringTokens.insert(pair<string,string>("recimgpath", "")); } DrawViewElement(veDetailHeader, &headerStringTokens, &headerIntTokens); + return; + } + + if (isPluginTextView) { + DrawViewElement(veDetailHeader, &stringTokens, &intTokens); } } diff --git a/views/displaymenudetailview.h b/views/displaymenudetailview.h index c739a28..2387609 100644 --- a/views/displaymenudetailview.h +++ b/views/displaymenudetailview.h @@ -9,6 +9,7 @@ class cDisplayMenuDetailView : public cView { private: bool detailViewInit; + bool isPluginTextView; const cEvent *event; const cRecording *recording; const char *text; @@ -39,6 +40,7 @@ public: void SetEvent(const cEvent *event) { this->event = event; }; void SetRecording(const cRecording *recording) { this->recording = recording; }; void SetText(const char *text) { this->text = text; }; + void SetPluginTokens(map<string,string> *plugStringTokens, map<string,int> *plugIntTokens, map<string,vector<map<string,string> > > *plugLoopTokens); void Clear(void); void Render(void); void KeyLeft(void); diff --git a/views/displaymenuitemcurrentview.c b/views/displaymenuitemcurrentview.c index 4044b4f..2be72be 100644 --- a/views/displaymenuitemcurrentview.c +++ b/views/displaymenuitemcurrentview.c @@ -668,3 +668,48 @@ void cDisplayMenuItemCurrentRecordingView::Action(void) { } } } + +/************************************************************* +* cDisplayMenuItemCurrentPluginView +*************************************************************/ + +cDisplayMenuItemCurrentPluginView::cDisplayMenuItemCurrentPluginView(cTemplateViewElement *tmplCurrent, map <string,string> &plugStringTokens, + map <string,int> &plugIntTokens, map<string,vector<map<string,string> > > &pluginLoopTokens) + : cDisplayMenuItemCurrentView(tmplCurrent) { + + stringTokens = plugStringTokens; + intTokens = plugIntTokens; + loopTokens = pluginLoopTokens; +} + +cDisplayMenuItemCurrentPluginView::~cDisplayMenuItemCurrentPluginView() { +} + +void cDisplayMenuItemCurrentPluginView::Prepare(void) { +} + + +void cDisplayMenuItemCurrentPluginView::Render(void) { + SetTokensPosMenuItem(); + DrawViewElement(veMenuCurrentItemDetail, &stringTokens, &intTokens, &loopTokens); +} + +void cDisplayMenuItemCurrentPluginView::Clear(void) { + +} + +void cDisplayMenuItemCurrentPluginView::Action(void) { + SetInitFinished(); + DoSleep(delay); + Render(); + FadeIn(); + DoFlush(); + if (scrolling) { + DoSleep(scrollDelay); + if (scrollOrientation == orHorizontal) { + ScrollHorizontal(scrollingPix, scrollDelay, scrollSpeed, scrollMode); + } else { + ScrollVertical(scrollingPix, scrollDelay, scrollSpeed); + } + } +} diff --git a/views/displaymenuitemcurrentview.h b/views/displaymenuitemcurrentview.h index 12f31e3..e88742f 100644 --- a/views/displaymenuitemcurrentview.h +++ b/views/displaymenuitemcurrentview.h @@ -91,4 +91,17 @@ public: void Render(void); void Clear(void); }; + +class cDisplayMenuItemCurrentPluginView: public cDisplayMenuItemCurrentView { +private: + map<string,vector<map<string,string> > > loopTokens; + void Action(void); +public: + cDisplayMenuItemCurrentPluginView(cTemplateViewElement *tmplCurrent, map <string,string> &plugStringTokens, map <string,int> &plugIntTokens, map<string,vector<map<string,string> > > &pluginLoopTokens); + virtual ~cDisplayMenuItemCurrentPluginView(); + void Prepare(void); + void Render(void); + void Clear(void); +}; + #endif //__DISPLAYMENUITEMCURRENTVIEW_H diff --git a/views/displaymenuitemview.c b/views/displaymenuitemview.c index 0618363..360dcd9 100644 --- a/views/displaymenuitemview.c +++ b/views/displaymenuitemview.c @@ -765,6 +765,61 @@ void cDisplayMenuItemRecordingView::Debug(void) { }
/*************************************************************
+* cDisplayMenuItemPluginView
+*************************************************************/
+
+cDisplayMenuItemPluginView::cDisplayMenuItemPluginView(cTemplateViewList *tmplList, map<string,string> *plugStringTokens, map<string,int> *plugIntTokens,
+ map<string,vector<map<string,string> > > *pluginLoopTokens, int index, bool current, bool selectable)
+ : cDisplayMenuItemView(tmplList, current, selectable) {
+
+ for (map<string,string>::iterator it = plugStringTokens->begin(); it != plugStringTokens->end(); it++) {
+ stringTokens.insert(pair<string,string>(it->first, it->second));
+ }
+
+ for (map<string,int>::iterator it = plugIntTokens->begin(); it != plugIntTokens->end(); it++) {
+ intTokens.insert(pair<string,int>(it->first, it->second));
+ }
+
+ for(map<string,vector<map<string,string> > >::iterator it = pluginLoopTokens->begin(); it != pluginLoopTokens->end(); it++) {
+ loopTokens.insert(pair<string,vector<map<string,string> > >(it->first, it->second));
+ }
+}
+
+cDisplayMenuItemPluginView::~cDisplayMenuItemPluginView() {
+}
+
+void cDisplayMenuItemPluginView::SetTokens(void) {
+ if (!itemInit) return;
+ itemInit = false;
+ intTokens.insert(pair<string,int>("current", current));
+}
+
+
+void cDisplayMenuItemPluginView::Prepare(void) {
+ ArrangeContainer();
+}
+
+void cDisplayMenuItemPluginView::Render(void) {
+
+ DrawListItem(&stringTokens, &intTokens);
+
+ if (current) {
+ cTemplateViewElement *tmplCurrent = tmplList->GetListElementCurrent();
+ if (tmplCurrent) {
+ currentView = new cDisplayMenuItemCurrentPluginView(tmplCurrent, stringTokens, intTokens, loopTokens);
+ currentView->Start();
+ }
+ }
+
+ dirty = false;
+}
+
+void cDisplayMenuItemPluginView::Debug(void) {
+ esyslog("skindesigner: Plugin Menu Item ---------------");
+ cDisplayMenuItemView::Debug();
+}
+
+/*************************************************************
* cDisplayMenuItemTrackView
*************************************************************/
diff --git a/views/displaymenuitemview.h b/views/displaymenuitemview.h index 724fed5..d47dadd 100644 --- a/views/displaymenuitemview.h +++ b/views/displaymenuitemview.h @@ -125,6 +125,18 @@ public: void Debug(void); }; +class cDisplayMenuItemPluginView: public cDisplayMenuItemView { +private: + map<string,vector<map<string,string> > > loopTokens; +public: + cDisplayMenuItemPluginView(cTemplateViewList *tmplList, map<string,string> *plugStringTokens, map<string,int> *plugIntTokens, map<string,vector<map<string,string> > > *pluginLoopTokens, int index, bool current, bool selectable); + virtual ~cDisplayMenuItemPluginView(); + void SetTokens(void); + void Prepare(void); + void Render(void); + void Debug(void); +}; + class cDisplayMenuItemTrackView: public cDisplayMenuItemView { private: const char *title; diff --git a/views/displaymenulistview.c b/views/displaymenulistview.c index c5f1506..6416857 100644 --- a/views/displaymenulistview.c +++ b/views/displaymenulistview.c @@ -182,6 +182,17 @@ void cDisplayMenuListView::AddRecordingMenuItem(int index, const cRecording *rec menuItems[index] = item;
}
+void cDisplayMenuListView::AddPluginMenuItem(map<string,string> *stringTokens, map<string,int> *intTokens, map<string,vector<map<string,string> > > *loopTokens, int index, bool current, bool selectable) {
+ if (index >= itemCount)
+ return;
+ if (menuItems[index]) {
+ menuItems[index]->SetCurrent(current);
+ return;
+ }
+ cDisplayMenuItemView *item = new cDisplayMenuItemPluginView(tmplList, stringTokens, intTokens, loopTokens, index, current, selectable);
+ menuItems[index] = item;
+}
+
void cDisplayMenuListView::AddTracksMenuItem(int index, const char *title, bool current, bool selectable) {
if (index >= itemCount)
return;
diff --git a/views/displaymenulistview.h b/views/displaymenulistview.h index 1c2c85f..2d9d30f 100644 --- a/views/displaymenulistview.h +++ b/views/displaymenulistview.h @@ -27,6 +27,7 @@ public: void AddChannelsMenuItem(int index, const cChannel *channel, bool withProvider, bool current, bool selectable); void AddTimersMenuItem(int index, const cTimer *timer, bool current, bool selectable); void AddRecordingMenuItem(int index, const cRecording *recording, int level, int total, int isNew, bool current, bool selectable); + void AddPluginMenuItem(map<string,string> *stringTokens, map<string,int> *intTokens, map<string, vector<map<string,string> > > *loopTokens, int index, bool current, bool selectable); void AddTracksMenuItem(int index, const char *title, bool current, bool selectable); void Render(void); void Debug(void); diff --git a/views/displaymenurootview.c b/views/displaymenurootview.c index 7c8ee6a..5920502 100644 --- a/views/displaymenurootview.c +++ b/views/displaymenurootview.c @@ -10,6 +10,10 @@ cDisplayMenuRootView::cDisplayMenuRootView(cTemplateView *rootView) : cView(root viewType = svUndefined; subView = NULL; subViewAvailable = false; + pluginName = ""; + pluginMenu = -1; + pluginMenuType = mtUnknown; + pluginMenuChanged = false; view = NULL; listView = NULL; detailView = NULL; @@ -84,6 +88,12 @@ void cDisplayMenuRootView::SetMenu(eMenuCategory menuCat, bool menuInit) { eSubView newViewType = svUndefined; cat = menuCat; bool isListView = true; + if (menuCat != mcPlugin) { + pluginName = ""; + pluginMenu = -1; + pluginMenuType = mtUnknown; + pluginMenuChanged = false; + } switch (menuCat) { case mcMain: newViewType = svMenuMain; @@ -119,17 +129,34 @@ void cDisplayMenuRootView::SetMenu(eMenuCategory menuCat, bool menuInit) { newViewType = svMenuDetailedText; isListView = false; break; + case mcPlugin: + newViewType = svMenuPlugin; + isListView = ( pluginMenuType == mtList ) ? true : false; + break; default: newViewType = svMenuDefault; break; } - if (newViewType != viewType) { - subView = tmplView->GetSubView(newViewType); - if (!subView) { - subViewAvailable = false; - subView = tmplView->GetSubView(svMenuDefault); + 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 { - subViewAvailable = true; + subView = tmplView->GetSubView(newViewType); + if (!subView) { + subViewAvailable = false; + subView = tmplView->GetSubView(svMenuDefault); + } else { + subViewAvailable = true; + } } //Cleanup if (view) { @@ -144,7 +171,6 @@ void cDisplayMenuRootView::SetMenu(eMenuCategory menuCat, bool menuInit) { delete detailView; detailView = NULL; } - //Create new View switch (newViewType) { case svMenuMain: @@ -162,7 +188,6 @@ void cDisplayMenuRootView::SetMenu(eMenuCategory menuCat, bool menuInit) { view->SetMenuCat(cat); //Cleanup root view ClearRootView(); - if (isListView) { //Create menu item list cTemplateViewList *tmplMenuItems = subView->GetViewList(vlMenuItem); @@ -177,6 +202,17 @@ void cDisplayMenuRootView::SetMenu(eMenuCategory menuCat, bool menuInit) { } } +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) @@ -254,6 +290,16 @@ void cDisplayMenuRootView::SetDetailedViewText(const char *text) { 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; diff --git a/views/displaymenurootview.h b/views/displaymenurootview.h index 5b491e5..d49e6b5 100644 --- a/views/displaymenurootview.h +++ b/views/displaymenurootview.h @@ -6,12 +6,22 @@ #include "displaymenulistview.h" #include "displaymenudetailview.h" +enum ePluginMenuType { + mtList, + mtText, + mtUnknown +}; + class cDisplayMenuRootView : public cView { private: eMenuCategory cat; eSubView viewType; cTemplateView *subView; bool subViewAvailable; + string pluginName; + int pluginMenu; + ePluginMenuType pluginMenuType; + bool pluginMenuChanged; cDisplayMenuView *view; cDisplayMenuListView *listView; cDisplayMenuDetailView *detailView; @@ -34,6 +44,7 @@ public: virtual ~cDisplayMenuRootView(); bool createOsd(void); void SetMenu(eMenuCategory menuCat, bool menuInit); + void SetPluginMenu(string name, int menu, int type); void SetTitle(const char *title); void SetChannel(const cChannel *channel) { view->SetChannel(channel); }; const cChannel *GetChannel(void) { return view->GetChannel(); }; @@ -43,6 +54,7 @@ public: void SetDetailedViewEvent(const cEvent *event); void SetDetailedViewRecording(const cRecording *recording); void SetDetailedViewText(const char *text); + bool SetDetailedViewPlugin(map<string,string> *stringTokens, map<string,int> *intTokens, map<string,vector<map<string,string> > > *loopTokens); void KeyInput(bool up, bool page); void Clear(void); int GetMaxItems(void); |