summaryrefslogtreecommitdiff
path: root/views
diff options
context:
space:
mode:
Diffstat (limited to 'views')
-rw-r--r--views/displaychannelview.c1
-rw-r--r--views/displaymenudetailview.c24
-rw-r--r--views/displaymenudetailview.h2
-rw-r--r--views/displaymenuitemcurrentview.c45
-rw-r--r--views/displaymenuitemcurrentview.h13
-rw-r--r--views/displaymenuitemview.c55
-rw-r--r--views/displaymenuitemview.h12
-rw-r--r--views/displaymenulistview.c11
-rw-r--r--views/displaymenulistview.h1
-rw-r--r--views/displaymenurootview.c62
-rw-r--r--views/displaymenurootview.h12
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);