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 @@ - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file