introduced cViewElement

This commit is contained in:
louis
2015-03-22 12:52:10 +01:00
parent 21b70b426d
commit fcf90375fa
10 changed files with 236 additions and 232 deletions

View File

@@ -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;
@@ -815,6 +829,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);