ALL: add support for --config and refactor code

This commit is contained in:
grisenti 2022-05-24 23:45:45 +02:00 committed by Eugene Sandulenko
parent d6dbf721b6
commit 7b53202a9e
6 changed files with 90 additions and 124 deletions

View file

@ -1668,6 +1668,10 @@ Common::String parseCommandLine(Common::StringMap &settings, int argc, const cha
#endif // DISABLE_COMMAND_LINE #endif // DISABLE_COMMAND_LINE
void storeSessionSetting(const Common::String &command, const Common::String &settingName, const Common::StringMap &settings) {
if (settings.contains(command))
ConfMan.set(settingName, settings[command], Common::ConfigManager::kSessionDomain);
}
bool processSettings(Common::String &command, Common::StringMap &settings, Common::Error &err) { bool processSettings(Common::String &command, Common::StringMap &settings, Common::Error &err) {
err = Common::kNoError; err = Common::kNoError;
@ -1830,72 +1834,29 @@ bool processSettings(Common::String &command, Common::StringMap &settings, Commo
} }
// store all session related settings // store all session related settings
if (settings.contains("savepath")) { storeSessionSetting("config", "config", settings);
ConfMan.set("savepath", settings["savepath"], Common::ConfigManager::kSessionDomain); storeSessionSetting("fullscreen", "fullscreen", settings);
} storeSessionSetting("gfx-mode", "gfx_mode", settings);
if (settings.contains("themepath")) { storeSessionSetting("stretch-mode", "stretch_mode", settings);
ConfMan.set("themepath", settings["themepath"], Common::ConfigManager::kSessionDomain); storeSessionSetting("scaler", "scaler", settings);
} storeSessionSetting("scale-factor", "scale_factor", settings);
if (settings.contains("extrapath")) { storeSessionSetting("filtering", "filtering", settings);
ConfMan.set("extrapath", settings["extrapath"], Common::ConfigManager::kSessionDomain); storeSessionSetting("gui-theme", "gui_theme", settings);
} storeSessionSetting("themepath", "themepath", settings);
if (settings.contains("gui-theme")) { storeSessionSetting("music-volume", "music_volume", settings);
ConfMan.set("gui_theme", settings["gui-theme"], Common::ConfigManager::kSessionDomain); storeSessionSetting("sfx-volume", "sfx_volume", settings);
} storeSessionSetting("speech-volume", "speech_volume", settings);
if (settings.contains("gfx-mode")) { storeSessionSetting("midi-gain", "midi_gain", settings);
ConfMan.set("gfx_mode", settings["gfx-mode"], Common::ConfigManager::kSessionDomain); storeSessionSetting("subtitles", "subtitles", settings);
} storeSessionSetting("savepath", "savepath", settings);
if (settings.contains("stretch-mode")) { storeSessionSetting("extrapath", "extrapath", settings);
ConfMan.set("stretch_mode", settings["stretch-mode"], Common::ConfigManager::kSessionDomain); storeSessionSetting("soundfont", "soundfont", settings);
} storeSessionSetting("multi-midi", "multi_midi", settings);
if (settings.contains("render-mode")) { storeSessionSetting("native-mt32", "native-mt32", settings);
ConfMan.set("render_mode", settings["render-mode"], Common::ConfigManager::kSessionDomain); storeSessionSetting("enable-gs", "enable_gs", settings);
} storeSessionSetting("opl-driver", "opl_driver", settings);
if (settings.contains("music-volume")) { storeSessionSetting("talkspeed", "talkspeed", settings);
ConfMan.set("music_volume", settings["music-volume"], Common::ConfigManager::kSessionDomain); storeSessionSetting("render-mode", "render_mode", settings);
}
if (settings.contains("sfx-volume")) {
ConfMan.set("sfx_volume", settings["sfx-volume"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("speech-volume")) {
ConfMan.set("speech_volume", settings["speech-volume"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("fullscreen")) {
ConfMan.set("fullscreen", settings["fullscreen"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("enable-gs")) {
ConfMan.set("enable_gs", settings["enable-gs"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("native-mt32")) {
ConfMan.set("native_mt32", settings["native-mt32"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("filtering")) {
ConfMan.set("filtering", settings["filtering"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("multi-midi")) {
ConfMan.set("multi_midi", settings["multi-midi"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("midi-gain")) {
ConfMan.set("midi_gain", settings["midi-gain"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("soundfont")) {
ConfMan.set("soundfont", settings["soundfont"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("scaler")) {
ConfMan.set("scaler", settings["scaler"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("scale-factor")) {
ConfMan.set("scale_factor", settings["scale-factor"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("opl-driver")) {
ConfMan.set("opl_driver", settings["opl-driver"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("talkspeed")) {
ConfMan.set("talkspeed", settings["talkspeed"], Common::ConfigManager::kSessionDomain);
}
if (settings.contains("subtitles")) {
ConfMan.set("subtitles", settings["subtitles"], Common::ConfigManager::kSessionDomain);
}
// Finally, store the command line settings into the config manager. // Finally, store the command line settings into the config manager.
for (Common::StringMap::const_iterator x = settings.begin(); x != settings.end(); ++x) { for (Common::StringMap::const_iterator x = settings.begin(); x != settings.end(); ++x) {

View file

@ -416,7 +416,6 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) {
// Load the config file (possibly overridden via command line): // Load the config file (possibly overridden via command line):
if (settings.contains("config")) { if (settings.contains("config")) {
ConfMan.loadConfigFile(settings["config"]); ConfMan.loadConfigFile(settings["config"]);
settings.erase("config");
} else { } else {
ConfMan.loadDefaultConfigFile(); ConfMan.loadDefaultConfigFile();
} }

View file

@ -1058,7 +1058,7 @@ void ThemeEngine::drawLineSeparator(const Common::Rect &r) {
} }
void ThemeEngine::drawCheckbox(const Common::Rect &r, int spacing, const Common::U32String &str, bool checked, void ThemeEngine::drawCheckbox(const Common::Rect &r, int spacing, const Common::U32String &str, bool checked,
WidgetStateInfo state, bool override, bool rtl) { WidgetStateInfo state, bool overrideText, bool rtl) {
if (!ready()) if (!ready())
return; return;
@ -1088,7 +1088,7 @@ void ThemeEngine::drawCheckbox(const Common::Rect &r, int spacing, const Common:
} }
if (r2.right > r2.left) { if (r2.right > r2.left) {
TextColor color = override ? GUI::TextColor::kTextColorOverride : getTextColor(dd); TextColor color = overrideText ? GUI::TextColor::kTextColorOverride : getTextColor(dd);
drawDDText(getTextData(dd), color, r2, str, true, false, convertTextAlignH(_widgets[dd]->_textAlignH, rtl), drawDDText(getTextData(dd), color, r2, str, true, false, convertTextAlignH(_widgets[dd]->_textAlignH, rtl),
_widgets[dd]->_textAlignV); _widgets[dd]->_textAlignV);
} }
@ -1359,69 +1359,72 @@ void ThemeEngine::drawText(const Common::Rect &r, const Common::U32String &str,
case kFontColorNormal: case kFontColorNormal:
if (inverted) { if (inverted) {
colorId = kTextColorNormalInverted; colorId = kTextColorNormalInverted;
} else { break;
switch (state) { }
case kStateDisabled:
colorId = kTextColorNormalDisabled;
break;
case kStateHighlight: switch (state) {
colorId = kTextColorNormalHover; case kStateDisabled:
break; colorId = kTextColorNormalDisabled;
break;
default: case kStateHighlight:
// fallthrough intended colorId = kTextColorNormalHover;
case kStateEnabled: break;
case kStatePressed:
colorId = kTextColorNormal; default:
break; // fallthrough intended
} case kStateEnabled:
case kStatePressed:
colorId = kTextColorNormal;
break;
} }
break; break;
case kFontColorAlternate: case kFontColorAlternate:
if (inverted) { if (inverted) {
colorId = kTextColorAlternativeInverted; colorId = kTextColorAlternativeInverted;
} else { break;
switch (state) { }
case kStateDisabled:
colorId = kTextColorAlternativeDisabled;
break;
case kStateHighlight: switch (state) {
colorId = kTextColorAlternativeHover; case kStateDisabled:
break; colorId = kTextColorAlternativeDisabled;
break;
default: case kStateHighlight:
// fallthrough intended colorId = kTextColorAlternativeHover;
case kStateEnabled: break;
case kStatePressed:
colorId = kTextColorAlternative; default:
break; // fallthrough intended
} case kStateEnabled:
case kStatePressed:
colorId = kTextColorAlternative;
break;
} }
break; break;
case kFontColorOverride: case kFontColorOverride:
if (inverted) { if (inverted) {
colorId = kTextColorOverrideInverted; colorId = kTextColorOverrideInverted;
} else { break;
switch (state) { }
case kStateDisabled:
colorId = kTextColorAlternativeDisabled; switch (state) {
break; case kStateDisabled:
colorId = kTextColorAlternativeDisabled;
break;
case kStateHighlight: case kStateHighlight:
colorId = kTextColorOverrideHover; colorId = kTextColorOverrideHover;
break; break;
default: default:
// fallthrough intended // fallthrough intended
case kStateEnabled: case kStateEnabled:
case kStatePressed: case kStatePressed:
colorId = kTextColorOverride; colorId = kTextColorOverride;
break; break;
}
} }
break; break;

View file

@ -2202,7 +2202,7 @@ void GlobalOptionsDialog::build() {
#if !defined(__DC__) #if !defined(__DC__)
const auto setPath = const auto setPath =
[&](GUI::StaticTextWidget *const widget, const Common::String& pathType, const Common::U32String &defaultLabel) { [&](GUI::StaticTextWidget *const widget, const Common::String &pathType, const Common::U32String &defaultLabel) {
Common::String path(ConfMan.get(pathType)); Common::String path(ConfMan.get(pathType));
if (ConfMan.isKeyTemporary(pathType)) { if (ConfMan.isKeyTemporary(pathType)) {
widget->setFontColor(ThemeEngine::FontColor::kFontColorOverride); widget->setFontColor(ThemeEngine::FontColor::kFontColorOverride);
@ -2330,7 +2330,10 @@ void GlobalOptionsDialog::addPathsControls(GuiObject *boss, const Common::String
Common::U32String confPath = ConfMan.getCustomConfigFileName(); Common::U32String confPath = ConfMan.getCustomConfigFileName();
if (confPath.empty()) if (confPath.empty())
confPath = g_system->getDefaultConfigFileName(); confPath = g_system->getDefaultConfigFileName();
new StaticTextWidget(boss, prefix + "ConfigPath", _("ScummVM config path: ") + confPath, confPath); StaticTextWidget* configPathWidget = new StaticTextWidget(boss, prefix + "ConfigPath", _("ScummVM config path: ") + confPath, confPath);
if (ConfMan.isKeyTemporary("config"))
configPathWidget->setFontColor(ThemeEngine::FontColor::kFontColorOverride);
Common::U32String browserPath = _("<default>"); Common::U32String browserPath = _("<default>");
if (ConfMan.hasKey("browser_lastpath")) if (ConfMan.hasKey("browser_lastpath"))
@ -2693,7 +2696,7 @@ void GlobalOptionsDialog::apply() {
bool isRebuildNeeded = false; bool isRebuildNeeded = false;
const auto changePath = const auto changePath =
[&](GUI::StaticTextWidget *const widget, const Common::String& pathType, const Common::U32String &defaultLabel){ [&](GUI::StaticTextWidget *const widget, const Common::String &pathType, const Common::U32String &defaultLabel) {
Common::U32String label(widget->getLabel()); Common::U32String label(widget->getLabel());
if (label != ConfMan.get(pathType)) { if (label != ConfMan.get(pathType)) {
widget->setFontColor(ThemeEngine::FontColor::kFontColorNormal); widget->setFontColor(ThemeEngine::FontColor::kFontColorNormal);

View file

@ -707,14 +707,14 @@ void PicButtonWidget::drawWidget() {
#pragma mark - #pragma mark -
CheckboxWidget::CheckboxWidget(GuiObject *boss, int x, int y, int w, int h, const Common::U32String &label, const Common::U32String &tooltip, uint32 cmd, uint8 hotkey) CheckboxWidget::CheckboxWidget(GuiObject *boss, int x, int y, int w, int h, const Common::U32String &label, const Common::U32String &tooltip, uint32 cmd, uint8 hotkey)
: ButtonWidget(boss, x, y, w, h, label, tooltip, cmd, hotkey), _state(false), _override(false) { : ButtonWidget(boss, x, y, w, h, label, tooltip, cmd, hotkey), _state(false), _overrideText(false) {
setFlags(WIDGET_ENABLED); setFlags(WIDGET_ENABLED);
_type = kCheckboxWidget; _type = kCheckboxWidget;
_spacing = g_gui.xmlEval()->getVar("Globals.Checkbox.Spacing", 15); _spacing = g_gui.xmlEval()->getVar("Globals.Checkbox.Spacing", 15);
} }
CheckboxWidget::CheckboxWidget(GuiObject *boss, const Common::String &name, const Common::U32String &label, const Common::U32String &tooltip, uint32 cmd, uint8 hotkey) CheckboxWidget::CheckboxWidget(GuiObject *boss, const Common::String &name, const Common::U32String &label, const Common::U32String &tooltip, uint32 cmd, uint8 hotkey)
: ButtonWidget(boss, name, label, tooltip, cmd, hotkey), _state(false), _override(false) { : ButtonWidget(boss, name, label, tooltip, cmd, hotkey), _state(false), _overrideText(false) {
setFlags(WIDGET_ENABLED); setFlags(WIDGET_ENABLED);
_type = kCheckboxWidget; _type = kCheckboxWidget;
_spacing = g_gui.xmlEval()->getVar("Globals.Checkbox.Spacing", 15); _spacing = g_gui.xmlEval()->getVar("Globals.Checkbox.Spacing", 15);
@ -737,12 +737,12 @@ void CheckboxWidget::setState(bool state) {
sendCommand(_cmd, _state); sendCommand(_cmd, _state);
} }
void CheckboxWidget::setOverride(bool override) { void CheckboxWidget::setOverride(bool enable) {
_override = override; _overrideText = enable;
} }
void CheckboxWidget::drawWidget() { void CheckboxWidget::drawWidget() {
g_gui.theme()->drawCheckbox(Common::Rect(_x, _y, _x + _w, _y + _h), _spacing, getLabel(), _state, Widget::_state, _override, (g_gui.useRTL() && _useRTL)); g_gui.theme()->drawCheckbox(Common::Rect(_x, _y, _x + _w, _y + _h), _spacing, getLabel(), _state, Widget::_state, _overrideText, (g_gui.useRTL() && _useRTL));
} }
#pragma mark - #pragma mark -

View file

@ -321,7 +321,7 @@ protected:
class CheckboxWidget : public ButtonWidget { class CheckboxWidget : public ButtonWidget {
protected: protected:
bool _state; bool _state;
bool _override; bool _overrideText;
int _spacing; int _spacing;
public: public:
CheckboxWidget(GuiObject *boss, int x, int y, int w, int h, const Common::U32String &label, const Common::U32String &tooltip = Common::U32String(), uint32 cmd = 0, uint8 hotkey = 0); CheckboxWidget(GuiObject *boss, int x, int y, int w, int h, const Common::U32String &label, const Common::U32String &tooltip = Common::U32String(), uint32 cmd = 0, uint8 hotkey = 0);
@ -335,7 +335,7 @@ public:
void toggleState() { setState(!_state); } void toggleState() { setState(!_state); }
bool getState() const { return _state; } bool getState() const { return _state; }
void setOverride(bool override); void setOverride(bool enable);
protected: protected:
void drawWidget() override; void drawWidget() override;