35 #include "table/strings.h"
42 static bool _fios_path_changed;
43 static bool _savegame_sort_dirty;
56 this->map_size_x = this->map_size_y = 256;
57 this->current_date = 0;
58 memset(&this->settings, 0,
sizeof(this->settings));
98 SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT),
140 SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT),
142 SetDataTip(STR_SAVELOAD_LOAD_BUTTON, STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP),
172 NWidget(
WWT_EDITBOX, COLOUR_GREY,
WID_SL_SAVE_OSK_TITLE),
SetPadding(3, 2, 2, 2),
SetFill(1, 0),
SetResize(1, 0),
173 SetDataTip(STR_SAVELOAD_OSKTITLE, STR_SAVELOAD_EDITBOX_TOOLTIP),
192 TC_LIGHT_BLUE, TC_DARK_GREEN, TC_DARK_GREEN, TC_ORANGE, TC_LIGHT_BROWN,
193 TC_ORANGE, TC_LIGHT_BROWN, TC_ORANGE, TC_ORANGE, TC_YELLOW
198 _fios_path_changed =
true;
201 switch (_saveload_mode) {
216 static void MakeSortedSaveGameList()
225 for (
const FiosItem *item = _fios_items.Begin(); item != _fios_items.End(); item++) {
226 switch (item->type) {
227 case FIOS_TYPE_DIR: sort_start++;
break;
228 case FIOS_TYPE_PARENT: sort_start++;
break;
229 case FIOS_TYPE_DRIVE: sort_end++;
break;
234 uint s_amount = _fios_items.Length() - sort_start - sort_end;
255 static const StringID saveload_captions[] = {
256 STR_SAVELOAD_LOAD_CAPTION,
257 STR_SAVELOAD_LOAD_SCENARIO,
258 STR_SAVELOAD_SAVE_CAPTION,
259 STR_SAVELOAD_SAVE_SCENARIO,
260 STR_SAVELOAD_LOAD_HEIGHTMAP,
261 STR_SAVELOAD_SAVE_HEIGHTMAP,
263 assert((uint)mode <
lengthof(saveload_captions));
279 this->GetWidget<NWidgetCore>(
WID_SL_CAPTION)->widget_data = saveload_captions[mode];
288 if (_game_mode != GM_MENU && !
_networking && _game_mode != GM_EDITOR) {
297 o_dir.type = FIOS_TYPE_DIRECT;
298 switch (_saveload_mode) {
327 if (!
_networking && _game_mode != GM_EDITOR && _game_mode != GM_MENU) {
344 static const char *path = NULL;
345 static StringID str = STR_ERROR_UNABLE_TO_READ_DRIVE;
346 static uint64 tot = 0;
348 if (_fios_path_changed) {
350 _fios_path_changed =
false;
353 if (str != STR_ERROR_UNABLE_TO_READ_DRIVE)
SetDParam(0, tot);
363 for (uint pos = this->vscroll->GetPosition(); pos < _fios_items.Length(); pos++) {
364 const FiosItem *item = _fios_items.Get(pos);
366 if (item == this->selected) {
381 if (this->selected == NULL)
break;
386 if (y > y_max)
break;
395 y, r.bottom - WD_FRAMERECT_BOTTOM, _load_check_data.
error, TC_RED);
398 SetDParam(0, _load_check_data.map_size_x);
399 SetDParam(1, _load_check_data.map_size_y);
402 if (y > y_max)
break;
406 if (landscape < NUM_LANDSCAPE) {
407 SetDParam(0, STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE + landscape);
413 if (y > y_max)
break;
421 if (y > y_max)
break;
426 SetDParam(0, _load_check_data.current_date);
434 if (y > y_max)
break;
442 if (y > y_max)
break;
447 if (y > y_max)
break;
454 if (c.
name != NULL) {
463 if (y > y_max)
break;
487 d.height += padding.height;
496 if (_savegame_sort_dirty) {
497 _savegame_sort_dirty =
false;
498 MakeSortedSaveGameList();
501 this->vscroll->SetCount(_fios_items.Length());
509 _savegame_sort_order = (_savegame_sort_order == SORT_BY_NAME) ?
510 SORT_BY_NAME | SORT_DESCENDING : SORT_BY_NAME;
511 _savegame_sort_dirty =
true;
516 _savegame_sort_order = (_savegame_sort_order == SORT_BY_DATE) ?
517 SORT_BY_DATE | SORT_DESCENDING : SORT_BY_DATE;
518 _savegame_sort_dirty =
true;
528 if (this->selected != NULL && !_load_check_data.
HasErrors()) {
530 SetFiosType(this->selected->type);
556 #if defined(ENABLE_NETWORK)
564 if (y == INT_MAX)
return;
566 const FiosItem *file = _fios_items.Get(y);
570 if (click_count == 1) {
571 if (this->selected != file) {
572 this->selected = file;
573 _load_check_data.
Clear();
575 if (file->type == FIOS_TYPE_FILE || file->type == FIOS_TYPE_SCENARIO) {
586 }
else if (!_load_check_data.
HasErrors()) {
587 this->selected = file;
591 SetFiosType(file->type);
610 #if defined(ENABLE_NETWORK)
611 switch (_saveload_mode) {
612 default: NOT_REACHED();
632 if (keycode == WKC_ESC) {
683 this->selected = NULL;
684 _load_check_data.
Clear();
685 if (!gui_scope)
break;
690 if (!gui_scope)
break;
705 this->vscroll->SetCount(_fios_items.Length());
706 this->selected = NULL;
707 _load_check_data.
Clear();
718 _nested_load_dialog_widgets,
lengthof(_nested_load_dialog_widgets)
726 _nested_load_heightmap_dialog_widgets,
lengthof(_nested_load_heightmap_dialog_widgets)
734 _nested_save_dialog_widgets,
lengthof(_nested_save_dialog_widgets)
770 _saveload_mode = mode;
771 _file_to_saveload.
filetype = _file_modetotype[mode];
776 void SetFiosType(
const byte fiostype)
780 case FIOS_TYPE_SCENARIO:
784 case FIOS_TYPE_OLDFILE:
785 case FIOS_TYPE_OLD_SCENARIO: