diff options
-rw-r--r-- | gui/chooser.cpp | 7 | ||||
-rw-r--r-- | gui/chooser.h | 4 | ||||
-rw-r--r-- | gui/launcher.cpp | 3 | ||||
-rw-r--r-- | scumm/dialogs.cpp | 20 | ||||
-rw-r--r-- | scumm/dialogs.h | 4 |
5 files changed, 26 insertions, 12 deletions
diff --git a/gui/chooser.cpp b/gui/chooser.cpp index 78d270269e..ad32c4f6ad 100644 --- a/gui/chooser.cpp +++ b/gui/chooser.cpp @@ -29,7 +29,7 @@ enum { kChooseCmd = 'Chos' }; -ChooserDialog::ChooserDialog(const String &title, const StringList& list, const String &buttonLabel, int height) +ChooserDialog::ChooserDialog(const String &title, const String &buttonLabel, int height) : Dialog(8, (200 - height) / 2, 320 - 2 * 8, height) { // Headline new StaticTextWidget(this, 10, 6, _w - 2 * 10, kLineHeight, title, kTextAlignCenter); @@ -37,7 +37,6 @@ ChooserDialog::ChooserDialog(const String &title, const StringList& list, const // Add choice list _list = new ListWidget(this, 10, 18, _w - 2 * 10, _h - 14 - 24 - 10); _list->setNumberingMode(kListNumberingOff); - _list->setList(list); // Buttons addButton(_w - 2 * (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); @@ -45,6 +44,10 @@ ChooserDialog::ChooserDialog(const String &title, const StringList& list, const _chooseButton->setEnabled(false); } +void ChooserDialog::setList(const StringList& list) { + _list->setList(list); +} + void ChooserDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) { int item = _list->getSelected(); switch (cmd) { diff --git a/gui/chooser.h b/gui/chooser.h index e1d8311f07..bf8732be91 100644 --- a/gui/chooser.h +++ b/gui/chooser.h @@ -42,7 +42,9 @@ protected: ButtonWidget *_chooseButton; public: - ChooserDialog(const String &title, const StringList &list, const String &buttonLabel = "Choose", int height = 140); + ChooserDialog(const String &title, const String &buttonLabel = "Choose", int height = 140); + + void setList(const StringList& list); virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data); }; diff --git a/gui/launcher.cpp b/gui/launcher.cpp index 5cabc4c7bb..6ac0a8a9a7 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -428,7 +428,8 @@ void LauncherDialog::addGame() { for (idx = 0; idx < candidates.size(); idx++) list.push_back(candidates[idx].description); - ChooserDialog dialog("Pick the game:", list); + ChooserDialog dialog("Pick the game:"); + dialog.setList(list); idx = dialog.runModal(); } if (0 <= idx && idx < candidates.size()) { diff --git a/scumm/dialogs.cpp b/scumm/dialogs.cpp index 6390d1774f..a121fcbaf3 100644 --- a/scumm/dialogs.cpp +++ b/scumm/dialogs.cpp @@ -198,14 +198,14 @@ protected: bool _saveMode; public: - SaveLoadChooser(const String &title, const StringList& list, const String &buttonLabel, bool saveMode); + SaveLoadChooser(const String &title, const String &buttonLabel, bool saveMode); virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data); const String &getResultString() const; }; -SaveLoadChooser::SaveLoadChooser(const String &title, const StringList& list, const String &buttonLabel, bool saveMode) - : ChooserDialog(title, list, buttonLabel, 182), _saveMode(saveMode) { +SaveLoadChooser::SaveLoadChooser(const String &title, const String &buttonLabel, bool saveMode) + : ChooserDialog(title, buttonLabel, 182), _saveMode(saveMode) { _list->setEditable(saveMode); _list->setNumberingMode(saveMode ? kListNumberingOne : kListNumberingZero); @@ -303,6 +303,8 @@ MainMenuDialog::MainMenuDialog(ScummEngine *scumm) #ifndef DISABLE_HELP _helpDialog = new HelpDialog(scumm); #endif + _saveDialog = new SaveLoadChooser("Save game:", "Save", true); + _loadDialog = new SaveLoadChooser("Load game:", "Load", false); } MainMenuDialog::~MainMenuDialog() { @@ -310,6 +312,8 @@ MainMenuDialog::~MainMenuDialog() { #ifndef DISABLE_HELP delete _helpDialog; #endif + delete _saveDialog; + delete _loadDialog; } void MainMenuDialog::open() { @@ -361,10 +365,10 @@ void MainMenuDialog::close() { void MainMenuDialog::save() { int idx; - SaveLoadChooser dialog("Save game:", generateSavegameList(_scumm, true), "Save", true); - idx = dialog.runModal(); + _saveDialog->setList(generateSavegameList(_scumm, true)); + idx = _saveDialog->runModal(); if (idx >= 0) { - const String &result = dialog.getResultString(); + const String &result = _saveDialog->getResultString(); char buffer[20]; const char *str; if (result.isEmpty()) { @@ -380,8 +384,8 @@ void MainMenuDialog::save() { void MainMenuDialog::load() { int idx; - SaveLoadChooser dialog("Load game:", generateSavegameList(_scumm, false), "Load", false); - idx = dialog.runModal(); + _loadDialog->setList(generateSavegameList(_scumm, false)); + idx = _loadDialog->runModal(); if (idx >= 0) { _scumm->requestLoad(idx); close(); diff --git a/scumm/dialogs.h b/scumm/dialogs.h index 7d9f7ff9fe..789d8ff121 100644 --- a/scumm/dialogs.h +++ b/scumm/dialogs.h @@ -54,6 +54,8 @@ protected: const String queryResString(int stringno); }; +class SaveLoadChooser; + class MainMenuDialog : public ScummDialog { public: MainMenuDialog(ScummEngine *scumm); @@ -67,6 +69,8 @@ protected: #ifndef DISABLE_HELP GUI::Dialog *_helpDialog; #endif + SaveLoadChooser *_saveDialog; + SaveLoadChooser *_loadDialog; void save(); void load(); |