aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeEval.h
diff options
context:
space:
mode:
Diffstat (limited to 'gui/ThemeEval.h')
-rw-r--r--gui/ThemeEval.h115
1 files changed, 115 insertions, 0 deletions
diff --git a/gui/ThemeEval.h b/gui/ThemeEval.h
new file mode 100644
index 0000000000..a25ff21a88
--- /dev/null
+++ b/gui/ThemeEval.h
@@ -0,0 +1,115 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef GUI_THEME_EVAL
+#define GUI_THEME_EVAL
+
+#include "common/util.h"
+#include "common/system.h"
+#include "common/events.h"
+#include "common/hashmap.h"
+#include "common/hash-str.h"
+#include "common/xmlparser.h"
+
+#include "gui/ThemeEngine.h"
+#include "gui/ThemeParser.h"
+#include "gui/ThemeEval.h"
+#include "gui/ThemeLayout.h"
+
+namespace GUI {
+
+class ThemeEval {
+
+ typedef Common::HashMap<Common::String, int> VariablesMap;
+ typedef Common::HashMap<Common::String, ThemeLayout*> LayoutsMap;
+
+public:
+ ThemeEval() {
+ buildBuiltinVars();
+ }
+
+ ~ThemeEval();
+
+ void buildBuiltinVars();
+
+ int getVar(const Common::String &s) {
+ if (_vars.contains(s))
+ return _vars[s];
+
+ if (_builtin.contains(s))
+ return _builtin[s];
+
+ error("CRITICAL: Missing variable: '%s'", s.c_str());
+ return -13375; //EVAL_UNDEF_VAR
+ }
+
+ int getVar(const Common::String &s, int def) {
+ if (_vars.contains(s))
+ return _vars[s];
+
+ if (_builtin.contains(s))
+ return _builtin[s];
+
+ return def;
+ }
+
+ void setVar(const String &name, int val) { _vars[name] = val; }
+
+ bool hasVar(const Common::String &name) { return _vars.contains(name) || _builtin.contains(name); }
+
+ void addDialog(const Common::String &name, const Common::String &overlays, bool enabled = true, int inset = 0);
+ void addLayout(ThemeLayout::LayoutType type, int spacing, bool center = false);
+ void addWidget(const Common::String &name, int w, int h, const Common::String &type, bool enabled = true);
+ bool addImportedLayout(const Common::String &name);
+ void addSpace(int size);
+
+ void addPadding(int16 l, int16 r, int16 t, int16 b) { _curLayout.top()->setPadding(l, r, t, b); }
+
+ void closeLayout() { _curLayout.pop(); }
+ void closeDialog() { _curLayout.pop()->reflowLayout(); _curDialog.clear(); }
+
+ bool getWidgetData(const Common::String &widget, int16 &x, int16 &y, uint16 &w, uint16 &h);
+
+#ifdef LAYOUT_DEBUG_DIALOG
+ void debugDraw(Graphics::Surface *screen, const Graphics::Font *font) {
+ _layouts[LAYOUT_DEBUG_DIALOG]->debugDraw(screen, font);
+ }
+#endif
+
+ void reset();
+
+private:
+ VariablesMap _vars;
+ VariablesMap _builtin;
+
+ LayoutsMap _layouts;
+ Common::Stack<ThemeLayout*> _curLayout;
+ Common::String _curDialog;
+};
+
+
+}
+
+#endif