|
|
@ -206,6 +206,7 @@ void BuildFileList()
|
|
|
|
case SLD_LOAD_SCENARIO:
|
|
|
|
case SLD_LOAD_SCENARIO:
|
|
|
|
case SLD_SAVE_SCENARIO:
|
|
|
|
case SLD_SAVE_SCENARIO:
|
|
|
|
FiosGetScenarioList(_saveload_mode); break;
|
|
|
|
FiosGetScenarioList(_saveload_mode); break;
|
|
|
|
|
|
|
|
case SLD_SAVE_HEIGHTMAP:
|
|
|
|
case SLD_LOAD_HEIGHTMAP:
|
|
|
|
case SLD_LOAD_HEIGHTMAP:
|
|
|
|
FiosGetHeightmapList(_saveload_mode); break;
|
|
|
|
FiosGetHeightmapList(_saveload_mode); break;
|
|
|
|
|
|
|
|
|
|
|
@ -245,6 +246,7 @@ private:
|
|
|
|
Scrollbar *vscroll;
|
|
|
|
Scrollbar *vscroll;
|
|
|
|
public:
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Generate a default save filename. */
|
|
|
|
void GenerateFileName()
|
|
|
|
void GenerateFileName()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
GenerateDefaultSaveName(this->edit_str_buf, &this->edit_str_buf[this->edit_str_size - 1]);
|
|
|
|
GenerateDefaultSaveName(this->edit_str_buf, &this->edit_str_buf[this->edit_str_size - 1]);
|
|
|
@ -258,6 +260,7 @@ public:
|
|
|
|
STR_SAVELOAD_SAVE_CAPTION,
|
|
|
|
STR_SAVELOAD_SAVE_CAPTION,
|
|
|
|
STR_SAVELOAD_SAVE_SCENARIO,
|
|
|
|
STR_SAVELOAD_SAVE_SCENARIO,
|
|
|
|
STR_SAVELOAD_LOAD_HEIGHTMAP,
|
|
|
|
STR_SAVELOAD_LOAD_HEIGHTMAP,
|
|
|
|
|
|
|
|
STR_SAVELOAD_SAVE_HEIGHTMAP,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
assert((uint)mode < lengthof(saveload_captions));
|
|
|
|
assert((uint)mode < lengthof(saveload_captions));
|
|
|
|
|
|
|
|
|
|
|
@ -265,6 +268,7 @@ public:
|
|
|
|
* by current file mode */
|
|
|
|
* by current file mode */
|
|
|
|
switch (mode) {
|
|
|
|
switch (mode) {
|
|
|
|
case SLD_SAVE_GAME: this->GenerateFileName(); break;
|
|
|
|
case SLD_SAVE_GAME: this->GenerateFileName(); break;
|
|
|
|
|
|
|
|
case SLD_SAVE_HEIGHTMAP:
|
|
|
|
case SLD_SAVE_SCENARIO: strecpy(this->edit_str_buf, "UNNAMED", &this->edit_str_buf[edit_str_size - 1]); break;
|
|
|
|
case SLD_SAVE_SCENARIO: strecpy(this->edit_str_buf, "UNNAMED", &this->edit_str_buf[edit_str_size - 1]); break;
|
|
|
|
default: break;
|
|
|
|
default: break;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -304,6 +308,7 @@ public:
|
|
|
|
FioGetDirectory(o_dir.name, lengthof(o_dir.name), SCENARIO_DIR);
|
|
|
|
FioGetDirectory(o_dir.name, lengthof(o_dir.name), SCENARIO_DIR);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case SLD_SAVE_HEIGHTMAP:
|
|
|
|
case SLD_LOAD_HEIGHTMAP:
|
|
|
|
case SLD_LOAD_HEIGHTMAP:
|
|
|
|
FioGetDirectory(o_dir.name, lengthof(o_dir.name), HEIGHTMAP_DIR);
|
|
|
|
FioGetDirectory(o_dir.name, lengthof(o_dir.name), HEIGHTMAP_DIR);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
@ -313,7 +318,7 @@ public:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Focus the edit box by default in the save windows */
|
|
|
|
/* Focus the edit box by default in the save windows */
|
|
|
|
if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) {
|
|
|
|
if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO || _saveload_mode == SLD_SAVE_HEIGHTMAP) {
|
|
|
|
this->SetFocusedWidget(SLWW_SAVE_OSK_TITLE);
|
|
|
|
this->SetFocusedWidget(SLWW_SAVE_OSK_TITLE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -498,7 +503,7 @@ public:
|
|
|
|
this->vscroll->SetCount(_fios_items.Length());
|
|
|
|
this->vscroll->SetCount(_fios_items.Length());
|
|
|
|
this->DrawWidgets();
|
|
|
|
this->DrawWidgets();
|
|
|
|
|
|
|
|
|
|
|
|
if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) {
|
|
|
|
if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO || _saveload_mode == SLD_SAVE_HEIGHTMAP) {
|
|
|
|
this->DrawEditBox(SLWW_SAVE_OSK_TITLE);
|
|
|
|
this->DrawEditBox(SLWW_SAVE_OSK_TITLE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -564,7 +569,7 @@ public:
|
|
|
|
|
|
|
|
|
|
|
|
this->InvalidateData(1);
|
|
|
|
this->InvalidateData(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) {
|
|
|
|
if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO || _saveload_mode == SLD_SAVE_HEIGHTMAP) {
|
|
|
|
/* Copy clicked name to editbox */
|
|
|
|
/* Copy clicked name to editbox */
|
|
|
|
ttd_strlcpy(this->text.buf, file->title, this->text.max_bytes);
|
|
|
|
ttd_strlcpy(this->text.buf, file->title, this->text.max_bytes);
|
|
|
|
UpdateTextBufferSize(&this->text);
|
|
|
|
UpdateTextBufferSize(&this->text);
|
|
|
@ -611,7 +616,7 @@ public:
|
|
|
|
|
|
|
|
|
|
|
|
virtual void OnMouseLoop()
|
|
|
|
virtual void OnMouseLoop()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) {
|
|
|
|
if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO || _saveload_mode == SLD_SAVE_HEIGHTMAP) {
|
|
|
|
this->HandleEditBox(SLWW_SAVE_OSK_TITLE);
|
|
|
|
this->HandleEditBox(SLWW_SAVE_OSK_TITLE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -624,7 +629,7 @@ public:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EventState state = ES_NOT_HANDLED;
|
|
|
|
EventState state = ES_NOT_HANDLED;
|
|
|
|
if ((_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) &&
|
|
|
|
if ((_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO || _saveload_mode == SLD_SAVE_HEIGHTMAP) &&
|
|
|
|
this->HandleEditBoxKey(SLWW_SAVE_OSK_TITLE, key, keycode, state) == HEBR_CONFIRM) {
|
|
|
|
this->HandleEditBoxKey(SLWW_SAVE_OSK_TITLE, key, keycode, state) == HEBR_CONFIRM) {
|
|
|
|
this->HandleButtonClick(SLWW_SAVE_GAME);
|
|
|
|
this->HandleButtonClick(SLWW_SAVE_GAME);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -635,8 +640,8 @@ public:
|
|
|
|
virtual void OnTimeout()
|
|
|
|
virtual void OnTimeout()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
/* This test protects against using widgets 11 and 12 which are only available
|
|
|
|
/* This test protects against using widgets 11 and 12 which are only available
|
|
|
|
* in those two saveload mode */
|
|
|
|
* in those saveload modes. */
|
|
|
|
if (!(_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO)) return;
|
|
|
|
if (!(_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO || _saveload_mode == SLD_SAVE_HEIGHTMAP)) return;
|
|
|
|
|
|
|
|
|
|
|
|
if (this->IsWidgetLowered(SLWW_DELETE_SELECTION)) { // Delete button clicked
|
|
|
|
if (this->IsWidgetLowered(SLWW_DELETE_SELECTION)) { // Delete button clicked
|
|
|
|
if (!FiosDelete(this->text.buf)) {
|
|
|
|
if (!FiosDelete(this->text.buf)) {
|
|
|
@ -649,8 +654,13 @@ public:
|
|
|
|
|
|
|
|
|
|
|
|
UpdateTextBufferSize(&this->text);
|
|
|
|
UpdateTextBufferSize(&this->text);
|
|
|
|
} else if (this->IsWidgetLowered(SLWW_SAVE_GAME)) { // Save button clicked
|
|
|
|
} else if (this->IsWidgetLowered(SLWW_SAVE_GAME)) { // Save button clicked
|
|
|
|
_switch_mode = SM_SAVE_GAME;
|
|
|
|
if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) {
|
|
|
|
FiosMakeSavegameName(_file_to_saveload.name, this->text.buf, sizeof(_file_to_saveload.name));
|
|
|
|
_switch_mode = SM_SAVE_GAME;
|
|
|
|
|
|
|
|
FiosMakeSavegameName(_file_to_saveload.name, this->text.buf, sizeof(_file_to_saveload.name));
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
_switch_mode = SM_SAVE_HEIGHTMAP;
|
|
|
|
|
|
|
|
FiosMakeHeightmapName(_file_to_saveload.name, this->text.buf, sizeof(_file_to_saveload.name));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* In the editor set up the vehicle engines correctly (date might have changed) */
|
|
|
|
/* In the editor set up the vehicle engines correctly (date might have changed) */
|
|
|
|
if (_game_mode == GM_EDITOR) StartupEngines();
|
|
|
|
if (_game_mode == GM_EDITOR) StartupEngines();
|
|
|
@ -726,11 +736,12 @@ static const WindowDesc _save_dialog_desc(
|
|
|
|
* So each entry, as expressed by the related comment, is based on the enum
|
|
|
|
* So each entry, as expressed by the related comment, is based on the enum
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
static const FileType _file_modetotype[] = {
|
|
|
|
static const FileType _file_modetotype[] = {
|
|
|
|
FT_SAVEGAME, ///< used for SLD_LOAD_GAME
|
|
|
|
FT_SAVEGAME, // used for SLD_LOAD_GAME
|
|
|
|
FT_SCENARIO, ///< used for SLD_LOAD_SCENARIO
|
|
|
|
FT_SCENARIO, // used for SLD_LOAD_SCENARIO
|
|
|
|
FT_SAVEGAME, ///< used for SLD_SAVE_GAME
|
|
|
|
FT_SAVEGAME, // used for SLD_SAVE_GAME
|
|
|
|
FT_SCENARIO, ///< used for SLD_SAVE_SCENARIO
|
|
|
|
FT_SCENARIO, // used for SLD_SAVE_SCENARIO
|
|
|
|
FT_HEIGHTMAP, ///< used for SLD_LOAD_HEIGHTMAP
|
|
|
|
FT_HEIGHTMAP, // used for SLD_LOAD_HEIGHTMAP
|
|
|
|
|
|
|
|
FT_HEIGHTMAP, // used for SLD_SAVE_HEIGHTMAP
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -745,6 +756,7 @@ void ShowSaveLoadDialog(SaveLoadDialogMode mode)
|
|
|
|
switch (mode) {
|
|
|
|
switch (mode) {
|
|
|
|
case SLD_SAVE_GAME:
|
|
|
|
case SLD_SAVE_GAME:
|
|
|
|
case SLD_SAVE_SCENARIO:
|
|
|
|
case SLD_SAVE_SCENARIO:
|
|
|
|
|
|
|
|
case SLD_SAVE_HEIGHTMAP:
|
|
|
|
sld = &_save_dialog_desc; break;
|
|
|
|
sld = &_save_dialog_desc; break;
|
|
|
|
case SLD_LOAD_HEIGHTMAP:
|
|
|
|
case SLD_LOAD_HEIGHTMAP:
|
|
|
|
sld = &_load_heightmap_dialog_desc; break;
|
|
|
|
sld = &_load_heightmap_dialog_desc; break;
|
|
|
|