GUI: Add a tab for backend-specific options

This commit is contained in:
Cameron Cawley 2020-05-11 12:05:56 +01:00 committed by Thierry Crozat
parent c80e1c6b49
commit 11724f9df1
25 changed files with 279 additions and 5 deletions

View file

@ -298,6 +298,8 @@ static Common::Error runGame(const Plugin *plugin, OSystem &system, const Common
keymapper->addGameKeymap(gameKeymaps[i]);
}
system.applyBackendSettings();
// Inform backend that the engine is about to be run
system.engineInit();
@ -353,6 +355,8 @@ static void setupGraphics(OSystem &system) {
system.setShader(ConfMan.get("shader").c_str());
system.endGFXTransaction();
system.applyBackendSettings();
// When starting up launcher for the first time, the user might have specified
// a --gui-theme option, to allow that option to be working, we need to initialize
// GUI here.
@ -400,6 +404,7 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) {
// Register config manager defaults
Base::registerDefaults();
system.registerDefaultSettings(Common::ConfigManager::kApplicationDomain);
// Parse the command line
Common::StringMap settings;

View file

@ -40,6 +40,11 @@ namespace Graphics {
struct Surface;
}
namespace GUI {
class GuiObject;
class OptionsContainerWidget;
}
namespace Common {
class EventManager;
struct Rect;
@ -1622,6 +1627,36 @@ public:
*/
virtual Common::String getDefaultConfigFileName();
/**
* Register the default values for the settings the backend uses into the
* configuration manager.
*
* @param target name of a config manager target
*/
virtual void registerDefaultSettings(const Common::String &target) const {}
/**
* Return a GUI widget container for configuring the specified target options.
*
* The returned widget is shown in the Backend tab in the options dialog.
* Backends can build custom options dialogs.
*
* Backends that don't want to have a Backend tab in the options dialog
* can return nullptr.
*
* @param boss the widget / dialog the returned widget is a child of
* @param name the name the returned widget must use
* @param target name of a config manager target
*/
virtual GUI::OptionsContainerWidget *buildBackendOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const { return nullptr; }
/**
* Notify the backend that the settings editable from the game tab in the
* options dialog may have changed and that they need to be applied if
* necessary.
*/
virtual void applyBackendSettings() {}
/**
* Log the given message.
*

View file

@ -327,6 +327,19 @@ ConfigDialog::ConfigDialog() :
addKeyMapperControls(tab, "GlobalConfig_KeyMapper.", keymaps, gameDomain);
}
//
// The backend tab (shown only if the backend implements one)
//
int backendTabId = tab->addTab(_("Backend"), "GlobalConfig_Backend");
_backendOptions = g_system->buildBackendOptionsWidget(tab, "GlobalConfig_Backend.Container", _domain);
if (_backendOptions) {
_backendOptions->setParentDialog(this);
} else {
tab->removeTab(backendTabId);
}
//
// The Achievements tab
//

View file

@ -639,6 +639,7 @@ void Engine::openMainMenuDialog() {
ttsMan->popState();
#endif
g_system->applyBackendSettings();
applyGameSettings();
syncSoundSettings();
}

View file

@ -38,7 +38,7 @@
#include "graphics/pixelformat.h"
#define SCUMMVM_THEME_VERSION_STR "SCUMMVM_STX0.8.39"
#define SCUMMVM_THEME_VERSION_STR "SCUMMVM_STX0.8.40"
class OSystem;

View file

@ -240,6 +240,20 @@ EditGameDialog::EditGameDialog(const String &domain)
addKeyMapperControls(tab, "GameOptions_KeyMapper.", keymaps, domain);
}
//
// The backend tab (shown only if the backend implements one)
//
int backendTabId = tab->addTab(_("Backend"), "GameOptions_Backend");
g_system->registerDefaultSettings(_domain);
_backendOptions = g_system->buildBackendOptionsWidget(tab, "GameOptions_Backend.Container", _domain);
if (_backendOptions) {
_backendOptions->setParentDialog(this);
} else {
tab->removeTab(backendTabId);
}
//
// 4) The audio tab
//

View file

@ -168,6 +168,7 @@ void OptionsDialog::init() {
_joystickDeadzoneSlider = nullptr;
_joystickDeadzoneLabel = nullptr;
_keymapperWidget = nullptr;
_backendOptions = nullptr;
_enableGraphicSettings = false;
_gfxPopUp = nullptr;
_gfxPopUpDesc = nullptr;
@ -285,6 +286,11 @@ void OptionsDialog::build() {
_keymapperWidget->load();
}
// Backend options
if (_backendOptions) {
_backendOptions->load();
}
// Graphic options
if (_fullscreenCheckbox) {
_gfxPopUp->setSelected(0);
@ -710,6 +716,12 @@ void OptionsDialog::apply() {
}
}
if (_backendOptions) {
bool changes = _backendOptions->save();
if (changes && _domain == Common::ConfigManager::kApplicationDomain)
g_system->applyBackendSettings();
}
// Control options
if (_enableControlSettings) {
if (g_system->hasFeature(OSystem::kFeatureOnScreenControl)) {
@ -1815,6 +1827,20 @@ void GlobalOptionsDialog::build() {
addKeyMapperControls(tab, "GlobalOptions_KeyMapper.", keymaps, Common::ConfigManager::kKeymapperDomain);
}
//
// The backend tab (shown only if the backend implements one)
//
int backendTabId = tab->addTab(_("Backend"), "GlobalOptions_Backend");
g_system->registerDefaultSettings(_domain);
_backendOptions = g_system->buildBackendOptionsWidget(tab, "GlobalOptions_Backend.Container", _domain);
if (_backendOptions) {
_backendOptions->setParentDialog(this);
} else {
tab->removeTab(backendTabId);
}
//
// 2) The audio tab
//

View file

@ -59,6 +59,7 @@ class CommandSender;
class GuiObject;
class RadiobuttonGroup;
class RadiobuttonWidget;
class OptionsContainerWidget;
class OptionsDialog : public Dialog {
public:
@ -246,6 +247,11 @@ protected:
//
Common::String _guioptions;
Common::String _guioptionsString;
//
// Backend controls
//
OptionsContainerWidget *_backendOptions;
};

View file

@ -1666,6 +1666,11 @@ const char *defaultXML1 = "<?xml version = '1.0'?>"
"<widget name='Container'/>"
"</layout>"
"</dialog>"
"<dialog name='GlobalOptions_Backend' overlays='Dialog.GlobalOptions.TabWidget'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='Container'/>"
"</layout>"
"</dialog>"
"<dialog name='GlobalOptions_Graphics' overlays='Dialog.GlobalOptions.TabWidget'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='Container'/>"
@ -2369,6 +2374,11 @@ const char *defaultXML1 = "<?xml version = '1.0'?>"
"<widget name='Container'/>"
"</layout>"
"</dialog>"
"<dialog name='GameOptions_Backend' overlays='Dialog.GameOptions.TabWidget'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='Container'/>"
"</layout>"
"</dialog>"
"<dialog name='GameOptions_Achievements' overlays='Dialog.GameOptions.TabWidget'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='Container'/>"
@ -2689,6 +2699,11 @@ const char *defaultXML1 = "<?xml version = '1.0'?>"
"<widget name='Container'/>"
"</layout>"
"</dialog>"
"<dialog name='GlobalConfig_Backend' overlays='Dialog.GlobalConfig.TabWidget'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='Container'/>"
"</layout>"
"</dialog>"
"<dialog name='GlobalConfig_Achievements' overlays='Dialog.GlobalConfig.TabWidget'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='Container'/>"
@ -3518,6 +3533,11 @@ const char *defaultXML1 = "<?xml version = '1.0'?>"
"<widget name='Container'/>"
"</layout>"
"</dialog>"
"<dialog name='GlobalOptions_Backend' overlays='Dialog.GlobalOptions.TabWidget'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='Container'/>"
"</layout>"
"</dialog>"
"<dialog name='GlobalOptions_Graphics' overlays='Dialog.GlobalOptions.TabWidget'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='Container'/>"
@ -4226,6 +4246,11 @@ const char *defaultXML1 = "<?xml version = '1.0'?>"
"<widget name='Container'/>"
"</layout>"
"</dialog>"
"<dialog name='GameOptions_Backend' overlays='Dialog.GameOptions.TabWidget'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='Container'/>"
"</layout>"
"</dialog>"
"<dialog name='GameOptions_Achievements' overlays='Dialog.GameOptions.TabWidget'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='Container'/>"
@ -4555,6 +4580,11 @@ const char *defaultXML1 = "<?xml version = '1.0'?>"
"<widget name='Container'/>"
"</layout>"
"</dialog>"
"<dialog name='GlobalConfig_Backend' overlays='Dialog.GlobalConfig.TabWidget'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='Container'/>"
"</layout>"
"</dialog>"
"<dialog name='GlobalConfig_Achievements' overlays='Dialog.GlobalConfig.TabWidget'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='Container'/>"

Binary file not shown.

View file

@ -1 +1 @@
[SCUMMVM_STX0.8.39:ResidualVM Modern Theme:No Author]
[SCUMMVM_STX0.8.40:ResidualVM Modern Theme:No Author]

View file

@ -309,6 +309,12 @@
</layout>
</dialog>
<dialog name = 'GlobalOptions_Backend' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalOptions_Graphics' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1032,6 +1038,12 @@
</layout>
</dialog>
<dialog name = 'GameOptions_Backend' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1370,6 +1382,12 @@
</layout>
</dialog>
<dialog name = 'GlobalConfig_Backend' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>

View file

@ -288,6 +288,12 @@
</layout>
</dialog>
<dialog name = 'GlobalOptions_Backend' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalOptions_Graphics' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1017,6 +1023,12 @@
</layout>
</dialog>
<dialog name = 'GameOptions_Backend' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1364,6 +1376,12 @@
</layout>
</dialog>
<dialog name = 'GlobalConfig_Backend' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>

Binary file not shown.

View file

@ -1 +1 @@
[SCUMMVM_STX0.8.39:ScummVM Classic Theme:No Author]
[SCUMMVM_STX0.8.40:ScummVM Classic Theme:No Author]

View file

@ -293,6 +293,12 @@
</layout>
</dialog>
<dialog name = 'GlobalOptions_Backend' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalOptions_Graphics' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1017,6 +1023,12 @@
</layout>
</dialog>
<dialog name = 'GameOptions_Backend' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1355,6 +1367,12 @@
</layout>
</dialog>
<dialog name = 'GlobalConfig_Backend' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>

View file

@ -290,6 +290,12 @@
</layout>
</dialog>
<dialog name = 'GlobalOptions_Backend' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalOptions_Graphics' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1018,6 +1024,12 @@
</layout>
</dialog>
<dialog name = 'GameOptions_Backend' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1364,6 +1376,12 @@
</layout>
</dialog>
<dialog name = 'GlobalConfig_Backend' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>

Binary file not shown.

View file

@ -1 +1 @@
[SCUMMVM_STX0.8.39:ScummVM Modern Theme:No Author]
[SCUMMVM_STX0.8.40:ScummVM Modern Theme:No Author]

View file

@ -309,6 +309,12 @@
</layout>
</dialog>
<dialog name = 'GlobalOptions_Backend' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalOptions_Graphics' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1032,6 +1038,12 @@
</layout>
</dialog>
<dialog name = 'GameOptions_Backend' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1370,6 +1382,12 @@
</layout>
</dialog>
<dialog name = 'GlobalConfig_Backend' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>

View file

@ -288,6 +288,12 @@
</layout>
</dialog>
<dialog name = 'GlobalOptions_Backend' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalOptions_Graphics' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1017,6 +1023,12 @@
</layout>
</dialog>
<dialog name = 'GameOptions_Backend' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1364,6 +1376,12 @@
</layout>
</dialog>
<dialog name = 'GlobalConfig_Backend' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>

Binary file not shown.

View file

@ -1 +1 @@
[SCUMMVM_STX0.8.39:ScummVM Modern Theme Remastered:No Author]
[SCUMMVM_STX0.8.40:ScummVM Modern Theme Remastered:No Author]

View file

@ -309,6 +309,12 @@
</layout>
</dialog>
<dialog name = 'GlobalOptions_Backend' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalOptions_Graphics' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1032,6 +1038,12 @@
</layout>
</dialog>
<dialog name = 'GameOptions_Backend' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1370,6 +1382,12 @@
</layout>
</dialog>
<dialog name = 'GlobalConfig_Backend' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>

View file

@ -288,6 +288,12 @@
</layout>
</dialog>
<dialog name = 'GlobalOptions_Backend' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalOptions_Graphics' overlays = 'Dialog.GlobalOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1017,6 +1023,12 @@
</layout>
</dialog>
<dialog name = 'GameOptions_Backend' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
@ -1364,6 +1376,12 @@
</layout>
</dialog>
<dialog name = 'GlobalConfig_Backend' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>
</layout>
</dialog>
<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'Container'/>