bool ThemeParser::parserCallback_dialog(ParserNode *node) { Common::String var = "Dialog." + node->values["name"]; bool enabled = true; int inset = 0; if (resolutionCheck(node->values["resolution"]) == false) { node->ignore = true; return true; } if (node->values.contains("enabled")) { if (!Common::parseBool(node->values["enabled"], enabled)) return parserError("Invalid value for Dialog enabling (expecting true/false)"); } if (node->values.contains("inset")) { if (!parseIntegerKey(node->values["inset"], 1, &inset)) return false; } _theme->getEvaluator()->addDialog(var, node->values["overlays"], enabled, inset); if (node->values.contains("shading")) { int shading = 0; if (node->values["shading"] == "dim") shading = 1; else if (node->values["shading"] == "luminance") shading = 2; else return parserError("Invalid value for Dialog background shading."); _theme->getEvaluator()->setVar(var + ".Shading", shading); } return true; }
bool ThemeParser::parserCallback_drawdata(ParserNode *node) { bool cached = false; if (resolutionCheck(node->values["resolution"]) == false) { node->ignore = true; return true; } if (node->values.contains("cache")) { if (node->values["cache"] == "true") cached = true; else if (node->values["cache"] == "false") cached = false; else return parserError("'Parsed' value must be either true or false."); } if (_theme->addDrawData(node->values["id"], cached) == false) return parserError("Error adding Draw Data set: Invalid DrawData name."); if (_defaultStepLocal) { delete _defaultStepLocal; _defaultStepLocal = 0; } return true; }
bool ThemeParser::parserCallback_widget(ParserNode *node) { Common::String var; if (getParentNode(node)->name == "globals") { if (resolutionCheck(node->values["resolution"]) == false) { node->ignore = true; return true; } var = "Globals." + node->values["name"] + "."; if (!parseCommonLayoutProps(node, var)) return parserError("Error parsing Layout properties of '%s'.", var.c_str()); } else { // FIXME: Shouldn't we distinguish the name/id and the label of a widget? var = node->values["name"]; int width = -1; int height = -1; bool enabled = true; if (node->values.contains("enabled")) { if (node->values["enabled"] == "false") enabled = false; else if (node->values["enabled"] != "true") return parserError("Invalid value for Widget enabling (expecting true/false)"); } if (node->values.contains("width")) { if (_theme->getEvaluator()->hasVar(node->values["width"]) == true) width = _theme->getEvaluator()->getVar(node->values["width"]); else if (!parseIntegerKey(node->values["width"].c_str(), 1, &width)) return parserError("Corrupted width value in key for %s", var.c_str()); } if (node->values.contains("height")) { if (_theme->getEvaluator()->hasVar(node->values["height"]) == true) height = _theme->getEvaluator()->getVar(node->values["height"]); else if (!parseIntegerKey(node->values["height"].c_str(), 1, &height)) return parserError("Corrupted height value in key for %s", var.c_str()); } Graphics::TextAlign alignH = Graphics::kTextAlignLeft; if (node->values.contains("textalign")) { if((alignH = parseTextHAlign(node->values["textalign"])) == Graphics::kTextAlignInvalid) return parserError("Invalid value for text alignment."); } _theme->getEvaluator()->addWidget(var, width, height, node->values["type"], enabled, alignH); } return true; }
bool ThemeParser::parserCallback_bitmap(ParserNode *node) { if (resolutionCheck(node->values["resolution"]) == false) { node->ignore = true; return true; } if (!_theme->addBitmap(node->values["filename"])) return parserError("Error loading Bitmap file '%s'", node->values["filename"].c_str()); return true; }
bool ThemeParser::parserCallback_font(ParserNode *node) { if (resolutionCheck(node->values["resolution"]) == false) { node->ignore = true; return true; } TextData textDataId = parseTextDataId(node->values["id"]); if (!_theme->addFont(textDataId, node->values["file"])) return parserError("Error loading Font in theme engine."); return true; }
bool ThemeParser::parserCallback_def(ParserNode *node) { if (resolutionCheck(node->values["resolution"]) == false) { node->ignore = true; return true; } Common::String var = "Globals." + node->values["var"]; int value; if (_theme->getEvaluator()->hasVar(node->values["value"]) == true) value = _theme->getEvaluator()->getVar(node->values["value"]); else if (!parseIntegerKey(node->values["value"].c_str(), 1, &value)) return parserError("Invalid definition for '%s'.", var.c_str()); _theme->getEvaluator()->setVar(var, value); return true; }
bool ThemeParser::parserCallback_cursor(ParserNode *node) { if (resolutionCheck(node->values["resolution"]) == false) { node->ignore = true; return true; } int spotx, spoty, scale; if (!parseIntegerKey(node->values["hotspot"].c_str(), 2, &spotx, &spoty)) return parserError("Error parsing cursor Hot Spot coordinates."); if (!parseIntegerKey(node->values["scale"].c_str(), 1, &scale)) return parserError("Error parsing cursor scale."); if (!_theme->createCursor(node->values["file"], spotx, spoty, scale)) return parserError("Error creating Bitmap Cursor."); return true; }
bool ThemeParser::parserCallback_font(ParserNode *node) { int red, green, blue; if (resolutionCheck(node->values["resolution"]) == false) { node->ignore = true; return true; } if (_palette.contains(node->values["color"])) getPaletteColor(node->values["color"], red, green, blue); else if (!parseIntegerKey(node->values["color"].c_str(), 3, &red, &green, &blue)) return parserError("Error parsing color value for font definition."); TextData textDataId = parseTextDataId(node->values["id"]); if (!_theme->addFont(textDataId, node->values["file"], red, green, blue)) return parserError("Error loading Font in theme engine."); return true; }
bool ThemeParser::parserCallback_layout_info(ParserNode *node) { if (resolutionCheck(node->values["resolution"]) == false) node->ignore = true; return true; }