diff options
Diffstat (limited to 'views/view.c')
| -rw-r--r-- | views/view.c | 156 |
1 files changed, 138 insertions, 18 deletions
diff --git a/views/view.c b/views/view.c index 0c8c584..3bebde7 100644 --- a/views/view.c +++ b/views/view.c @@ -11,13 +11,13 @@ cView::cView(cTemplateView *tmplView) : cPixmapContainer(tmplView->GetNumPixmaps if (tvScaled) {
cDevice::PrimaryDevice()->ScaleVideo(scalingWindow);
}
- tmplItem = NULL;
+ tmplViewElement = NULL;
tmplTab = NULL;
Init();
}
-cView::cView(cTemplateViewElement *tmplItem) : cPixmapContainer(tmplItem ? tmplItem->GetNumPixmaps() : 0) {
- this->tmplItem = tmplItem;
+cView::cView(cTemplateViewElement *tmplViewElement) : cPixmapContainer(tmplViewElement ? tmplViewElement->GetNumPixmaps() : 0) {
+ this->tmplViewElement = tmplViewElement;
tmplView = NULL;
tmplTab = NULL;
tvScaled = false;
@@ -27,7 +27,7 @@ cView::cView(cTemplateViewElement *tmplItem) : cPixmapContainer(tmplItem ? tmplI cView::cView(cTemplateViewTab *tmplTab) : cPixmapContainer(1) {
this->tmplTab = tmplTab;
tmplView = NULL;
- tmplItem = NULL;
+ tmplViewElement = NULL;
tvScaled = false;
Init();
}
@@ -36,6 +36,9 @@ cView::~cView() { if (tvScaled) {
cDevice::PrimaryDevice()->ScaleVideo(cRect::Null);
}
+ for (map<eViewElement,cViewElement*>::iterator dVeIt = detachedViewElements.begin(); dVeIt != detachedViewElements.end(); dVeIt++) {
+ delete dVeIt->second;
+ }
}
void cView::Init(void) {
@@ -72,9 +75,9 @@ void cView::Stop(void) { void cView::DrawViewElement(eViewElement ve, map <string,string> *stringTokens, map <string,int> *intTokens, map < string, vector< map< string, string > > > *loopTokens) {
//setting correct ViewElement, depending which constructor was used
- cTemplateViewElement *viewElement;
- if (tmplItem && (ve == veMenuCurrentItemDetail || ve == veOnPause)) {
- viewElement = tmplItem;
+ cTemplateViewElement *viewElement = NULL;
+ if (tmplViewElement) {
+ viewElement = tmplViewElement;
} else if (tmplView) {
viewElement = tmplView->GetViewElement(ve);
}
@@ -235,6 +238,17 @@ bool cView::ViewElementScrolls(eViewElement ve) { return false;
}
+cViewElement *cView::GetViewElement(eViewElement ve) {
+ map < eViewElement, cViewElement* >::iterator hit = detachedViewElements.find(ve);
+ if (hit == detachedViewElements.end())
+ return NULL;
+ cViewElement *viewElement = hit->second;
+ return viewElement;
+}
+
+void cView::AddViewElement(eViewElement ve, cViewElement *viewElement) {
+ detachedViewElements.insert(pair< eViewElement, cViewElement* >(ve, viewElement));
+}
void cView::CreateViewPixmap(int num, cTemplatePixmap *pix, cRect *size) {
cRect pixSize;
@@ -816,6 +830,112 @@ void cView::DoDrawImage(int num, cTemplateFunction *func, int x0, int y0) { }
/***********************************************************************
+* cViewElement
+************************************************************************/
+
+cViewElement::cViewElement(cTemplateViewElement *tmplViewElement) : cView(tmplViewElement) {
+ delay = tmplViewElement->GetNumericParameter(ptDelay);
+ SetFadeTime(tmplViewElement->GetNumericParameter(ptFadeTime));
+}
+
+cViewElement::~cViewElement() {
+ CancelSave();
+}
+
+void cViewElement::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);
+ }
+ }
+}
+
+void cViewElement::Draw(map < string, vector< map< string, string > > > *loopTokens) {
+ if (!tmplViewElement)
+ return;
+
+ if (tmplViewElement->DebugTokens()) {
+ DebugTokens("viewelement", &stringTokens, &intTokens, loopTokens);
+ }
+ //iterate through pixmaps of viewelement
+ int pixCurrent = 0;
+ tmplViewElement->InitIterator();
+ cTemplatePixmap *pix = NULL;
+ while(pix = tmplViewElement->GetNextPixmap()) {
+ //reset Template
+ pix->ClearDynamicParameters();
+ //create Pixmap if already fully parsed
+ if (!PixmapExists(pixCurrent) && pix->Ready() && pix->DoExecute() && !pix->Scrolling()) {
+ CreateViewPixmap(pixCurrent, pix);
+ }
+ //check if pixmap needs dynamic parameters
+ if ((!pix->Ready() || !pix->DoExecute()) && !pix->Scrolling()) {
+ //parse dynamic parameters and initiate functions
+ pix->ParseDynamicParameters(&intTokens, true);
+ if (pix->Ready() && pix->DoExecute()) {
+ CreateViewPixmap(pixCurrent, pix);
+ }
+ } else {
+ //parse dynamic parameters but not initiate functions
+ pix->ParseDynamicParameters(&intTokens, false);
+ }
+ //if pixmap still not valid, skip
+ if (!pix->Ready() && !pix->Scrolling()) {
+ pixCurrent++;
+ continue;
+ }
+ //if condition for pixmap set, check if cond is true
+ if (!pix->DoExecute()) {
+ pixCurrent++;
+ continue;
+ }
+ //parse dynamic tokens of pixmap functions
+ pix->ClearDynamicFunctionParameters();
+ pix->ParseDynamicFunctionParameters(&stringTokens, &intTokens);
+
+ if (!PixmapExists(pixCurrent) && pix->Scrolling()) {
+ cSize drawportSize;
+ scrolling = pix->CalculateDrawPortSize(drawportSize, loopTokens);
+ if (scrolling) {
+ /*
+ CreateScrollingPixmap(pixCurrent, pix, drawportSize);
+ pix->SetScrollingTextWidth();
+ veScroll = ve;
+ scrollingPix = pixCurrent;
+ scrollOrientation = pix->GetNumericParameter(ptOrientation);
+ scrollMode = pix->GetNumericParameter(ptScrollMode);
+ scrollDelay = pix->GetNumericParameter(ptDelay);
+ scrollSpeed = pix->GetNumericParameter(ptScrollSpeed);
+ */
+ } else {
+ CreateViewPixmap(pixCurrent, pix);
+ }
+ }
+ if (pix->DoDebug()) {
+ pix->Debug();
+ }
+
+ DrawPixmap(pixCurrent, pix, loopTokens);
+ pixCurrent++;
+ }
+}
+
+void cViewElement::Clear(void) {
+ int pixMax = NumPixmaps();
+ for (int pixCurrent = 0; pixCurrent < pixMax; pixCurrent++) {
+ Fill(pixCurrent, clrTransparent);
+ }
+}
+
+/***********************************************************************
* cViewListItem
************************************************************************/
@@ -832,18 +952,18 @@ cViewListItem::~cViewListItem() { cRect cViewListItem::DrawListItem(map <string,string> *stringTokens, map <string,int> *intTokens) {
cRect posItem;
- if (!tmplItem)
+ if (!tmplViewElement)
return posItem;
- if (tmplItem->DebugTokens()) {
+ if (tmplViewElement->DebugTokens()) {
DebugTokens("ListItem", stringTokens, intTokens);
}
- tmplItem->InitIterator();
+ tmplViewElement->InitIterator();
cTemplatePixmap *pix = NULL;
int pixCurrent = 0;
- while(pix = tmplItem->GetNextPixmap()) {
+ while(pix = tmplViewElement->GetNextPixmap()) {
SetListElementPosition(pix);
if (pixCurrent == 0) {
posItem = pix->GetPixmapSize();
@@ -988,13 +1108,13 @@ void cGrid::SetCurrent(bool current) { }
void cGrid::Move(void) {
- if (!tmplItem)
+ if (!tmplViewElement)
return;
- tmplItem->InitIterator();
+ tmplViewElement->InitIterator();
cTemplatePixmap *pix = NULL;
int pixCurrent = 0;
- while(pix = tmplItem->GetNextPixmap()) {
+ while(pix = tmplViewElement->GetNextPixmap()) {
PositionPixmap(pix);
cRect pixViewPort = pix->GetPixmapSize();
SetViewPort(pixCurrent, pixViewPort);
@@ -1006,17 +1126,17 @@ void cGrid::Move(void) { }
void cGrid::Draw(void) {
- if (!tmplItem)
+ if (!tmplViewElement)
return;
- if (tmplItem->DebugTokens()) {
+ if (tmplViewElement->DebugTokens()) {
DebugTokens("Grid", &stringTokens, &intTokens);
}
- tmplItem->InitIterator();
+ tmplViewElement->InitIterator();
cTemplatePixmap *pix = NULL;
int pixCurrent = 0;
- while(pix = tmplItem->GetNextPixmap()) {
+ while(pix = tmplViewElement->GetNextPixmap()) {
PositionPixmap(pix);
if (!PixmapExists(pixCurrent)) {
pix->ParseDynamicParameters(&intTokens, true);
|
