summaryrefslogtreecommitdiff
path: root/utils/themeeditor/models
diff options
context:
space:
mode:
Diffstat (limited to 'utils/themeeditor/models')
-rw-r--r--utils/themeeditor/models/parsetreemodel.cpp42
-rw-r--r--utils/themeeditor/models/parsetreenode.cpp2
2 files changed, 41 insertions, 3 deletions
diff --git a/utils/themeeditor/models/parsetreemodel.cpp b/utils/themeeditor/models/parsetreemodel.cpp
index ccae865..47b2417 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 f1ee3b2..ae83f1a 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':