mirror of
https://projects.vdr-developer.org/git/vdr-plugin-skindesigner.git
synced 2023-10-19 17:58:31 +02:00
126 lines
3.3 KiB
C
126 lines
3.3 KiB
C
#include "displaymenutabview.h"
|
|
|
|
|
|
cDisplayMenuTabView::cDisplayMenuTabView(cTemplateViewTab *tmplTab) : cView(tmplTab) {
|
|
}
|
|
|
|
cDisplayMenuTabView::~cDisplayMenuTabView() {
|
|
CancelSave();
|
|
}
|
|
|
|
void cDisplayMenuTabView::SetTokens(map < string, int > *intTokens, map < string, string > *stringTokens, map < string, vector< map< string, string > > > *loopTokens) {
|
|
this->intTokens = intTokens;
|
|
this->stringTokens = stringTokens;
|
|
this->loopTokens = loopTokens;
|
|
}
|
|
|
|
void cDisplayMenuTabView::Clear(void) {
|
|
Fill(0, clrTransparent);
|
|
}
|
|
|
|
void cDisplayMenuTabView::CreateTab(void) {
|
|
//Create Pixmap
|
|
if (!PixmapExists(0)) {
|
|
cSize drawportSize;
|
|
scrolling = tmplTab->CalculateDrawPortSize(drawportSize, loopTokens);
|
|
if (scrolling) {
|
|
CreateScrollingPixmap(0, tmplTab, drawportSize);
|
|
scrollingPix = 0;
|
|
scrollOrientation = orVertical;
|
|
scrollMode = smNone;
|
|
} else {
|
|
CreateViewPixmap(0, tmplTab);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void cDisplayMenuTabView::Render(void) {
|
|
if (tmplTab->DoDebug()) {
|
|
tmplTab->Debug();
|
|
}
|
|
//Draw Tab, flushing every loop
|
|
DrawPixmap(0, tmplTab, loopTokens, true);
|
|
}
|
|
|
|
bool cDisplayMenuTabView::KeyUp(void) {
|
|
if (!scrolling)
|
|
return false;
|
|
int scrollStep = tmplTab->GetScrollStep();
|
|
int aktHeight = DrawportY(0);
|
|
if (aktHeight >= 0) {
|
|
return false;
|
|
}
|
|
int newY = aktHeight + scrollStep;
|
|
if (newY > 0)
|
|
newY = 0;
|
|
SetDrawPortPoint(0, cPoint(0, newY));
|
|
return true;
|
|
}
|
|
|
|
bool cDisplayMenuTabView::KeyDown(void) {
|
|
if (!scrolling)
|
|
return false;
|
|
|
|
int scrollStep = tmplTab->GetScrollStep();
|
|
int aktHeight = DrawportY(0);
|
|
int totalHeight = DrawportHeight(0);
|
|
int screenHeight = Height(0);
|
|
|
|
if (totalHeight - ((-1)*aktHeight) == screenHeight) {
|
|
return false;
|
|
}
|
|
int newY = aktHeight - scrollStep;
|
|
if ((-1)*newY > totalHeight - screenHeight)
|
|
newY = (-1)*(totalHeight - screenHeight);
|
|
SetDrawPortPoint(0, cPoint(0, newY));
|
|
return true;
|
|
}
|
|
|
|
bool cDisplayMenuTabView::KeyLeft(void) {
|
|
if (!scrolling)
|
|
return false;
|
|
if (!PixmapExists(0))
|
|
return false;
|
|
int aktHeight = DrawportY(0);
|
|
int screenHeight = Height(0);
|
|
int newY = aktHeight + screenHeight;
|
|
if (newY > 0)
|
|
newY = 0;
|
|
SetDrawPortPoint(0, cPoint(0, newY));
|
|
return true;
|
|
}
|
|
|
|
bool cDisplayMenuTabView::KeyRight(void) {
|
|
if (!scrolling)
|
|
return false;
|
|
if (!PixmapExists(0))
|
|
return false;
|
|
int aktHeight = DrawportY(0);
|
|
int screenHeight = Height(0);
|
|
int totalHeight = DrawportHeight(0);
|
|
int newY = aktHeight - screenHeight;
|
|
if ((-1)*newY > totalHeight - screenHeight)
|
|
newY = (-1)*(totalHeight - screenHeight);
|
|
SetDrawPortPoint(0, cPoint(0, newY));
|
|
return true;
|
|
}
|
|
|
|
void cDisplayMenuTabView::GetScrollbarPosition(int &barTop, int &barHeight) {
|
|
int y = (-1)*DrawportY(0);
|
|
int totalHeight = DrawportHeight(0);
|
|
int screenHeight = Height(0);
|
|
if (totalHeight == 0)
|
|
return;
|
|
if (totalHeight <= screenHeight)
|
|
barHeight = 1000;
|
|
else {
|
|
barHeight = (double)screenHeight / (double) totalHeight * 1000;
|
|
}
|
|
barTop = (double)y / (double) totalHeight * 1000;
|
|
}
|
|
|
|
void cDisplayMenuTabView::Action(void) {
|
|
Render();
|
|
DoFlush();
|
|
} |