diff --git a/gui/ThemeEval.cpp b/gui/ThemeEval.cpp
index e13ccc01765..e2c34d81281 100644
--- a/gui/ThemeEval.cpp
+++ b/gui/ThemeEval.cpp
@@ -157,15 +157,26 @@ void ThemeEval::addWidget(const Common::String &name, int w, int h) {
_curLayout.top()->addChild(widget);
}
-void ThemeEval::addDialog(const Common::String &name) {
+void ThemeEval::addDialog(const Common::String &name, const Common::String &overlays) {
ThemeLayout *layout = new ThemeLayoutMain();
_layouts[name] = layout;
+
+ int16 x, y;
+ uint16 w, h;
- layout->setX(0);
- layout->setY(0);
- layout->setWidth(g_system->getOverlayWidth());
- layout->setHeight(g_system->getOverlayHeight());
+ if (overlays == "screen" || overlays.empty()) {
+ x = y = 0;
+ w = g_system->getOverlayWidth();
+ h = g_system->getOverlayHeight();
+ } else if (!getWidgetData(overlays, x, y, w, h)) {
+ error("Error when loading dialog position for '%s'", overlays.c_str());
+ }
+ layout->setX(x);
+ layout->setY(y);
+ layout->setWidth(w);
+ layout->setHeight(h);
+
layout->setPadding(
getVar("Globals.Padding.Left", 0),
getVar("Globals.Padding.Right", 0),
diff --git a/gui/ThemeEval.h b/gui/ThemeEval.h
index b412ba67987..671a7373369 100644
--- a/gui/ThemeEval.h
+++ b/gui/ThemeEval.h
@@ -146,6 +146,13 @@ public:
virtual const char *getName() { return _name.c_str(); }
virtual bool getWidgetData(const Common::String &name, int16 &x, int16 &y, uint16 &w, uint16 &h);
+
+ virtual bool getDialogData(int16 &x, int16 &y, uint16 &w, uint16 &h) {
+ assert(getLayoutType() == kLayoutMain);
+ x = _x; y = _y;
+ w = _w; h = _h;
+ return true;
+ }
protected:
int16 _x, _y, _w, _h;
@@ -246,7 +253,7 @@ public:
bool hasVar(const Common::String &name) { return _vars.contains(name); }
- void addDialog(const Common::String &name);
+ void addDialog(const Common::String &name, const Common::String &overlays);
void addLayout(ThemeLayout::LayoutType type, bool reverse, bool center = false);
void addWidget(const Common::String &name, int w, int h);
void addSpacing(int size);
@@ -261,10 +268,17 @@ public:
bool getWidgetData(const Common::String &widget, int16 &x, int16 &y, uint16 &w, uint16 &h) {
Common::StringTokenizer tokenizer(widget, ".");
Common::String dialogName = "Dialog." + tokenizer.nextToken();
+
+ if (dialogName == "Dialog.Dialog")
+ dialogName = "Dialog." + tokenizer.nextToken();
+
Common::String widgetName = tokenizer.nextToken();
if (!_layouts.contains(dialogName))
return false;
+
+ if (widgetName.empty())
+ return _layouts[dialogName]->getDialogData(x, y, w, h);
return _layouts[dialogName]->getWidgetData(widgetName, x, y, w, h);
}
@@ -279,7 +293,8 @@ public:
}
void debugDraw(Graphics::Surface *screen, const Graphics::Font *font) {
- _layouts["Dialog.Launcher"]->debugDraw(screen, font);
+ _layouts["Dialog.GlobalOptions"]->debugDraw(screen, font);
+ _layouts["Dialog.GlobalOptions_Graphics"]->debugDraw(screen, font);
}
private:
diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp
index 6c5c900f509..fafe2ccad7a 100644
--- a/gui/ThemeParser.cpp
+++ b/gui/ThemeParser.cpp
@@ -493,7 +493,7 @@ bool ThemeParser::parserCallback_child(ParserNode *node) {
bool ThemeParser::parserCallback_dialog(ParserNode *node) {
Common::String var = "Dialog." + node->values["name"];
- _theme->themeEval()->addDialog(var);
+ _theme->themeEval()->addDialog(var, node->values["overlays"]);
return true;
}
diff --git a/gui/ThemeParser.h b/gui/ThemeParser.h
index 61d72629462..e26a841fe69 100644
--- a/gui/ThemeParser.h
+++ b/gui/ThemeParser.h
@@ -435,6 +435,7 @@ protected:
XML_KEY(dialog)
XML_PROP(name, true)
+ XML_PROP(overlays, true)
XML_KEY(layout)
XML_PROP(type, true)
XML_PROP(center, false)
diff --git a/gui/ThemeRenderer.cpp b/gui/ThemeRenderer.cpp
index 4a83982c8c4..474b9278452 100644
--- a/gui/ThemeRenderer.cpp
+++ b/gui/ThemeRenderer.cpp
@@ -695,9 +695,9 @@ void ThemeRenderer::updateScreen() {
renderDirtyScreen();
-// _vectorRenderer->fillSurface();
-// themeEval()->debugDraw(_screen, _font);
-// _vectorRenderer->copyWholeFrame(_system);
+// _vectorRenderer->fillSurface();
+ // themeEval()->debugDraw(_screen, _font);
+ // _vectorRenderer->copyWholeFrame(_system);
}
void ThemeRenderer::renderDirtyScreen() {
diff --git a/gui/dialog.cpp b/gui/dialog.cpp
index 0594941d655..ac9d0dbb4db 100644
--- a/gui/dialog.cpp
+++ b/gui/dialog.cpp
@@ -150,7 +150,7 @@ void Dialog::drawDialog() {
// Draw all children
Widget *w = _firstWidget;
while (w) {
- w->draw();
+ if (w->_debugVisible) w->draw();
w = w->_next;
}
}
diff --git a/gui/newgui.cpp b/gui/newgui.cpp
index e829a2c6f5d..b8c953619cf 100644
--- a/gui/newgui.cpp
+++ b/gui/newgui.cpp
@@ -58,8 +58,20 @@ enum {
void GuiObject::reflowLayout() {
if (!_name.empty()) {
- if (!g_gui.xmlEval()->getWidgetData(_name, _x, _y, _w, _h))
- error("Could not load widget position for '%s'", _name.c_str());
+ if (!g_gui.xmlEval()->getWidgetData(_name, _x, _y, _w, _h)) {
+ warning("Could not load widget position for '%s'", _name.c_str());
+
+// if ((_x = g_gui.evaluator()->getVar(_name + ".x")) == EVAL_UNDEF_VAR)
+// error("Undefined variable %s.x", _name.c_str());
+// if ((_y = g_gui.evaluator()->getVar(_name + ".y")) == EVAL_UNDEF_VAR)
+// error("Undefined variable %s.y", _name.c_str());
+// _w = g_gui.evaluator()->getVar(_name + ".w");
+// _h = g_gui.evaluator()->getVar(_name + ".h");
+ _w = _x = _y = _h = 32;
+ _debugVisible = false;
+ }
+
+ _debugVisible = true;
if (_x < 0)
error("Widget <%s> has x < 0: %d", _name.c_str(), _x);
diff --git a/gui/object.h b/gui/object.h
index 01046bd668b..9e5ea5fa606 100644
--- a/gui/object.h
+++ b/gui/object.h
@@ -78,7 +78,10 @@ public:
virtual uint16 getWidth() const { return _w; }
virtual uint16 getHeight() const { return _h; }
+// Tanoku-TODO: fix this back
virtual bool isVisible() const = 0;
+ bool _debugVisible;
+
virtual void draw() = 0;
diff --git a/gui/options.cpp b/gui/options.cpp
index d6f5306ce2c..76c9f8ab825 100644
--- a/gui/options.cpp
+++ b/gui/options.cpp
@@ -659,27 +659,27 @@ void OptionsDialog::reflowLayout() {
GlobalOptionsDialog::GlobalOptionsDialog()
- : OptionsDialog(Common::ConfigManager::kApplicationDomain, "globaloptions") {
+ : OptionsDialog(Common::ConfigManager::kApplicationDomain, "GlobalOptions") {
// The tab widget
- TabWidget *tab = new TabWidget(this, "globaloptions_tabwidget");
+ TabWidget *tab = new TabWidget(this, "GlobalOptions.TabWidget");
tab->setHints(THEME_HINT_FIRST_DRAW | THEME_HINT_SAVE_BACKGROUND);
//
// 1) The graphics tab
//
tab->addTab("Graphics");
- addGraphicControls(tab, "globaloptions_");
+ addGraphicControls(tab, "GlobalOptions_Graphics.");
//
// 2) The audio tab
//
tab->addTab("Audio");
- addAudioControls(tab, "globaloptions_");
- addSubtitleControls(tab, "globaloptions_");
+ addAudioControls(tab, "GlobalOptions.");
+ addSubtitleControls(tab, "GlobalOptions_Audio.");
tab->addTab("Volume");
- addVolumeControls(tab, "globaloptions_");
+ addVolumeControls(tab, "GlobalOptions_Volume.");
// TODO: cd drive setting
@@ -687,7 +687,7 @@ GlobalOptionsDialog::GlobalOptionsDialog()
// 3) The MIDI tab
//
tab->addTab("MIDI");
- addMIDIControls(tab, "globaloptions_");
+ addMIDIControls(tab, "GlobalOptions_MIDI.");
//
// 4) The miscellaneous tab
@@ -699,33 +699,33 @@ GlobalOptionsDialog::GlobalOptionsDialog()
// truncated in the small version of the GUI.
// Save game path
- new ButtonWidget(tab, "globaloptions_savebutton", "Save Path: ", kChooseSaveDirCmd, 0);
- _savePath = new StaticTextWidget(tab, "globaloptions_savepath", "/foo/bar");
+ new ButtonWidget(tab, "GlobalOptions_Paths.SaveButton", "Save Path: ", kChooseSaveDirCmd, 0);
+ _savePath = new StaticTextWidget(tab, "GlobalOptions_Paths.SavePath", "/foo/bar");
- new ButtonWidget(tab, "globaloptions_themebutton", "Theme Path:", kChooseThemeDirCmd, 0);
- _themePath = new StaticTextWidget(tab, "globaloptions_themepath", "None");
+ new ButtonWidget(tab, "GlobalOptions_Paths.ThemeButton", "Theme Path:", kChooseThemeDirCmd, 0);
+ _themePath = new StaticTextWidget(tab, "GlobalOptions_Paths.ThemePath", "None");
- new ButtonWidget(tab, "globaloptions_extrabutton", "Extra Path:", kChooseExtraDirCmd, 0);
- _extraPath = new StaticTextWidget(tab, "globaloptions_extrapath", "None");
+ new ButtonWidget(tab, "GlobalOptions_Paths.ExtraButton", "Extra Path:", kChooseExtraDirCmd, 0);
+ _extraPath = new StaticTextWidget(tab, "GlobalOptions_Paths.ExtraPath", "None");
#ifdef DYNAMIC_MODULES
- new ButtonWidget(tab, "globaloptions_pluginsbutton", "Plugins Path:", kChoosePluginsDirCmd, 0);
- _pluginsPath = new StaticTextWidget(tab, "globaloptions_pluginspath", "None");
+ new ButtonWidget(tab, "GlobalOptions_Paths.PluginsButton", "Plugins Path:", kChoosePluginsDirCmd, 0);
+ _pluginsPath = new StaticTextWidget(tab, "GlobalOptions_Paths.PluginsPath", "None");
#endif
#endif
#ifdef SMALL_SCREEN_DEVICE
- new ButtonWidget(tab, "globaloptions_keysbutton", "Keys", kChooseKeyMappingCmd, 0);
+ new ButtonWidget(tab, "GlobalOptions.KeysButton", "Keys", kChooseKeyMappingCmd, 0);
#endif
tab->addTab("Misc");
- new ButtonWidget(tab, "globaloptions_themebutton2", "Theme:", kChooseThemeCmd, 0);
- _curTheme = new StaticTextWidget(tab, "globaloptions_curtheme", g_gui.theme()->getThemeName());
+ new ButtonWidget(tab, "GlobalOptions_Misc.ThemeButton", "Theme:", kChooseThemeCmd, 0);
+ _curTheme = new StaticTextWidget(tab, "GlobalOptions_Misc.CurTheme", g_gui.theme()->getThemeName());
int labelWidth = g_gui.evaluator()->getVar("tabPopupsLabelW");
- _autosavePeriodPopUp = new PopUpWidget(tab, "globaloptions_autosaveperiod", "Autosave:", labelWidth);
+ _autosavePeriodPopUp = new PopUpWidget(tab, "GlobalOptions_Misc.AutosavePeriod", "Autosave:", labelWidth);
for (int i = 0; savePeriodLabels[i]; i++) {
_autosavePeriodPopUp->appendEntry(savePeriodLabels[i], savePeriodValues[i]);
@@ -738,8 +738,8 @@ GlobalOptionsDialog::GlobalOptionsDialog()
tab->setActiveTab(0);
// Add OK & Cancel buttons
- new ButtonWidget(this, "globaloptions_cancel", "Cancel", kCloseCmd, 0);
- new ButtonWidget(this, "globaloptions_ok", "OK", kOKCmd, 0);
+ new ButtonWidget(this, "GlobalOptions.Cancel", "Cancel", kCloseCmd, 0);
+ new ButtonWidget(this, "GlobalOptions.Ok", "OK", kOKCmd, 0);
#ifdef SMALL_SCREEN_DEVICE
_keysDialog = new KeysDialog();
diff --git a/gui/themes/default.inc b/gui/themes/default.inc
index d5ee4cc8b36..7ba64bbb832 100644
--- a/gui/themes/default.inc
+++ b/gui/themes/default.inc
@@ -1 +1 @@
-" "
+" "
diff --git a/gui/themes/modern.stx b/gui/themes/modern.stx
index e4fc5d5c3ec..8d0e91ea0c1 100644
--- a/gui/themes/modern.stx
+++ b/gui/themes/modern.stx
@@ -464,7 +464,7 @@
-