diff options
-rw-r--r-- | coreengine/listelements.c | 21 | ||||
-rw-r--r-- | coreengine/listelements.h | 3 | ||||
-rw-r--r-- | coreengine/view.c | 11 | ||||
-rw-r--r-- | coreengine/viewdisplaymenu.c | 2 | ||||
-rw-r--r-- | coreengine/viewlist.c | 1798 |
5 files changed, 933 insertions, 902 deletions
diff --git a/coreengine/listelements.c b/coreengine/listelements.c index 31452dd..d04f635 100644 --- a/coreengine/listelements.c +++ b/coreengine/listelements.c @@ -479,6 +479,7 @@ cLeMenuSchedules::cLeMenuSchedules(void) { }
cLeMenuSchedules::cLeMenuSchedules(const cLeMenuSchedules &other) : cListElement(other) {
+ currentSchedules = NULL;
}
cLeMenuSchedules::~cLeMenuSchedules(void) {
@@ -789,6 +790,7 @@ cLeMenuChannels::cLeMenuChannels(void) { }
cLeMenuChannels::cLeMenuChannels(const cLeMenuChannels &other) : cListElement(other) {
+ currentChannel = NULL;
channel = NULL;
withProvider = false;
}
@@ -1061,6 +1063,11 @@ cLeMenuTimers::cLeMenuTimers(void) { timer = NULL;
}
+cLeMenuTimers::cLeMenuTimers(const cLeMenuTimers &other) : cListElement(other) {
+ currentTimer = NULL;
+ timer = NULL;
+}
+
cLeMenuTimers::~cLeMenuTimers(void) {
}
@@ -1326,6 +1333,14 @@ cLeMenuRecordings::cLeMenuRecordings(void) { New = 0;
}
+cLeMenuRecordings::cLeMenuRecordings(const cLeMenuRecordings &other) : cListElement(other) {
+ currentRecording = NULL;
+ recording = NULL;
+ level = 0;
+ total = 0;
+ New = 0;
+}
+
cLeMenuRecordings::~cLeMenuRecordings(void) {
}
@@ -1722,6 +1737,12 @@ cLeMenuPlugin::cLeMenuPlugin(void) { plugMenuId = -1;
}
+cLeMenuPlugin::cLeMenuPlugin(const cLeMenuPlugin &other) : cListElement(other) {
+ currentPlugin = NULL;
+ plugId = -1;
+ plugMenuId = -1;
+}
+
cLeMenuPlugin::~cLeMenuPlugin(void) {
}
diff --git a/coreengine/listelements.h b/coreengine/listelements.h index 9fc0b27..1917b81 100644 --- a/coreengine/listelements.h +++ b/coreengine/listelements.h @@ -217,6 +217,7 @@ private: const cTimer *timer;
public:
cLeMenuTimers(void);
+ cLeMenuTimers(const cLeMenuTimers &other);
virtual ~cLeMenuTimers(void);
void SetTokenContainer(void);
void SetCurrentElement(cCeMenuTimers *cur) { currentTimer = cur; currentElement = (cViewElement*)cur; };
@@ -255,6 +256,7 @@ private: char *FolderName(const char *path, int level);
public:
cLeMenuRecordings(void);
+ cLeMenuRecordings(const cLeMenuRecordings &other);
virtual ~cLeMenuRecordings(void);
void SetTokenContainer(void);
void SetCurrentElement(cCeMenuRecordings *cur) { currentRecording = cur; currentElement = (cViewElement*)cur; };
@@ -292,6 +294,7 @@ private: cCeMenuPlugin *currentPlugin;
public:
cLeMenuPlugin(void);
+ cLeMenuPlugin(const cLeMenuPlugin &other);
virtual ~cLeMenuPlugin(void);
void SetTokenContainer(void);
void SetPlugId(int id) { plugId = id; };
diff --git a/coreengine/view.c b/coreengine/view.c index 8bfa22b..f9c5872 100644 --- a/coreengine/view.c +++ b/coreengine/view.c @@ -143,25 +143,29 @@ bool cView::ValidViewList(const char *viewList) { } void cView::PreCache(void) { - if (container.Width() == 0) { + bool rootView = (container.Width() == 0) ? true : false; + if (rootView) { SetContainer(0, 0, cOsd::OsdWidth(), cOsd::OsdHeight()); attribs->SetContainer(0, 0, cOsd::OsdWidth(), cOsd::OsdHeight()); attribs->Cache(); + rootView = true; } //set frame for scaling tv picture tvFrame = attribs->TvFrame(); //cache viewelements + int contX = rootView ? 0 : ((attribs->X() > -1) ? attribs->X() : 0); + int contY = rootView ? 0 : ((attribs->Y() > -1) ? attribs->Y() : 0); for (int i=0; i < numViewElements; i++) { if (!viewElements[i]) continue; - viewElements[i]->SetContainer(0, 0, attribs->Width(), attribs->Height()); + viewElements[i]->SetContainer(contX, contY, attribs->Width(), attribs->Height()); viewElements[i]->Cache(); } if (viewElementsHorizontal) { for (int i=0; i < numViewElements; i++) { if (!viewElementsHorizontal[i]) continue; - viewElementsHorizontal[i]->SetContainer(0, 0, attribs->Width(), attribs->Height()); + viewElementsHorizontal[i]->SetContainer(contX, contY, attribs->Width(), attribs->Height()); viewElementsHorizontal[i]->Cache(); } } @@ -287,6 +291,7 @@ void cView::Flush(void) { void cView::Debug(void) { esyslog("skindesigner: ---> view %s", viewName); + attribs->Debug(); for (int i=0; i < numViewElements; i++) { if (!viewElements[i]) continue; diff --git a/coreengine/viewdisplaymenu.c b/coreengine/viewdisplaymenu.c index d65b145..07933b6 100644 --- a/coreengine/viewdisplaymenu.c +++ b/coreengine/viewdisplaymenu.c @@ -1552,6 +1552,7 @@ void cViewMenuDetail::SetPluginText(skindesignerapi::cTokenContainer *tk) { }
void cViewMenuDetail::Clear(void) {
+ cSubView::Clear();
cSubView::Close();
if (detailedheaderEpg) {
detailedheaderEpg->Close();
@@ -1569,6 +1570,7 @@ void cViewMenuDetail::Clear(void) { }
void cViewMenuDetail::Close(void) {
+ cSubView::Clear();
cSubView::Close();
if (detailView) {
detailView->Close();
diff --git a/coreengine/viewlist.c b/coreengine/viewlist.c index 1d20eea..796132d 100644 --- a/coreengine/viewlist.c +++ b/coreengine/viewlist.c @@ -1,899 +1,899 @@ -#include "viewlist.h"
-
-cViewList::cViewList(void) {
- globals = NULL;
- attribs = new cViewListAttribs((int)eViewListAttribs::count);
- numElements = 0;
- listElement = NULL;
- currentElement = NULL;
- listElements = NULL;
- plugId = -1;
- plugMenuId = -1;
-}
-
-cViewList::~cViewList(void) {
- delete attribs;
- delete listElement;
- delete currentElement;
- if (listElements) {
- for (int i=0; i < numElements; ++i) {
- if (listElements[i]) {
- delete listElements[i];
- listElements[i] = NULL;
- }
- }
- }
- delete[] listElements;
-}
-
-void cViewList::SetGlobals(cGlobals *globals) {
- this->globals = globals;
- if (listElement)
- listElement->SetGlobals(globals);
- if (currentElement)
- currentElement->SetGlobals(globals);
-}
-
-void cViewList::SetContainer(int x, int y, int width, int height) {
- container.SetX(x);
- container.SetY(y);
- container.SetWidth(width);
- container.SetHeight(height);
-}
-
-void cViewList::SetAttributes(vector<stringpair> &attributes) {
- attribs->Set(attributes);
-}
-
-cViewList *cViewList::CreateViewList(const char *name) {
- cViewList *l = NULL;
- if (!strcmp(name, "menudefault"))
- l = new cViewListDefault();
- else if (!strcmp(name, "menumain"))
- l = new cViewListMain();
- else if (!strcmp(name, "menusetup"))
- l = new cViewListMain();
- else if (!strcmp(name, "menuschedules"))
- l = new cViewListSchedules();
- else if (!strcmp(name, "menutimers"))
- l = new cViewListTimers();
- else if (!strcmp(name, "menuchannels"))
- l = new cViewListChannels();
- else if (!strcmp(name, "menurecordings"))
- l = new cViewListRecordings();
- else if (!strcmp(name, "displayaudiotracks"))
- l = new cViewListAudioTracks();
- else if (startswith(name, "menuplugin"))
- l = new cViewListPlugin();
- else
- esyslog("skindesigner: unknown viewlist %s", name);
- return l;
-}
-
-cViewElement *cViewList::CreateListElement(const char *name) {
- cViewElement *le = NULL;
- if (!strcmp(name, "menudefault"))
- le = new cLeMenuDefault();
- else if (!strcmp(name, "menumain"))
- le = new cLeMenuMain();
- else if (!strcmp(name, "menusetup"))
- le = new cLeMenuMain();
- else if (!strcmp(name, "menuschedules"))
- le = new cLeMenuSchedules();
- else if (!strcmp(name, "menutimers"))
- le = new cLeMenuTimers();
- else if (!strcmp(name, "menuchannels"))
- le = new cLeMenuChannels();
- else if (!strcmp(name, "menurecordings"))
- le = new cLeMenuRecordings();
- else if (!strcmp(name, "displayaudiotracks"))
- le = new cLeAudioTracks();
- else if (startswith(name, "menuplugin"))
- le = new cLeMenuPlugin();
- else
- esyslog("skindesigner: unknown viewlist %s", name);
- return le;
-}
-
-cViewElement *cViewList::CreateCurrentElement(const char *name) {
- cViewElement *ce = NULL;
- if (!strcmp(name, "menumain"))
- ce = new cCeMenuMain();
- else if (!strcmp(name, "menusetup"))
- ce = new cCeMenuMain();
- else if (!strcmp(name, "menuschedules"))
- ce = new cCeMenuSchedules();
- else if (!strcmp(name, "menutimers"))
- ce = new cCeMenuTimers();
- else if (!strcmp(name, "menuchannels"))
- ce = new cCeMenuChannels();
- else if (!strcmp(name, "menurecordings"))
- ce = new cCeMenuRecordings();
- else if (startswith(name, "menuplugin"))
- ce = new cCeMenuPlugin();
- else
- esyslog("skindesigner: unknown viewlist %s", name);
- return ce;
-}
-
-void cViewList::AddListElement(cViewElement *listElement) {
- this->listElement = listElement;
- listElement->SetTokenContainer();
-}
-
-void cViewList::AddCurrentElement(cViewElement *currentElement) {
- this->currentElement = currentElement;
- currentElement->SetTokenContainer();
-}
-
-void cViewList::PreCache(void) {
- attribs->SetContainer(container.X(), container.Y(), container.Width(), container.Height());
- attribs->SetGlobals(globals);
- attribs->Cache();
- numElements = attribs->NumListElements();
- orientation = attribs->Orientation();
- eAlign align = attribs->Align();
- int x = attribs->X();
- int y = attribs->Y();
- int width = attribs->Width();
- int height = attribs->Height();
-
- int step = 0;
- if (orientation == eOrientation::vertical) {
- step = height / numElements;
- } else {
- step = width / numElements;
- }
-
- int start = 0;
- if (align == eAlign::center) {
- if (orientation == eOrientation::vertical) {
- start = y + (height - numElements * step) / 2;
- } else {
- start = x + (width - numElements * step) / 2;
- }
- } else if (align == eAlign::bottom) {
- start = y + height - numElements * step;
- } else if (align == eAlign::right) {
- start = x + width - numElements * step;
- }
- Prepare(start, step);
-}
-
-int cViewList::NumItems(void) {
- return numElements;
-}
-
-eOrientation cViewList::Orientation(void) {
- return attribs->Orientation();
-}
-
-void cViewList::Draw(eMenuCategory menuCat) {
- int current = -1;
- for (int i = 0; i < numElements; i++) {
- listElements[i]->SetMenuCategory(menuCat);
- if (listElements[i]->Parse()) {
- listElements[i]->Render();
- if (listElements[i]->Current()) {
- listElements[i]->RenderCurrent();
- current = i;
- }
- }
- }
- if (current >= 0 && listElements[current]) {
- listElements[current]->WakeCurrent();
- }
-
-}
-
-void cViewList::Clear(void) {
- if (!listElements)
- return;
- for (int i = 0; i < numElements; i++) {
- listElements[i]->StopScrolling();
- listElements[i]->Clear();
- }
-}
-
-void cViewList::Close(void) {
- if (!listElements)
- return;
- for (int i = 0; i < numElements; i++) {
- listElements[i]->StopScrolling();
- listElements[i]->Close();
- }
-}
-
-void cViewList::SetTransparency(int transparency) {
- for (int i = 0; i < numElements; i++) {
- if (listElements[i]) {
- listElements[i]->SetTransparency(transparency);
- }
- }
-}
-
-void cViewList::Debug(void) {
-}
-
-/******************************************************************
-* cViewListDefault
-******************************************************************/
-cViewListDefault::cViewListDefault(void) {
- listDefault = NULL;
- colX = NULL;
- colWidths = NULL;
- avrgFontWidth = 0;
- listFont = NULL;
- plugName = NULL;
-}
-
-cViewListDefault::~cViewListDefault(void) {
- delete[] listDefault;
- delete[] colX;
- delete[] colWidths;
-}
-
-void cViewListDefault::Prepare(int start, int step) {
- if (!listElement)
- return;
-
- cLeMenuDefault *tpl = dynamic_cast<cLeMenuDefault*>(listElement);
- if (!tpl) return;
- listDefault = new cLeMenuDefault*[numElements];
- listElements = new cListElement*[numElements];
- int pos = start;
-
- for (int i = 0; i < numElements; i++) {
- listDefault[i] = new cLeMenuDefault(*tpl);
- listElements[i] = listDefault[i];
- listDefault[i]->SetNumber(i);
- listDefault[i]->SetTokenContainer();
- int x, y, width, height;
- if (orientation == eOrientation::vertical) {
- x = attribs->X();
- y = pos;
- width = attribs->Width();
- height = step;
- listDefault[i]->SetAreaHeight(height);
- } else {
- x = pos;
- y = attribs->Y();
- width = step;
- height = attribs->Height();
- listDefault[i]->SetAreaWidth(width);
- }
- listDefault[i]->SetContainer(x, y, width, height);
- listDefault[i]->Cache();
- pos += step;
- }
-
- //Setting average font width
- avrgFontWidth = 20;
- const char *determinateFont = attribs->DeterminateFont();
- if (!determinateFont) {
- return;
- }
- cFunction *f = listDefault[0]->GetFunction(determinateFont);
- if (!f)
- return;
- cFuncDrawText *fdt = dynamic_cast<cFuncDrawText*>(f);
- if (!fdt) {
- return;
- }
- avrgFontWidth = fdt->AvrgFontWidth();
- listFont = fdt->GetFont();
- colX = new int[MAX_TABS];
- colWidths = new int[MAX_TABS];
- for (int i=0; i < MAX_TABS; i++) {
- colX[i] = 0;
- colWidths[i] = 0;
- }
- for (int i = 0; i < numElements; i++) {
- listDefault[i]->SetListInfo(colX, colWidths);
- }
-}
-
-void cViewListDefault::SetTabs(int tab1, int tab2, int tab3, int tab4, int tab5) {
- int itemWidth = attribs->MenuItemWidth();
- if (!tab1) {
- colX[0] = 0;
- colWidths[0] = itemWidth;
- for (int i = 1; i < MAX_TABS; i++) {
- colX[i] = 0;
- colWidths[i] = 0;
- }
- } else {
- colX[0] = 0;
- colX[1] = tab1 ? colX[0] + tab1 : 0;
- colX[2] = tab2 ? colX[1] + tab2 : 0;
- colX[3] = tab3 ? colX[2] + tab3 : 0;
- colX[4] = tab4 ? colX[3] + tab4 : 0;
- colX[5] = tab5 ? colX[4] + tab5 : 0;
- for (int i = 1; i < MAX_TABS; i++)
- colX[i] *= avrgFontWidth;
-
- bool end = false;
- for (int i = 0; i < MAX_TABS; i++) {
- if ( i < MAX_TABS -1 && colX[i+1] > 0) {
- colWidths[i] = colX[i+1] - colX[i];
- } else if (!end) {
- end = true;
- colWidths[i] = itemWidth - colX[i];
- } else {
- colWidths[i] = 0;
- }
- }
- }
-}
-
-void cViewListDefault::Set(const char *text, int index, bool current, bool selectable) {
- if (!current)
- listDefault[index]->StopScrolling();
- listDefault[index]->SetCurrent(current);
- listDefault[index]->SetSelectable(selectable);
- listDefault[index]->SetPlugin(plugName);
- listDefault[index]->SetText(text);
-}
-
-const cFont *cViewListDefault::GetListFont(void) {
- return listFont;
-};
-
-int cViewListDefault::GetListWidth(void) {
- return attribs->MenuItemWidth();
-}
-
-/******************************************************************
-* cViewListMain
-******************************************************************/
-cViewListMain::cViewListMain(void) {
- listMain = NULL;
- currentMain = NULL;
-}
-
-cViewListMain::~cViewListMain(void) {
- delete[] listMain;
-}
-
-void cViewListMain::Prepare(int start, int step) {
- if (!listElement)
- return;
-
- cLeMenuMain *tpl = dynamic_cast<cLeMenuMain*>(listElement);
- if (!tpl) return;
-
- listMain = new cLeMenuMain*[numElements];
- listElements = new cListElement*[numElements];
- int pos = start;
-
- for (int i = 0; i < numElements; i++) {
- listMain[i] = new cLeMenuMain(*tpl);
- listElements[i] = listMain[i];
- listMain[i]->SetNumber(i);
- listMain[i]->SetTokenContainer();
- int x, y, width, height;
- if (orientation == eOrientation::vertical) {
- x = attribs->X();
- y = pos;
- width = attribs->Width();
- height = step;
- listMain[i]->SetAreaHeight(height);
- } else {
- x = pos;
- y = attribs->Y();
- width = step;
- height = attribs->Height();
- listMain[i]->SetAreaWidth(width);
- }
- listMain[i]->SetContainer(x, y, width, height);
- listMain[i]->Cache();
- pos += step;
- }
-
- if (!currentElement) return;
- currentMain = dynamic_cast<cCeMenuMain*>(currentElement);
- if (!currentMain) return;
-
- currentMain->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height());
- currentMain->SetDetached();
- currentMain->Cache();
- for (int i = 0; i < numElements; i++) {
- listMain[i]->SetCurrentElement(currentMain);
- }
-}
-
-void cViewListMain::Set(const char *text, int index, bool current, bool selectable) {
- if (!current)
- listMain[index]->StopScrolling();
- listMain[index]->SetCurrent(current);
- listMain[index]->ClearCurrentElement();
- listMain[index]->SetSelectable(selectable);
- listMain[index]->SetText(text);
-}
-
-const char *cViewListMain::GetPlugin(void) {
- for (int i = 0; i < numElements; i++) {
- if (listMain[i] && listMain[i]->Current()) {
- return listMain[i]->PluginName();
- }
- }
- return NULL;
-}
-/******************************************************************
-* cViewListSchedules
-******************************************************************/
-cViewListSchedules::cViewListSchedules(void) {
- listSchedules = NULL;
- currentSchedules = NULL;
- epgSearchFav = false;
-}
-
-cViewListSchedules::~cViewListSchedules(void) {
- delete[] listSchedules;
-}
-
-void cViewListSchedules::Prepare(int start, int step) {
- if (!listElement)
- return;
-
- cLeMenuSchedules *tpl = dynamic_cast<cLeMenuSchedules*>(listElement);
- if (!tpl) return;
-
- listSchedules = new cLeMenuSchedules*[numElements];
- listElements = new cListElement*[numElements];
- int pos = start;
-
- for (int i = 0; i < numElements; i++) {
- listSchedules[i] = new cLeMenuSchedules(*tpl);
- listElements[i] = listSchedules[i];
- listSchedules[i]->SetNumber(i);
- listSchedules[i]->SetTokenContainer();
- int x, y, width, height;
- if (orientation == eOrientation::vertical) {
- x = attribs->X();
- y = pos;
- width = attribs->Width();
- height = step;
- listSchedules[i]->SetAreaHeight(height);
- } else {
- x = pos;
- y = attribs->Y();
- width = step;
- height = attribs->Height();
- listSchedules[i]->SetAreaWidth(width);
- }
- listSchedules[i]->SetContainer(x, y, width, height);
- listSchedules[i]->Cache();
- pos += step;
- }
-
- if (!currentElement) return;
- currentSchedules = dynamic_cast<cCeMenuSchedules*>(currentElement);
- if (!currentSchedules) return;
-
- currentSchedules->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height());
- currentSchedules->SetDetached();
- currentSchedules->Cache();
- for (int i = 0; i < numElements; i++) {
- listSchedules[i]->SetCurrentElement(currentSchedules);
- }
-}
-
-void cViewListSchedules::Set(const cEvent *event, int index, bool current, bool selectable,
- const cChannel *channel, bool withDate, eTimerMatch timerMatch) {
- if (!current)
- listSchedules[index]->StopScrolling();
- listSchedules[index]->SetCurrent(current);
- listSchedules[index]->ClearCurrentElement();
- listSchedules[index]->SetSelectable(selectable);
- listSchedules[index]->SetEpgSearchFav(epgSearchFav);
- listSchedules[index]->Set(event, channel, withDate, timerMatch);
-}
-
-/******************************************************************
-* cViewListTimers
-******************************************************************/
-cViewListTimers::cViewListTimers(void) {
- listTimers = NULL;
- currentTimer = NULL;
-}
-
-cViewListTimers::~cViewListTimers(void) {
- delete[] listTimers;
-}
-
-void cViewListTimers::Prepare(int start, int step) {
- if (!listElement)
- return;
-
- cLeMenuTimers *tpl = dynamic_cast<cLeMenuTimers*>(listElement);
- if (!tpl) return;
-
- listTimers = new cLeMenuTimers*[numElements];
- listElements = new cListElement*[numElements];
- int pos = start;
-
- for (int i = 0; i < numElements; i++) {
- listTimers[i] = new cLeMenuTimers(*tpl);
- listElements[i] = listTimers[i];
- listTimers[i]->SetNumber(i);
- listTimers[i]->SetTokenContainer();
- int x, y, width, height;
- if (orientation == eOrientation::vertical) {
- x = attribs->X();
- y = pos;
- width = attribs->Width();
- height = step;
- listTimers[i]->SetAreaHeight(height);
- } else {
- x = pos;
- y = attribs->Y();
- width = step;
- height = attribs->Height();
- listTimers[i]->SetAreaWidth(width);
- }
- listTimers[i]->SetContainer(x, y, width, height);
- listTimers[i]->Cache();
- pos += step;
- }
-
- if (!currentElement) return;
- currentTimer = dynamic_cast<cCeMenuTimers*>(currentElement);
- if (!currentTimer) return;
-
- currentTimer->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height());
- currentTimer->SetDetached();
- currentTimer->Cache();
- for (int i = 0; i < numElements; i++) {
- listTimers[i]->SetCurrentElement(currentTimer);
- }
-}
-
-void cViewListTimers::Set(const cTimer *timer, int index, bool current, bool selectable) {
- if (!current)
- listTimers[index]->StopScrolling();
- listTimers[index]->SetCurrent(current);
- listTimers[index]->ClearCurrentElement();
- listTimers[index]->SetSelectable(selectable);
- listTimers[index]->Set(timer);
-}
-
-/******************************************************************
-* cViewListChannels
-******************************************************************/
-cViewListChannels::cViewListChannels(void) {
- listChannels = NULL;
- currentChannel = NULL;
-}
-
-cViewListChannels::~cViewListChannels(void) {
- delete[] listChannels;
-}
-
-void cViewListChannels::Prepare(int start, int step) {
- if (!listElement)
- return;
-
- cLeMenuChannels *tpl = dynamic_cast<cLeMenuChannels*>(listElement);
- if (!tpl) return;
-
- listChannels = new cLeMenuChannels*[numElements];
- listElements = new cListElement*[numElements];
- int pos = start;
-
- for (int i = 0; i < numElements; i++) {
- listChannels[i] = new cLeMenuChannels(*tpl);
- listElements[i] = listChannels[i];
- listChannels[i]->SetNumber(i);
- listChannels[i]->SetTokenContainer();
- int x, y, width, height;
- if (orientation == eOrientation::vertical) {
- x = attribs->X();
- y = pos;
- width = attribs->Width();
- height = step;
- listChannels[i]->SetAreaHeight(height);
- } else {
- x = pos;
- y = attribs->Y();
- width = step;
- height = attribs->Height();
- listChannels[i]->SetAreaWidth(width);
- }
- listChannels[i]->SetContainer(x, y, width, height);
- listChannels[i]->Cache();
- pos += step;
- }
-
- if (!currentElement) return;
- currentChannel = dynamic_cast<cCeMenuChannels*>(currentElement);
- if (!currentChannel) return;
-
- currentChannel->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height());
- currentChannel->SetDetached();
- currentChannel->Cache();
- for (int i = 0; i < numElements; i++) {
- listChannels[i]->SetCurrentElement(currentChannel);
- }
-}
-
-void cViewListChannels::Set(const cChannel *channel, int index, bool current, bool selectable, bool withProvider) {
- if (!current)
- listChannels[index]->StopScrolling();
- listChannels[index]->SetCurrent(current);
- listChannels[index]->ClearCurrentElement();
- listChannels[index]->SetSelectable(selectable);
- listChannels[index]->Set(channel, withProvider);
-}
-
-/******************************************************************
-* cViewListRecordings
-******************************************************************/
-cViewListRecordings::cViewListRecordings(void) {
- listRecordings = NULL;
- currentRecording = NULL;
-}
-
-cViewListRecordings::~cViewListRecordings(void) {
- delete[] listRecordings;
-}
-
-void cViewListRecordings::Prepare(int start, int step) {
- if (!listElement)
- return;
-
- cLeMenuRecordings *tpl = dynamic_cast<cLeMenuRecordings*>(listElement);
- if (!tpl) return;
-
- listRecordings = new cLeMenuRecordings*[numElements];
- listElements = new cListElement*[numElements];
- int pos = start;
-
- for (int i = 0; i < numElements; i++) {
- listRecordings[i] = new cLeMenuRecordings(*tpl);
- listElements[i] = listRecordings[i];
- listRecordings[i]->SetNumber(i);
- listRecordings[i]->SetTokenContainer();
- int x, y, width, height;
- if (orientation == eOrientation::vertical) {
- x = attribs->X();
- y = pos;
- width = attribs->Width();
- height = step;
- listRecordings[i]->SetAreaHeight(height);
- } else {
- x = pos;
- y = attribs->Y();
- width = step;
- height = attribs->Height();
- listRecordings[i]->SetAreaWidth(width);
- }
- listRecordings[i]->SetContainer(x, y, width, height);
- listRecordings[i]->Cache();
- pos += step;
- }
-
- if (!currentElement) return;
- currentRecording = dynamic_cast<cCeMenuRecordings*>(currentElement);
- if (!currentRecording) return;
-
- currentRecording->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height());
- currentRecording->SetDetached();
- currentRecording->Cache();
- for (int i = 0; i < numElements; i++) {
- listRecordings[i]->SetCurrentElement(currentRecording);
- }
-}
-
-void cViewListRecordings::Set(const cRecording *recording, int index, bool current, bool selectable, int level, int total, int New) {
- if (!current)
- listRecordings[index]->StopScrolling();
- listRecordings[index]->SetCurrent(current);
- listRecordings[index]->ClearCurrentElement();
- listRecordings[index]->SetSelectable(selectable);
- listRecordings[index]->Set(recording, level, total, New);
-}
-
-/******************************************************************
-* cViewListPlugin
-******************************************************************/
-cViewListPlugin::cViewListPlugin(void) {
- listPlugin = NULL;
- currentPlugin = NULL;
-}
-
-cViewListPlugin::~cViewListPlugin(void) {
- delete[] listPlugin;
-}
-
-void cViewListPlugin::Prepare(int start, int step) {
- if (!listElement)
- return;
-
- if (!listElement)
- return;
-
- cLeMenuPlugin *tpl = dynamic_cast<cLeMenuPlugin*>(listElement);
- if (!tpl) return;
-
- listPlugin = new cLeMenuPlugin*[numElements];
- listElements = new cListElement*[numElements];
- int pos = start;
-
- for (int i = 0; i < numElements; i++) {
- listPlugin[i] = new cLeMenuPlugin(*tpl);
- listElements[i] = listPlugin[i];
- listPlugin[i]->SetNumber(i);
- listPlugin[i]->SetPlugId(plugId);
- listPlugin[i]->SetPlugMenuId(plugMenuId);
- listPlugin[i]->SetTokenContainer();
- int x, y, width, height;
- if (orientation == eOrientation::vertical) {
- x = attribs->X();
- y = pos;
- width = attribs->Width();
- height = step;
- listPlugin[i]->SetAreaHeight(height);
- } else {
- x = pos;
- y = attribs->Y();
- width = step;
- height = attribs->Height();
- listPlugin[i]->SetAreaWidth(width);
- }
- listPlugin[i]->SetContainer(x, y, width, height);
- listPlugin[i]->Cache();
- pos += step;
- }
-
- if (!currentElement) return;
- currentPlugin = dynamic_cast<cCeMenuPlugin*>(currentElement);
- if (!currentPlugin) return;
-
- currentPlugin->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height());
- currentPlugin->SetPlugId(plugId);
- currentPlugin->SetPlugMenuId(plugMenuId);
- currentPlugin->SetTokenContainer();
- currentPlugin->SetDetached();
- currentPlugin->Cache();
- for (int i = 0; i < numElements; i++) {
- listPlugin[i]->SetCurrentElement(currentPlugin);
- }
-}
-
-void cViewListPlugin::Set(skindesignerapi::cTokenContainer *tk, int index, bool current, bool selectable) {
- if (!current)
- listPlugin[index]->StopScrolling();
- listPlugin[index]->SetCurrent(current);
- listPlugin[index]->ClearCurrentElement();
- listPlugin[index]->SetSelectable(selectable);
- listPlugin[index]->Set(tk);
-}
-
-/******************************************************************
-* cViewListAudioTracks
-******************************************************************/
-cViewListAudioTracks::cViewListAudioTracks(void) {
- listAudioTracks = NULL;
- numTracks = 0;
- tokenContainer = NULL;
-}
-
-cViewListAudioTracks::~cViewListAudioTracks(void) {
- delete[] listAudioTracks;
- delete tokenContainer;
-}
-
-void cViewListAudioTracks::Close(void) {
- if (!listElements)
- return;
- for (int i = 0; i < numElements; i++) {
- delete listAudioTracks[i];
- }
- delete[] listAudioTracks;
- listAudioTracks = NULL;
- }
-
-void cViewListAudioTracks::PreCache(void) {
- tokenContainer = new skindesignerapi::cTokenContainer();
- tokenContainer->DefineIntToken("{numelements}", 0);
- tokenContainer->CreateContainers();
- attribs->SetTokenContainer(tokenContainer);
- attribs->SetContainer(container.X(), container.Y(), container.Width(), container.Height());
- attribs->SetGlobals(globals);
- attribs->Cache();
-}
-
-void cViewListAudioTracks::SetNumtracks(int numTracks) {
- this->numTracks = numTracks;
- tokenContainer->Clear();
- tokenContainer->AddIntToken(0, numTracks);
-}
-
-void cViewListAudioTracks::SetTracks(const char * const *tracks) {
- if (numTracks <= 0)
- return;
- orientation = attribs->Orientation();
- eAlign align = attribs->Align();
- int x = attribs->X();
- int y = attribs->Y();
- int width = attribs->Width();
- int height = attribs->Height();
-
- int step = 0;
- if (orientation == eOrientation::vertical) {
- step = height / numTracks;
- } else {
- step = width / numTracks;
- }
-
- int start = 0;
- if (align == eAlign::center) {
- if (orientation == eOrientation::vertical) {
- start = y + (height - numTracks * step) / 2;
- } else {
- start = x + (width - numTracks * step) / 2;
- }
- } else if (align == eAlign::bottom) {
- start = y + height - numTracks * step;
- } else if (align == eAlign::right) {
- start = x + width - numTracks * step;
- } else if (align == eAlign::top) {
- start = y;
- }
-
- cLeAudioTracks *tpl = dynamic_cast<cLeAudioTracks*>(listElement);
- if (!tpl) return;
-
- listAudioTracks = new cLeAudioTracks*[numTracks];
- listElements = new cListElement*[numTracks];
- int pos = start;
-
- for (int i = 0; i < numTracks; i++) {
- listAudioTracks[i] = new cLeAudioTracks(*tpl);
- listElements[i] = listAudioTracks[i];
- listAudioTracks[i]->SetNumber(i);
- listAudioTracks[i]->SetTokenContainer();
- int x, y, width, height;
- if (orientation == eOrientation::vertical) {
- x = attribs->X();
- y = pos;
- width = attribs->Width();
- height = step;
- listAudioTracks[i]->SetAreaHeight(height);
- } else {
- x = pos;
- y = attribs->Y();
- width = step;
- height = attribs->Height();
- listAudioTracks[i]->SetAreaWidth(width);
- }
- listAudioTracks[i]->SetContainer(x, y, width, height);
- listAudioTracks[i]->Cache();
- pos += step;
- }
- for (int i=0; i < numTracks; i++) {
- listAudioTracks[i]->Set(tracks[i]);
- listAudioTracks[i]->SetSelectable(true);
- }
-}
-
-void cViewListAudioTracks::SetCurrentTrack(int index) {
- for (int i = 0; i < numTracks; i++) {
- if (i != index) {
- listAudioTracks[i]->SetCurrent(false);
- listAudioTracks[i]->SetDirty();
- listAudioTracks[i]->StopScrolling();
- }
- }
- listAudioTracks[index]->SetCurrent(true);
- listAudioTracks[index]->SetDirty();
-}
-
-void cViewListAudioTracks::Draw(void) {
- for (int i = 0; i < numTracks; i++) {
- if (listAudioTracks[i]->Parse()) {
- listAudioTracks[i]->Render();
- }
- }
-}
\ No newline at end of file +#include "viewlist.h" + +cViewList::cViewList(void) { + globals = NULL; + attribs = new cViewListAttribs((int)eViewListAttribs::count); + numElements = 0; + listElement = NULL; + currentElement = NULL; + listElements = NULL; + plugId = -1; + plugMenuId = -1; +} + +cViewList::~cViewList(void) { + delete attribs; + delete listElement; + delete currentElement; + if (listElements) { + for (int i=0; i < numElements; ++i) { + if (listElements[i]) { + delete listElements[i]; + listElements[i] = NULL; + } + } + } + delete[] listElements; +} + +void cViewList::SetGlobals(cGlobals *globals) { + this->globals = globals; + if (listElement) + listElement->SetGlobals(globals); + if (currentElement) + currentElement->SetGlobals(globals); +} + +void cViewList::SetContainer(int x, int y, int width, int height) { + container.SetX(x); + container.SetY(y); + container.SetWidth(width); + container.SetHeight(height); +} + +void cViewList::SetAttributes(vector<stringpair> &attributes) { + attribs->Set(attributes); +} + +cViewList *cViewList::CreateViewList(const char *name) { + cViewList *l = NULL; + if (!strcmp(name, "menudefault")) + l = new cViewListDefault(); + else if (!strcmp(name, "menumain")) + l = new cViewListMain(); + else if (!strcmp(name, "menusetup")) + l = new cViewListMain(); + else if (!strcmp(name, "menuschedules")) + l = new cViewListSchedules(); + else if (!strcmp(name, "menutimers")) + l = new cViewListTimers(); + else if (!strcmp(name, "menuchannels")) + l = new cViewListChannels(); + else if (!strcmp(name, "menurecordings")) + l = new cViewListRecordings(); + else if (!strcmp(name, "displayaudiotracks")) + l = new cViewListAudioTracks(); + else if (startswith(name, "menuplugin")) + l = new cViewListPlugin(); + else + esyslog("skindesigner: unknown viewlist %s", name); + return l; +} + +cViewElement *cViewList::CreateListElement(const char *name) { + cViewElement *le = NULL; + if (!strcmp(name, "menudefault")) + le = new cLeMenuDefault(); + else if (!strcmp(name, "menumain")) + le = new cLeMenuMain(); + else if (!strcmp(name, "menusetup")) + le = new cLeMenuMain(); + else if (!strcmp(name, "menuschedules")) + le = new cLeMenuSchedules(); + else if (!strcmp(name, "menutimers")) + le = new cLeMenuTimers(); + else if (!strcmp(name, "menuchannels")) + le = new cLeMenuChannels(); + else if (!strcmp(name, "menurecordings")) + le = new cLeMenuRecordings(); + else if (!strcmp(name, "displayaudiotracks")) + le = new cLeAudioTracks(); + else if (startswith(name, "menuplugin")) + le = new cLeMenuPlugin(); + else + esyslog("skindesigner: unknown viewlist %s", name); + return le; +} + +cViewElement *cViewList::CreateCurrentElement(const char *name) { + cViewElement *ce = NULL; + if (!strcmp(name, "menumain")) + ce = new cCeMenuMain(); + else if (!strcmp(name, "menusetup")) + ce = new cCeMenuMain(); + else if (!strcmp(name, "menuschedules")) + ce = new cCeMenuSchedules(); + else if (!strcmp(name, "menutimers")) + ce = new cCeMenuTimers(); + else if (!strcmp(name, "menuchannels")) + ce = new cCeMenuChannels(); + else if (!strcmp(name, "menurecordings")) + ce = new cCeMenuRecordings(); + else if (startswith(name, "menuplugin")) + ce = new cCeMenuPlugin(); + else + esyslog("skindesigner: unknown viewlist %s", name); + return ce; +} + +void cViewList::AddListElement(cViewElement *listElement) { + this->listElement = listElement; + listElement->SetTokenContainer(); +} + +void cViewList::AddCurrentElement(cViewElement *currentElement) { + this->currentElement = currentElement; + currentElement->SetTokenContainer(); +} + +void cViewList::PreCache(void) { + attribs->SetContainer(container.X(), container.Y(), container.Width(), container.Height()); + attribs->SetGlobals(globals); + attribs->Cache(); + numElements = attribs->NumListElements(); + orientation = attribs->Orientation(); + eAlign align = attribs->Align(); + int x = attribs->X(); + int y = attribs->Y(); + int width = attribs->Width(); + int height = attribs->Height(); + + int step = 0; + if (orientation == eOrientation::vertical) { + step = height / numElements; + } else { + step = width / numElements; + } + + int start = 0; + if (align == eAlign::center) { + if (orientation == eOrientation::vertical) { + start = y + (height - numElements * step) / 2; + } else { + start = x + (width - numElements * step) / 2; + } + } else if (align == eAlign::bottom) { + start = y + height - numElements * step; + } else if (align == eAlign::right) { + start = x + width - numElements * step; + } + Prepare(start, step); +} + +int cViewList::NumItems(void) { + return numElements; +} + +eOrientation cViewList::Orientation(void) { + return attribs->Orientation(); +} + +void cViewList::Draw(eMenuCategory menuCat) { + int current = -1; + for (int i = 0; i < numElements; i++) { + listElements[i]->SetMenuCategory(menuCat); + if (listElements[i]->Parse()) { + listElements[i]->Render(); + if (listElements[i]->Current()) { + listElements[i]->RenderCurrent(); + current = i; + } + } + } + if (current >= 0 && listElements[current]) { + listElements[current]->WakeCurrent(); + } + +} + +void cViewList::Clear(void) { + if (!listElements) + return; + for (int i = 0; i < numElements; i++) { + listElements[i]->StopScrolling(); + listElements[i]->Clear(); + } +} + +void cViewList::Close(void) { + if (!listElements) + return; + for (int i = 0; i < numElements; i++) { + listElements[i]->StopScrolling(); + listElements[i]->Close(); + } +} + +void cViewList::SetTransparency(int transparency) { + for (int i = 0; i < numElements; i++) { + if (listElements[i]) { + listElements[i]->SetTransparency(transparency); + } + } +} + +void cViewList::Debug(void) { +} + +/****************************************************************** +* cViewListDefault +******************************************************************/ +cViewListDefault::cViewListDefault(void) { + listDefault = NULL; + colX = NULL; + colWidths = NULL; + avrgFontWidth = 0; + listFont = NULL; + plugName = NULL; +} + +cViewListDefault::~cViewListDefault(void) { + delete[] listDefault; + delete[] colX; + delete[] colWidths; +} + +void cViewListDefault::Prepare(int start, int step) { + if (!listElement) + return; + + cLeMenuDefault *tpl = dynamic_cast<cLeMenuDefault*>(listElement); + if (!tpl) return; + listDefault = new cLeMenuDefault*[numElements]; + listElements = new cListElement*[numElements]; + int pos = start; + + for (int i = 0; i < numElements; i++) { + listDefault[i] = new cLeMenuDefault(*tpl); + listElements[i] = listDefault[i]; + listDefault[i]->SetNumber(i); + listDefault[i]->SetTokenContainer(); + int x, y, width, height; + if (orientation == eOrientation::vertical) { + x = attribs->X(); + y = pos; + width = attribs->Width(); + height = step; + listDefault[i]->SetAreaHeight(height); + } else { + x = pos; + y = attribs->Y(); + width = step; + height = attribs->Height(); + listDefault[i]->SetAreaWidth(width); + } + listDefault[i]->SetContainer(x, y, width, height); + listDefault[i]->Cache(); + pos += step; + } + + //Setting average font width + avrgFontWidth = 20; + const char *determinateFont = attribs->DeterminateFont(); + if (!determinateFont) { + return; + } + cFunction *f = listDefault[0]->GetFunction(determinateFont); + if (!f) + return; + cFuncDrawText *fdt = dynamic_cast<cFuncDrawText*>(f); + if (!fdt) { + return; + } + avrgFontWidth = fdt->AvrgFontWidth(); + listFont = fdt->GetFont(); + colX = new int[MAX_TABS]; + colWidths = new int[MAX_TABS]; + for (int i=0; i < MAX_TABS; i++) { + colX[i] = 0; + colWidths[i] = 0; + } + for (int i = 0; i < numElements; i++) { + listDefault[i]->SetListInfo(colX, colWidths); + } +} + +void cViewListDefault::SetTabs(int tab1, int tab2, int tab3, int tab4, int tab5) { + int itemWidth = attribs->MenuItemWidth(); + if (!tab1) { + colX[0] = 0; + colWidths[0] = itemWidth; + for (int i = 1; i < MAX_TABS; i++) { + colX[i] = 0; + colWidths[i] = 0; + } + } else { + colX[0] = 0; + colX[1] = tab1 ? colX[0] + tab1 : 0; + colX[2] = tab2 ? colX[1] + tab2 : 0; + colX[3] = tab3 ? colX[2] + tab3 : 0; + colX[4] = tab4 ? colX[3] + tab4 : 0; + colX[5] = tab5 ? colX[4] + tab5 : 0; + for (int i = 1; i < MAX_TABS; i++) + colX[i] *= avrgFontWidth; + + bool end = false; + for (int i = 0; i < MAX_TABS; i++) { + if ( i < MAX_TABS -1 && colX[i+1] > 0) { + colWidths[i] = colX[i+1] - colX[i]; + } else if (!end) { + end = true; + colWidths[i] = itemWidth - colX[i]; + } else { + colWidths[i] = 0; + } + } + } +} + +void cViewListDefault::Set(const char *text, int index, bool current, bool selectable) { + if (!current) + listDefault[index]->StopScrolling(); + listDefault[index]->SetCurrent(current); + listDefault[index]->SetSelectable(selectable); + listDefault[index]->SetPlugin(plugName); + listDefault[index]->SetText(text); +} + +const cFont *cViewListDefault::GetListFont(void) { + return listFont; +}; + +int cViewListDefault::GetListWidth(void) { + return attribs->MenuItemWidth(); +} + +/****************************************************************** +* cViewListMain +******************************************************************/ +cViewListMain::cViewListMain(void) { + listMain = NULL; + currentMain = NULL; +} + +cViewListMain::~cViewListMain(void) { + delete[] listMain; +} + +void cViewListMain::Prepare(int start, int step) { + if (!listElement) + return; + + cLeMenuMain *tpl = dynamic_cast<cLeMenuMain*>(listElement); + if (!tpl) return; + + listMain = new cLeMenuMain*[numElements]; + listElements = new cListElement*[numElements]; + int pos = start; + + for (int i = 0; i < numElements; i++) { + listMain[i] = new cLeMenuMain(*tpl); + listElements[i] = listMain[i]; + listMain[i]->SetNumber(i); + listMain[i]->SetTokenContainer(); + int x, y, width, height; + if (orientation == eOrientation::vertical) { + x = attribs->X(); + y = pos; + width = attribs->Width(); + height = step; + listMain[i]->SetAreaHeight(height); + } else { + x = pos; + y = attribs->Y(); + width = step; + height = attribs->Height(); + listMain[i]->SetAreaWidth(width); + } + listMain[i]->SetContainer(x, y, width, height); + listMain[i]->Cache(); + pos += step; + } + + if (!currentElement) return; + currentMain = dynamic_cast<cCeMenuMain*>(currentElement); + if (!currentMain) return; + + currentMain->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height()); + currentMain->SetDetached(); + currentMain->Cache(); + for (int i = 0; i < numElements; i++) { + listMain[i]->SetCurrentElement(currentMain); + } +} + +void cViewListMain::Set(const char *text, int index, bool current, bool selectable) { + if (!current) + listMain[index]->StopScrolling(); + listMain[index]->SetCurrent(current); + listMain[index]->ClearCurrentElement(); + listMain[index]->SetSelectable(selectable); + listMain[index]->SetText(text); +} + +const char *cViewListMain::GetPlugin(void) { + for (int i = 0; i < numElements; i++) { + if (listMain[i] && listMain[i]->Current()) { + return listMain[i]->PluginName(); + } + } + return NULL; +} +/****************************************************************** +* cViewListSchedules +******************************************************************/ +cViewListSchedules::cViewListSchedules(void) { + listSchedules = NULL; + currentSchedules = NULL; + epgSearchFav = false; +} + +cViewListSchedules::~cViewListSchedules(void) { + delete[] listSchedules; +} + +void cViewListSchedules::Prepare(int start, int step) { + if (!listElement) + return; + + cLeMenuSchedules *tpl = dynamic_cast<cLeMenuSchedules*>(listElement); + if (!tpl) return; + + listSchedules = new cLeMenuSchedules*[numElements]; + listElements = new cListElement*[numElements]; + int pos = start; + + for (int i = 0; i < numElements; i++) { + listSchedules[i] = new cLeMenuSchedules(*tpl); + listElements[i] = listSchedules[i]; + listSchedules[i]->SetNumber(i); + listSchedules[i]->SetTokenContainer(); + int x, y, width, height; + if (orientation == eOrientation::vertical) { + x = attribs->X(); + y = pos; + width = attribs->Width(); + height = step; + listSchedules[i]->SetAreaHeight(height); + } else { + x = pos; + y = attribs->Y(); + width = step; + height = attribs->Height(); + listSchedules[i]->SetAreaWidth(width); + } + listSchedules[i]->SetContainer(x, y, width, height); + listSchedules[i]->Cache(); + pos += step; + } + + if (!currentElement) return; + currentSchedules = dynamic_cast<cCeMenuSchedules*>(currentElement); + if (!currentSchedules) return; + + currentSchedules->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height()); + currentSchedules->SetDetached(); + currentSchedules->Cache(); + for (int i = 0; i < numElements; i++) { + listSchedules[i]->SetCurrentElement(currentSchedules); + } +} + +void cViewListSchedules::Set(const cEvent *event, int index, bool current, bool selectable, + const cChannel *channel, bool withDate, eTimerMatch timerMatch) { + if (!current) + listSchedules[index]->StopScrolling(); + listSchedules[index]->SetCurrent(current); + listSchedules[index]->ClearCurrentElement(); + listSchedules[index]->SetSelectable(selectable); + listSchedules[index]->SetEpgSearchFav(epgSearchFav); + listSchedules[index]->Set(event, channel, withDate, timerMatch); +} + +/****************************************************************** +* cViewListTimers +******************************************************************/ +cViewListTimers::cViewListTimers(void) { + listTimers = NULL; + currentTimer = NULL; +} + +cViewListTimers::~cViewListTimers(void) { + delete[] listTimers; +} + +void cViewListTimers::Prepare(int start, int step) { + if (!listElement) + return; + + cLeMenuTimers *tpl = dynamic_cast<cLeMenuTimers*>(listElement); + if (!tpl) return; + + listTimers = new cLeMenuTimers*[numElements]; + listElements = new cListElement*[numElements]; + int pos = start; + + for (int i = 0; i < numElements; i++) { + listTimers[i] = new cLeMenuTimers(*tpl); + listElements[i] = listTimers[i]; + listTimers[i]->SetNumber(i); + listTimers[i]->SetTokenContainer(); + int x, y, width, height; + if (orientation == eOrientation::vertical) { + x = attribs->X(); + y = pos; + width = attribs->Width(); + height = step; + listTimers[i]->SetAreaHeight(height); + } else { + x = pos; + y = attribs->Y(); + width = step; + height = attribs->Height(); + listTimers[i]->SetAreaWidth(width); + } + listTimers[i]->SetContainer(x, y, width, height); + listTimers[i]->Cache(); + pos += step; + } + + if (!currentElement) return; + currentTimer = dynamic_cast<cCeMenuTimers*>(currentElement); + if (!currentTimer) return; + + currentTimer->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height()); + currentTimer->SetDetached(); + currentTimer->Cache(); + for (int i = 0; i < numElements; i++) { + listTimers[i]->SetCurrentElement(currentTimer); + } +} + +void cViewListTimers::Set(const cTimer *timer, int index, bool current, bool selectable) { + if (!current) + listTimers[index]->StopScrolling(); + listTimers[index]->SetCurrent(current); + listTimers[index]->ClearCurrentElement(); + listTimers[index]->SetSelectable(selectable); + listTimers[index]->Set(timer); +} + +/****************************************************************** +* cViewListChannels +******************************************************************/ +cViewListChannels::cViewListChannels(void) { + listChannels = NULL; + currentChannel = NULL; +} + +cViewListChannels::~cViewListChannels(void) { + delete[] listChannels; +} + +void cViewListChannels::Prepare(int start, int step) { + if (!listElement) + return; + + cLeMenuChannels *tpl = dynamic_cast<cLeMenuChannels*>(listElement); + if (!tpl) return; + + listChannels = new cLeMenuChannels*[numElements]; + listElements = new cListElement*[numElements]; + int pos = start; + + for (int i = 0; i < numElements; i++) { + listChannels[i] = new cLeMenuChannels(*tpl); + listElements[i] = listChannels[i]; + listChannels[i]->SetNumber(i); + listChannels[i]->SetTokenContainer(); + int x, y, width, height; + if (orientation == eOrientation::vertical) { + x = attribs->X(); + y = pos; + width = attribs->Width(); + height = step; + listChannels[i]->SetAreaHeight(height); + } else { + x = pos; + y = attribs->Y(); + width = step; + height = attribs->Height(); + listChannels[i]->SetAreaWidth(width); + } + listChannels[i]->SetContainer(x, y, width, height); + listChannels[i]->Cache(); + pos += step; + } + + if (!currentElement) return; + currentChannel = dynamic_cast<cCeMenuChannels*>(currentElement); + if (!currentChannel) return; + + currentChannel->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height()); + currentChannel->SetDetached(); + currentChannel->Cache(); + for (int i = 0; i < numElements; i++) { + listChannels[i]->SetCurrentElement(currentChannel); + } +} + +void cViewListChannels::Set(const cChannel *channel, int index, bool current, bool selectable, bool withProvider) { + if (!current) + listChannels[index]->StopScrolling(); + listChannels[index]->SetCurrent(current); + listChannels[index]->ClearCurrentElement(); + listChannels[index]->SetSelectable(selectable); + listChannels[index]->Set(channel, withProvider); +} + +/****************************************************************** +* cViewListRecordings +******************************************************************/ +cViewListRecordings::cViewListRecordings(void) { + listRecordings = NULL; + currentRecording = NULL; +} + +cViewListRecordings::~cViewListRecordings(void) { + delete[] listRecordings; +} + +void cViewListRecordings::Prepare(int start, int step) { + if (!listElement) + return; + + cLeMenuRecordings *tpl = dynamic_cast<cLeMenuRecordings*>(listElement); + if (!tpl) return; + + listRecordings = new cLeMenuRecordings*[numElements]; + listElements = new cListElement*[numElements]; + int pos = start; + + for (int i = 0; i < numElements; i++) { + listRecordings[i] = new cLeMenuRecordings(*tpl); + listElements[i] = listRecordings[i]; + listRecordings[i]->SetNumber(i); + listRecordings[i]->SetTokenContainer(); + int x, y, width, height; + if (orientation == eOrientation::vertical) { + x = attribs->X(); + y = pos; + width = attribs->Width(); + height = step; + listRecordings[i]->SetAreaHeight(height); + } else { + x = pos; + y = attribs->Y(); + width = step; + height = attribs->Height(); + listRecordings[i]->SetAreaWidth(width); + } + listRecordings[i]->SetContainer(x, y, width, height); + listRecordings[i]->Cache(); + pos += step; + } + + if (!currentElement) return; + currentRecording = dynamic_cast<cCeMenuRecordings*>(currentElement); + if (!currentRecording) return; + + currentRecording->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height()); + currentRecording->SetDetached(); + currentRecording->Cache(); + for (int i = 0; i < numElements; i++) { + listRecordings[i]->SetCurrentElement(currentRecording); + } +} + +void cViewListRecordings::Set(const cRecording *recording, int index, bool current, bool selectable, int level, int total, int New) { + if (!current) + listRecordings[index]->StopScrolling(); + listRecordings[index]->SetCurrent(current); + listRecordings[index]->ClearCurrentElement(); + listRecordings[index]->SetSelectable(selectable); + listRecordings[index]->Set(recording, level, total, New); +} + +/****************************************************************** +* cViewListPlugin +******************************************************************/ +cViewListPlugin::cViewListPlugin(void) { + listPlugin = NULL; + currentPlugin = NULL; +} + +cViewListPlugin::~cViewListPlugin(void) { + delete[] listPlugin; +} + +void cViewListPlugin::Prepare(int start, int step) { + if (!listElement) + return; + + if (!listElement) + return; + + cLeMenuPlugin *tpl = dynamic_cast<cLeMenuPlugin*>(listElement); + if (!tpl) return; + + listPlugin = new cLeMenuPlugin*[numElements]; + listElements = new cListElement*[numElements]; + int pos = start; + + for (int i = 0; i < numElements; i++) { + listPlugin[i] = new cLeMenuPlugin(*tpl); + listElements[i] = listPlugin[i]; + listPlugin[i]->SetNumber(i); + listPlugin[i]->SetPlugId(plugId); + listPlugin[i]->SetPlugMenuId(plugMenuId); + listPlugin[i]->SetTokenContainer(); + int x, y, width, height; + if (orientation == eOrientation::vertical) { + x = attribs->X(); + y = pos; + width = attribs->Width(); + height = step; + listPlugin[i]->SetAreaHeight(height); + } else { + x = pos; + y = attribs->Y(); + width = step; + height = attribs->Height(); + listPlugin[i]->SetAreaWidth(width); + } + listPlugin[i]->SetContainer(x, y, width, height); + listPlugin[i]->Cache(); + pos += step; + } + + if (!currentElement) return; + currentPlugin = dynamic_cast<cCeMenuPlugin*>(currentElement); + if (!currentPlugin) return; + + currentPlugin->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height()); + currentPlugin->SetPlugId(plugId); + currentPlugin->SetPlugMenuId(plugMenuId); + currentPlugin->SetTokenContainer(); + currentPlugin->SetDetached(); + currentPlugin->Cache(); + for (int i = 0; i < numElements; i++) { + listPlugin[i]->SetCurrentElement(currentPlugin); + } +} + +void cViewListPlugin::Set(skindesignerapi::cTokenContainer *tk, int index, bool current, bool selectable) { + if (!current) + listPlugin[index]->StopScrolling(); + listPlugin[index]->SetCurrent(current); + listPlugin[index]->ClearCurrentElement(); + listPlugin[index]->SetSelectable(selectable); + listPlugin[index]->Set(tk); +} + +/****************************************************************** +* cViewListAudioTracks +******************************************************************/ +cViewListAudioTracks::cViewListAudioTracks(void) { + listAudioTracks = NULL; + numTracks = 0; + tokenContainer = NULL; +} + +cViewListAudioTracks::~cViewListAudioTracks(void) { + delete[] listAudioTracks; + delete tokenContainer; +} + +void cViewListAudioTracks::Close(void) { + if (!listElements) + return; + for (int i = 0; i < numElements; i++) { + delete listAudioTracks[i]; + } + delete[] listAudioTracks; + listAudioTracks = NULL; + } + +void cViewListAudioTracks::PreCache(void) { + tokenContainer = new skindesignerapi::cTokenContainer(); + tokenContainer->DefineIntToken("{numelements}", 0); + tokenContainer->CreateContainers(); + attribs->SetTokenContainer(tokenContainer); + attribs->SetContainer(container.X(), container.Y(), container.Width(), container.Height()); + attribs->SetGlobals(globals); + attribs->Cache(); +} + +void cViewListAudioTracks::SetNumtracks(int numTracks) { + this->numTracks = numTracks; + tokenContainer->Clear(); + tokenContainer->AddIntToken(0, numTracks); +} + +void cViewListAudioTracks::SetTracks(const char * const *tracks) { + if (numTracks <= 0) + return; + orientation = attribs->Orientation(); + eAlign align = attribs->Align(); + int x = attribs->X(); + int y = attribs->Y(); + int width = attribs->Width(); + int height = attribs->Height(); + + int step = 0; + if (orientation == eOrientation::vertical) { + step = height / numTracks; + } else { + step = width / numTracks; + } + + int start = 0; + if (align == eAlign::center) { + if (orientation == eOrientation::vertical) { + start = y + (height - numTracks * step) / 2; + } else { + start = x + (width - numTracks * step) / 2; + } + } else if (align == eAlign::bottom) { + start = y + height - numTracks * step; + } else if (align == eAlign::right) { + start = x + width - numTracks * step; + } else if (align == eAlign::top) { + start = y; + } + + cLeAudioTracks *tpl = dynamic_cast<cLeAudioTracks*>(listElement); + if (!tpl) return; + + listAudioTracks = new cLeAudioTracks*[numTracks]; + listElements = new cListElement*[numTracks]; + int pos = start; + + for (int i = 0; i < numTracks; i++) { + listAudioTracks[i] = new cLeAudioTracks(*tpl); + listElements[i] = listAudioTracks[i]; + listAudioTracks[i]->SetNumber(i); + listAudioTracks[i]->SetTokenContainer(); + int x, y, width, height; + if (orientation == eOrientation::vertical) { + x = attribs->X(); + y = pos; + width = attribs->Width(); + height = step; + listAudioTracks[i]->SetAreaHeight(height); + } else { + x = pos; + y = attribs->Y(); + width = step; + height = attribs->Height(); + listAudioTracks[i]->SetAreaWidth(width); + } + listAudioTracks[i]->SetContainer(x, y, width, height); + listAudioTracks[i]->Cache(); + pos += step; + } + for (int i=0; i < numTracks; i++) { + listAudioTracks[i]->Set(tracks[i]); + listAudioTracks[i]->SetSelectable(true); + } +} + +void cViewListAudioTracks::SetCurrentTrack(int index) { + for (int i = 0; i < numTracks; i++) { + if (i != index) { + listAudioTracks[i]->SetCurrent(false); + listAudioTracks[i]->SetDirty(); + listAudioTracks[i]->StopScrolling(); + } + } + listAudioTracks[index]->SetCurrent(true); + listAudioTracks[index]->SetDirty(); +} + +void cViewListAudioTracks::Draw(void) { + for (int i = 0; i < numTracks; i++) { + if (listAudioTracks[i]->Parse()) { + listAudioTracks[i]->Render(); + } + } +} |