summaryrefslogtreecommitdiff
path: root/views/displaypluginview.c
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2015-03-12 17:28:35 +0100
committerlouis <louis.braun@gmx.de>2015-03-12 17:28:35 +0100
commit44680b6ce80221e91cb14dca9ca7fad7015f1297 (patch)
tree8af805db50568ba41ebb461309d5724320295441 /views/displaypluginview.c
parent45cb6c1663d66ebc22bed8dbc8cdbacdc82ad4a8 (diff)
downloadvdr-plugin-skindesigner-0.3.0.tar.gz
vdr-plugin-skindesigner-0.3.0.tar.bz2
version 0.3.00.3.0
Diffstat (limited to 'views/displaypluginview.c')
-rw-r--r--views/displaypluginview.c207
1 files changed, 204 insertions, 3 deletions
diff --git a/views/displaypluginview.c b/views/displaypluginview.c
index 89ff94c..f3471cb 100644
--- a/views/displaypluginview.c
+++ b/views/displaypluginview.c
@@ -1,17 +1,26 @@
#define __STL_CONFIG_H
#include "displaypluginview.h"
-cDisplayPluginView::cDisplayPluginView(cTemplateView *tmplView) : cView(tmplView) {
+cDisplayPluginView::cDisplayPluginView(cTemplateView *tmplView, bool isRootView) : cView(tmplView) {
+ init = true;
+ tabInit = true;
+ tabScrolled = true;
+ hidden = false;
intTokens = NULL;
stringTokens = NULL;
loopTokens = NULL;
- DeleteOsdOnExit();
+ currentTmplTab = NULL;
+ tabView = NULL;
+ if (isRootView)
+ DeleteOsdOnExit();
SetFadeTime(tmplView->GetNumericParameter(ptFadeTime));
}
cDisplayPluginView::~cDisplayPluginView() {
CancelSave();
FadeOut();
+ if (tabView)
+ delete tabView;
}
bool cDisplayPluginView::createOsd(void) {
@@ -23,10 +32,49 @@ bool cDisplayPluginView::createOsd(void) {
return ok;
}
+void cDisplayPluginView::Deactivate(bool hide) {
+ Stop();
+ if (!hide)
+ return;
+ HidePixmaps();
+ for (map< int, cViewGrid* >::iterator it = viewGrids.begin(); it != viewGrids.end(); it++) {
+ cViewGrid *viewGrid = it->second;
+ viewGrid->Hide();
+ }
+ hidden = true;
+}
+
+void cDisplayPluginView::Activate(void) {
+ if (tvScaled) {
+ cDevice::PrimaryDevice()->ScaleVideo(scalingWindow);
+ }
+ if (hidden) {
+ ShowPixmaps();
+ for (map< int, cViewGrid* >::iterator it = viewGrids.begin(); it != viewGrids.end(); it++) {
+ cViewGrid *viewGrid = it->second;
+ viewGrid->Show();
+ }
+ }
+ Start();
+}
+
+void cDisplayPluginView::CleanViewElement(int id) {
+ if (ViewElementScrolls((eViewElement)id)) {
+ currentlyScrolling = false;
+ if (Running())
+ Stop();
+ DestroyViewElement((eViewElement)id);
+ } else {
+ ClearViewElement((eViewElement)id);
+ }
+}
+
void cDisplayPluginView::DisplayViewElement(int id) {
if (!intTokens || !stringTokens || !loopTokens)
return;
DrawViewElement((eViewElement)id, stringTokens, intTokens, loopTokens);
+ if (!init && ViewElementScrolls((eViewElement)id))
+ Start();
}
void cDisplayPluginView::InitGrids(int viewGridID) {
@@ -75,9 +123,162 @@ void cDisplayPluginView::ClearGrids(int viewGridID) {
(hit->second)->Clear();
}
+void cDisplayPluginView::SetTabIntTokens(map<string,int> *intTokens) {
+ tabIntTokens = *intTokens;
+}
+
+void cDisplayPluginView::SetTabStringTokens(map<string,string> *stringTokens) {
+ tabStringTokens = *stringTokens;
+}
+
+void cDisplayPluginView::SetTabLoopTokens(map<string,vector<map<string,string> > > *loopTokens) {
+ tabLoopTokens = *loopTokens;
+}
+
+void cDisplayPluginView::SetTabs(void) {
+ tmplView->InitViewTabIterator();
+ cTemplateViewTab *tmplTab = NULL;
+ while(tmplTab = tmplView->GetNextViewTab()) {
+ tmplTab->ParseDynamicParameters(&tabIntTokens, true);
+ tmplTab->ClearDynamicFunctionParameters();
+ tmplTab->ParseDynamicFunctionParameters(&tabStringTokens, &tabIntTokens);
+ if (tmplTab->DoExecute()) {
+ activeTabs.push_back(tmplTab);
+ }
+ }
+ atIt = activeTabs.begin();
+}
+
+void cDisplayPluginView::TabLeft(void) {
+ if (activeTabs.size() > 1) {
+ currentTmplTab = GetPrevTab();
+ delete tabView;
+ tabView = NULL;
+ tabScrolled = true;
+ } else {
+ tabScrolled = tabView->KeyLeft();
+ }
+}
+
+void cDisplayPluginView::TabRight(void) {
+ if (activeTabs.size() > 1) {
+ currentTmplTab = GetNextTab();
+ delete tabView;
+ tabView = NULL;
+ tabScrolled = true;
+ } else {
+ tabScrolled = tabView->KeyRight();
+ }
+}
+
+void cDisplayPluginView::TabUp(void) {
+ tabScrolled = tabView->KeyUp();
+}
+
+void cDisplayPluginView::TabDown(void) {
+ tabScrolled = tabView->KeyDown();
+}
+
+void cDisplayPluginView::DisplayTab(void) {
+ if (tabInit) {
+ currentTmplTab = *atIt;
+ tabInit = false;
+ }
+ if (!tabView) {
+ tabView = new cDisplayMenuTabView(currentTmplTab);
+ tabView->SetTokens(&tabIntTokens, &tabStringTokens, &tabLoopTokens);
+ tabView->CreateTab();
+ tabView->Start();
+ DrawTabLabels();
+ }
+ if (tabScrolled) {
+ DrawScrollbar();
+ }
+}
+
+cTemplateViewTab *cDisplayPluginView::GetPrevTab(void) {
+ if (atIt == activeTabs.begin()) {
+ atIt = activeTabs.end();
+ }
+ atIt--;
+ return *atIt;
+}
+
+cTemplateViewTab *cDisplayPluginView::GetNextTab(void) {
+ atIt++;
+ if (atIt == activeTabs.end()) {
+ atIt = activeTabs.begin();
+ }
+ return *atIt;
+}
+
+void cDisplayPluginView::DrawScrollbar(void) {
+ map < string, string > scrollbarStringTokens;
+ map < string, int > scrollbarIntTokens;
+
+ int barTop = 0;
+ int barHeight = 0;
+ tabView->GetScrollbarPosition(barTop, barHeight);
+
+ scrollbarIntTokens.insert(pair<string,int>("height", barHeight));
+ scrollbarIntTokens.insert(pair<string,int>("offset", barTop));
+ ClearViewElement((eViewElement)pveScrollbar);
+ DrawViewElement((eViewElement)pveScrollbar, &scrollbarStringTokens, &scrollbarIntTokens);
+}
+
+void cDisplayPluginView::DrawTabLabels(void) {
+ if (!ViewElementImplemented((eViewElement)pveTablabels)) {
+ return;
+ }
+ map < string, string > labelStringTokens;
+ map < string, int > labelIntTokens;
+ map < string, vector< map< string, string > > > labelLoopTokens;
+
+ string labelPrev = "";
+ string labelPrevTemp = "";
+ string labelCurrent = "";
+ string labelNext = "";
+ bool wasCurrent = false;
+ vector< map< string, string > > tabLabels;
+ for (list<cTemplateViewTab*>::iterator it = activeTabs.begin(); it != activeTabs.end(); it++) {
+ cTemplateViewTab *tab = *it;
+ map< string, string > tabLabel;
+ tabLabel.insert(pair< string, string >("tabs[title]", tab->GetName()));
+ if (wasCurrent) {
+ labelNext = tab->GetName();
+ }
+ if (tab == currentTmplTab) {
+ wasCurrent = true;
+ labelCurrent = tab->GetName();
+ labelPrev = labelPrevTemp;
+ tabLabel.insert(pair< string, string >("tabs[current]", "1"));
+ } else {
+ wasCurrent = false;
+ tabLabel.insert(pair< string, string >("tabs[current]", "0"));
+ }
+ labelPrevTemp = tab->GetName();
+ tabLabels.push_back(tabLabel);
+ }
+ if (labelNext.size() == 0 && activeTabs.size() > 0) {
+ cTemplateViewTab *firstTab = activeTabs.front();
+ labelNext = firstTab->GetName();
+ }
+ if (labelPrev.size() == 0 && activeTabs.size() > 0) {
+ cTemplateViewTab *lastTab = activeTabs.back();
+ labelPrev = lastTab->GetName();
+ }
+ labelStringTokens.insert(pair< string, string >("currenttab", labelCurrent));
+ labelStringTokens.insert(pair< string, string >("nexttab", labelNext));
+ labelStringTokens.insert(pair< string, string >("prevtab", labelPrev));
+ labelLoopTokens.insert(pair< string, vector< map< string, string > > >("tabs", tabLabels));
+
+ ClearViewElement((eViewElement)pveTablabels);
+ DrawViewElement((eViewElement)pveTablabels, &labelStringTokens, &labelIntTokens, &labelLoopTokens);
+}
+
void cDisplayPluginView::Action(void) {
SetInitFinished();
FadeIn();
DoFlush();
cView::Action();
-}
+} \ No newline at end of file