summaryrefslogtreecommitdiff
path: root/coreengine/xmlparser.c
diff options
context:
space:
mode:
Diffstat (limited to 'coreengine/xmlparser.c')
-rw-r--r--coreengine/xmlparser.c36
1 files changed, 30 insertions, 6 deletions
diff --git a/coreengine/xmlparser.c b/coreengine/xmlparser.c
index 617313a..aa7be10 100644
--- a/coreengine/xmlparser.c
+++ b/coreengine/xmlparser.c
@@ -40,6 +40,7 @@ bool cXmlParser::ParseView(void) {
view->SetAttributes(rootAttribs);
cViewMenu *menuView = dynamic_cast<cViewMenu*>(view);
+ cViewChannel *channelView = dynamic_cast<cViewChannel*>(view);
cViewTracks *tracksView = dynamic_cast<cViewTracks*>(view);
if (!LevelDown())
@@ -48,6 +49,13 @@ bool cXmlParser::ParseView(void) {
do {
if (view->ValidViewElement(NodeName())) {
ParseViewElement(NodeName());
+ } else if (channelView) {
+ if (view->ValidViewList(NodeName())) {
+ ParseViewList(NULL, NodeName());
+ } else {
+ esyslog("skindesigner: unknown node %s", NodeName());
+ return false;
+ }
} else if (menuView) {
if (menuView->ValidSubView(NodeName())) {
ParseSubView(NodeName());
@@ -334,7 +342,7 @@ void cXmlParser::ParsePluginViewElement(bool isScrollbar, bool isTabLabels) {
}
}
-void cXmlParser::ParseViewList(cView *subView) {
+void cXmlParser::ParseViewList(cView *subView, const char *listName) {
if (!view)
return;
@@ -345,7 +353,11 @@ void cXmlParser::ParseViewList(cView *subView) {
name = view->GetViewName();
vector<stringpair> attribs = ParseAttributes();
- cViewList *viewList = cViewList::CreateViewList(name);
+ cViewList *viewList = NULL;
+ if (!listName)
+ viewList = cViewList::CreateViewList(name);
+ else
+ viewList = cViewList::CreateViewList(listName);
viewList->SetAttributes(attribs);
if (!LevelDown())
@@ -353,7 +365,11 @@ void cXmlParser::ParseViewList(cView *subView) {
do {
if (CheckNodeName("currentelement")) {
- cViewElement *currentElement = cViewList::CreateCurrentElement(name);
+ cViewElement *currentElement = NULL;
+ if (!listName)
+ currentElement = cViewList::CreateCurrentElement(name);
+ else
+ currentElement = cViewList::CreateCurrentElement(listName);
currentElement->SetOsd(sdOsd);
vector<stringpair> attribsList = ParseAttributes();
currentElement->SetAttributes(attribsList);
@@ -375,7 +391,11 @@ void cXmlParser::ParseViewList(cView *subView) {
LevelUp();
viewList->AddCurrentElement(currentElement);
} else if (CheckNodeName("listelement")) {
- cViewElement *listElement = cViewList::CreateListElement(name);
+ cViewElement *listElement = NULL;
+ if (!listName)
+ listElement = cViewList::CreateListElement(name);
+ else
+ listElement = cViewList::CreateListElement(listName);
listElement->SetOsd(sdOsd);
vector<stringpair> attribsList = ParseAttributes();
listElement->SetAttributes(attribsList);
@@ -402,8 +422,12 @@ void cXmlParser::ParseViewList(cView *subView) {
if (subView)
subView->AddViewList(viewList);
- else
- view->AddViewList(viewList);
+ else if (listName) {
+ cViewChannel *channelView = dynamic_cast<cViewChannel*>(view);
+ channelView->AddChannelViewList(listName, viewList);
+ } else {
+ view->AddViewList(viewList);
+ }
}