aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeParser.cpp
diff options
context:
space:
mode:
authorVicent Marti2008-07-31 17:23:38 +0000
committerVicent Marti2008-07-31 17:23:38 +0000
commite8278c4c6891b8b3b2ef95f2f55e4730d76234ba (patch)
treeed1b52a33a707fef777cddfbf8567f3ef23d0027 /gui/ThemeParser.cpp
parent01cf9174b1ea896b5dc7ddc8ec560ca1bd4de4f4 (diff)
downloadscummvm-rg350-e8278c4c6891b8b3b2ef95f2f55e4730d76234ba.tar.gz
scummvm-rg350-e8278c4c6891b8b3b2ef95f2f55e4730d76234ba.tar.bz2
scummvm-rg350-e8278c4c6891b8b3b2ef95f2f55e4730d76234ba.zip
GUI Layout parsing. Work in progress.
svn-id: r33475
Diffstat (limited to 'gui/ThemeParser.cpp')
-rw-r--r--gui/ThemeParser.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp
index 9733be4125..a12aac68bd 100644
--- a/gui/ThemeParser.cpp
+++ b/gui/ThemeParser.cpp
@@ -433,5 +433,55 @@ bool ThemeParser::parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawst
return true;
}
+bool ThemeParser::parserCallback_def(ParserNode *node) {
+ Common::String var = "Globals." + node->values["var"];
+ int value;
+
+ if (!parseIntegerKey(node->values["value"].c_str(), 1, &value))
+ return parserError("Invalid definition for '%s'.", var.c_str());
+
+ _theme->themeEval()->setVar(var, value);
+ return true;
+}
+
+bool ThemeParser::parserCallback_widget(ParserNode *node) {
+ Common::String var;
+ int width, height, x, y, paddingL, paddingR, paddingT, paddingB;
+
+ if (getParentNode(node)->name == "globals")
+ var = "Globals." + node->values["name"] + ".";
+ else if (getParentNode(node)->name == "dialog")
+ var = "Dialog." + getParentNode(node)->values["name"] + "." + node->values["name"] + ".";
+ else
+ assert(!"Corruption in XML parser.");
+
+ if (node->values.contains("size")) {
+ if (!parseIntegerKey(node->values["size"].c_str(), 2, &width, &height))
+ return parserError("Invalid definition for '%sSize'.", var.c_str());
+
+ _theme->themeEval()->setVar(var + "Width", width);
+ _theme->themeEval()->setVar(var + "Height", height);
+ }
+
+ if (node->values.contains("pos")) {
+ if (!parseIntegerKey(node->values["pos"].c_str(), 2, &x, &y))
+ return parserError("Invalid definition for '%sPosition'.", var.c_str());
+
+ _theme->themeEval()->setVar(var + "X", x);
+ _theme->themeEval()->setVar(var + "Y", y);
+ }
+
+ if (node->values.contains("padding")) {
+ if (!parseIntegerKey(node->values["padding"].c_str(), 4, &paddingL, &paddingR, &paddingT, &paddingB))
+ return parserError("Invalid definition for '%sPadding'.", var.c_str());
+
+ _theme->themeEval()->setVar(var + "Padding.Left", paddingL);
+ _theme->themeEval()->setVar(var + "Padding.Right", paddingR);
+ _theme->themeEval()->setVar(var + "Padding.Top", paddingT);
+ _theme->themeEval()->setVar(var + "Padding.Bottom", paddingB);
+ }
+
+ return true;
}
+} \ No newline at end of file