From 293c6cc4617af07901b2a6326a5af1894ceb9ffc Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 21 Nov 2002 17:25:31 +0000 Subject: enhanced Config::rename_domain; added the ability to change the domain name in EditGameDialog svn-id: r5673 --- common/config-file.cpp | 18 +++++++++--------- common/config-file.h | 2 +- common/gameDetector.cpp | 4 ++-- gui/launcher.cpp | 38 +++++++++++++++++++++++++++----------- 4 files changed, 39 insertions(+), 23 deletions(-) diff --git a/common/config-file.cpp b/common/config-file.cpp index 137a25ebc6..821d6e5b3c 100644 --- a/common/config-file.cpp +++ b/common/config-file.cpp @@ -201,22 +201,22 @@ void Config::flush() const } } -void Config::rename_domain(const String &d) +void Config::rename_domain(const String &oldD, const String &newD) { - String domain(d); - domain.toLowercase(); + String oldDomain(oldD); + String newDomain(newD); + oldDomain.toLowercase(); + newDomain.toLowercase(); - if (domain == defaultDomain) + if (oldDomain == newDomain) return; - StringMap &oldHash = domains[defaultDomain]; - StringMap &newHash = domains[domain]; + StringMap &oldHash = domains[oldDomain]; + StringMap &newHash = domains[newDomain]; newHash.merge(oldHash); - domains.remove(defaultDomain); - - defaultDomain = domain; + domains.remove(oldDomain); } void Config::delete_domain(const String &d) diff --git a/common/config-file.h b/common/config-file.h index 520fb769dd..0612954914 100644 --- a/common/config-file.h +++ b/common/config-file.h @@ -46,7 +46,7 @@ public: void set_domain(const String &d); void flush() const; - void rename_domain(const String &d); + void rename_domain(const String &oldD, const String &newD); void delete_domain(const String &d); bool has_domain(const String &d) const; void set_filename(const String &); diff --git a/common/gameDetector.cpp b/common/gameDetector.cpp index 51011b9425..9e766674f2 100644 --- a/common/gameDetector.cpp +++ b/common/gameDetector.cpp @@ -360,8 +360,8 @@ void GameDetector::setGame(const String &name) { _gameFileName = name; g_config->set_domain(name); - g_config->rename_domain("game-specific"); - g_config->rename_domain(name); + g_config->rename_domain(name, "game-specific"); + g_config->rename_domain("game-specific", name); updateconfig(); } diff --git a/gui/launcher.cpp b/gui/launcher.cpp index 22c4c0e6c4..94963cb742 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -80,20 +80,21 @@ protected: Config &_config; const String &_domain; EditTextWidget *_descriptionWidget; + EditTextWidget *_domainWidget; }; EditGameDialog::EditGameDialog(NewGui *gui, Config &config, const String &domain) - : Dialog(gui, 10, 40, 320-2*10, 200-2*40), _config(config), _domain(domain) + : Dialog(gui, 8, 50, 320-2*8, 200-2*40), _config(config), _domain(domain) { // Determine the description string - String name(_config.get("gameid", _domain)); + String gameid(_config.get("gameid", _domain)); String description(_config.get("description", _domain)); - if (name.isEmpty()) - name = _domain; + if (gameid.isEmpty()) + gameid = _domain; if (description.isEmpty()) { const VersionSettings *v = version_settings; while (v->filename) { - if (!scumm_stricmp(v->filename, name.c_str())) { + if (!scumm_stricmp(v->filename, gameid.c_str())) { description = v->gamename; break; } @@ -101,15 +102,20 @@ EditGameDialog::EditGameDialog(NewGui *gui, Config &config, const String &domain } } + // Label & edit widget for the game ID + new StaticTextWidget(this, 10, 10, 40, kLineHeight, "ID: ", kTextAlignRight); + _domainWidget = + new EditTextWidget(this, 50, 10, _w-50-10, kLineHeight, _domain); + // Label & edit widget for the description - new StaticTextWidget(this, 10, 10, 40, kLineHeight, "Name: ", kTextAlignRight); + new StaticTextWidget(this, 10, 26, 40, kLineHeight, "Name: ", kTextAlignRight); _descriptionWidget = - new EditTextWidget(this, 50, 10, _w-50-10, kLineHeight, description); + new EditTextWidget(this, 50, 26, _w-50-10, kLineHeight, description); // Path to game data (view only) String path(_config.get("path", _domain)); - new StaticTextWidget(this, 10, 24, 40, kLineHeight, "Path: ", kTextAlignRight); - new StaticTextWidget(this, 50, 24, _w-50-10, kLineHeight, path, kTextAlignLeft); + new StaticTextWidget(this, 10, 42, 40, kLineHeight, "Path: ", kTextAlignRight); + new StaticTextWidget(this, 50, 42, _w-50-10, kLineHeight, path, kTextAlignLeft); // TODO - insert more widgets here; see comments before the class @@ -121,11 +127,21 @@ EditGameDialog::EditGameDialog(NewGui *gui, Config &config, const String &domain void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) { switch (cmd) { - case kOKCmd: + case kOKCmd: { // Write back changes made to config object - _config.set("description", _descriptionWidget->getLabel(), _domain); + String newDomain(_domainWidget->getLabel()); + if (newDomain != _domain) { + if (newDomain.isEmpty() || _config.has_domain(newDomain)) { + MessageDialog alert(_gui, "This game ID is already taken. Please choose another one."); + alert.runModal(); + return; + } + _config.rename_domain(_domain, newDomain); + } + _config.set("description", _descriptionWidget->getLabel(), newDomain); setResult(1); close(); + } break; default: Dialog::handleCommand(sender, cmd, data); -- cgit v1.2.3