From 2f68e5be5964a24d68b7cd7816228ce340da3845 Mon Sep 17 00:00:00 2001 From: Robert Bieber Date: Sat, 3 Jul 2010 22:57:42 +0000 Subject: Theme Editor: SBS will now render underneath WPS, if both are present in project git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27265 a1c6a512-1295-4272-9138-f99709370657 --- utils/themeeditor/models/parsetreemodel.cpp | 42 +++++++++++++++++++++++++++-- utils/themeeditor/models/parsetreenode.cpp | 2 +- 2 files changed, 41 insertions(+), 3 deletions(-) (limited to 'utils/themeeditor/models') diff --git a/utils/themeeditor/models/parsetreemodel.cpp b/utils/themeeditor/models/parsetreemodel.cpp index ccae865290..47b24174b7 100644 --- a/utils/themeeditor/models/parsetreemodel.cpp +++ b/utils/themeeditor/models/parsetreemodel.cpp @@ -290,7 +290,9 @@ QGraphicsScene* ParseTreeModel::render(ProjectModel* project, settings.insert("themebase", base.canonicalPath()); } + /* Finding imagebase and determining remote/wps status */ bool remote = false; + bool wps = false; if(file) { QString skinFile = *file; @@ -304,14 +306,50 @@ QGraphicsScene* ParseTreeModel::render(ProjectModel* project, QString extension = decomp.last(); if(extension[0] == 'r') remote = true; + if(extension.right(3) == "wps") + wps = true; + } + + /* Rendering SBS, if necessary */ + RBScreen* sbsScreen = 0; + if(wps && device->data("rendersbs").toBool()) + { + QString sbsFile = settings.value(remote ? "rsbs" : "sbs", ""); + sbsFile.replace("/.rockbox" , settings.value("themebase","")); + + if(QFile::exists(sbsFile)) + { + QFile sbs(sbsFile); + sbs.open(QFile::ReadOnly | QFile::Text); + ParseTreeModel sbsModel(QString(sbs.readAll()).toAscii()); + + if(sbsModel.root != 0) + { + RBRenderInfo sbsInfo(&sbsModel, project, &settings, device, + sbsScreen); + + sbsScreen = new RBScreen(sbsInfo, remote); + scene->addItem(sbsScreen); + + sbsInfo = RBRenderInfo(&sbsModel, project, &settings, device, + sbsScreen); + sbsModel.root->render(sbsInfo); + } + + } } RBScreen* screen = 0; RBRenderInfo info(this, project, &settings, device, screen); /* Adding the screen */ - screen = new RBScreen(info, remote); - scene->addItem(screen); + if(sbsScreen) + screen = new RBScreen(info, remote, sbsScreen->getCustomUI()); + else + screen = new RBScreen(info, remote); + + if(!sbsScreen) + scene->addItem(screen); info = RBRenderInfo(this, project, &settings, device, screen); diff --git a/utils/themeeditor/models/parsetreenode.cpp b/utils/themeeditor/models/parsetreenode.cpp index f1ee3b27ca..ae83f1aadf 100644 --- a/utils/themeeditor/models/parsetreenode.cpp +++ b/utils/themeeditor/models/parsetreenode.cpp @@ -629,7 +629,7 @@ bool ParseTreeNode::execTag(const RBRenderInfo& info, RBViewport* viewport) { case 'd': /* %wd */ - /* Disable SBS rendering */ + info.screen()->breakSBS(); return true; case 'e': -- cgit v1.2.3