mirror of https://github.com/OpenTTD/OpenTTD
(svn r13359) -Codechange: convert _fios_items to a SmallVector
-Cleanup: some reincarnations of _fios_items in the coderelease/0.7
parent
fd0be850fe
commit
8a40ca49c6
|
@ -215,32 +215,25 @@ DEF_CONSOLE_CMD(ConSaveConfig)
|
||||||
|
|
||||||
static const FiosItem* GetFiosItem(const char* file)
|
static const FiosItem* GetFiosItem(const char* file)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
_saveload_mode = SLD_LOAD_GAME;
|
_saveload_mode = SLD_LOAD_GAME;
|
||||||
BuildFileList();
|
BuildFileList();
|
||||||
|
|
||||||
for (i = 0; i < _fios_num; i++) {
|
for (const FiosItem *item = _fios_items.Begin(); item != _fios_items.End(); item++) {
|
||||||
if (strcmp(file, _fios_list[i].name) == 0) break;
|
if (strcmp(file, item->name) == 0) return item;
|
||||||
if (strcmp(file, _fios_list[i].title) == 0) break;
|
if (strcmp(file, item->title) == 0) return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == _fios_num) { // If no name matches, try to parse it as number
|
/* If no name matches, try to parse it as number */
|
||||||
char *endptr;
|
char *endptr;
|
||||||
|
int i = strtol(file, &endptr, 10);
|
||||||
i = strtol(file, &endptr, 10);
|
|
||||||
if (file == endptr || *endptr != '\0') i = -1;
|
if (file == endptr || *endptr != '\0') i = -1;
|
||||||
}
|
|
||||||
|
|
||||||
return IsInsideMM(i, 0, _fios_num) ? &_fios_list[i] : NULL;
|
return IsInsideMM(i, 0, _fios_items.Length()) ? _fios_items.Get(i) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DEF_CONSOLE_CMD(ConLoad)
|
DEF_CONSOLE_CMD(ConLoad)
|
||||||
{
|
{
|
||||||
const FiosItem *item;
|
|
||||||
const char *file;
|
|
||||||
|
|
||||||
if (argc == 0) {
|
if (argc == 0) {
|
||||||
IConsoleHelp("Load a game by name or index. Usage: 'load <file | number>'");
|
IConsoleHelp("Load a game by name or index. Usage: 'load <file | number>'");
|
||||||
return true;
|
return true;
|
||||||
|
@ -248,8 +241,8 @@ DEF_CONSOLE_CMD(ConLoad)
|
||||||
|
|
||||||
if (argc != 2) return false;
|
if (argc != 2) return false;
|
||||||
|
|
||||||
file = argv[1];
|
const char *file = argv[1];
|
||||||
item = GetFiosItem(file);
|
const FiosItem *item = GetFiosItem(file);
|
||||||
if (item != NULL) {
|
if (item != NULL) {
|
||||||
switch (item->type) {
|
switch (item->type) {
|
||||||
case FIOS_TYPE_FILE: case FIOS_TYPE_OLDFILE: {
|
case FIOS_TYPE_FILE: case FIOS_TYPE_OLDFILE: {
|
||||||
|
@ -272,9 +265,6 @@ DEF_CONSOLE_CMD(ConLoad)
|
||||||
|
|
||||||
DEF_CONSOLE_CMD(ConRemove)
|
DEF_CONSOLE_CMD(ConRemove)
|
||||||
{
|
{
|
||||||
const FiosItem* item;
|
|
||||||
const char* file;
|
|
||||||
|
|
||||||
if (argc == 0) {
|
if (argc == 0) {
|
||||||
IConsoleHelp("Remove a savegame by name or index. Usage: 'rm <file | number>'");
|
IConsoleHelp("Remove a savegame by name or index. Usage: 'rm <file | number>'");
|
||||||
return true;
|
return true;
|
||||||
|
@ -282,8 +272,8 @@ DEF_CONSOLE_CMD(ConRemove)
|
||||||
|
|
||||||
if (argc != 2) return false;
|
if (argc != 2) return false;
|
||||||
|
|
||||||
file = argv[1];
|
const char *file = argv[1];
|
||||||
item = GetFiosItem(file);
|
const FiosItem *item = GetFiosItem(file);
|
||||||
if (item != NULL) {
|
if (item != NULL) {
|
||||||
if (!FiosDelete(item->name))
|
if (!FiosDelete(item->name))
|
||||||
IConsolePrintF(CC_ERROR, "%s: Failed to delete file", file);
|
IConsolePrintF(CC_ERROR, "%s: Failed to delete file", file);
|
||||||
|
@ -299,8 +289,6 @@ DEF_CONSOLE_CMD(ConRemove)
|
||||||
/* List all the files in the current dir via console */
|
/* List all the files in the current dir via console */
|
||||||
DEF_CONSOLE_CMD(ConListFiles)
|
DEF_CONSOLE_CMD(ConListFiles)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
if (argc == 0) {
|
if (argc == 0) {
|
||||||
IConsoleHelp("List all loadable savegames and directories in the current dir via console. Usage: 'ls | dir'");
|
IConsoleHelp("List all loadable savegames and directories in the current dir via console. Usage: 'ls | dir'");
|
||||||
return true;
|
return true;
|
||||||
|
@ -308,9 +296,8 @@ DEF_CONSOLE_CMD(ConListFiles)
|
||||||
|
|
||||||
BuildFileList();
|
BuildFileList();
|
||||||
|
|
||||||
for (i = 0; i < _fios_num; i++) {
|
for (uint i = 0; i < _fios_items.Length(); i++) {
|
||||||
const FiosItem *item = &_fios_list[i];
|
IConsolePrintF(CC_DEFAULT, "%d) %s", i, _fios_items[i].title);
|
||||||
IConsolePrintF(CC_DEFAULT, "%d) %s", i, item->title);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FiosFreeSavegameList();
|
FiosFreeSavegameList();
|
||||||
|
@ -320,9 +307,6 @@ DEF_CONSOLE_CMD(ConListFiles)
|
||||||
/* Change the dir via console */
|
/* Change the dir via console */
|
||||||
DEF_CONSOLE_CMD(ConChangeDirectory)
|
DEF_CONSOLE_CMD(ConChangeDirectory)
|
||||||
{
|
{
|
||||||
const FiosItem *item;
|
|
||||||
const char *file;
|
|
||||||
|
|
||||||
if (argc == 0) {
|
if (argc == 0) {
|
||||||
IConsoleHelp("Change the dir via console. Usage: 'cd <directory | number>'");
|
IConsoleHelp("Change the dir via console. Usage: 'cd <directory | number>'");
|
||||||
return true;
|
return true;
|
||||||
|
@ -330,8 +314,8 @@ DEF_CONSOLE_CMD(ConChangeDirectory)
|
||||||
|
|
||||||
if (argc != 2) return false;
|
if (argc != 2) return false;
|
||||||
|
|
||||||
file = argv[1];
|
const char *file = argv[1];
|
||||||
item = GetFiosItem(file);
|
const FiosItem *item = GetFiosItem(file);
|
||||||
if (item != NULL) {
|
if (item != NULL) {
|
||||||
switch (item->type) {
|
switch (item->type) {
|
||||||
case FIOS_TYPE_DIR: case FIOS_TYPE_DRIVE: case FIOS_TYPE_PARENT:
|
case FIOS_TYPE_DIR: case FIOS_TYPE_DRIVE: case FIOS_TYPE_PARENT:
|
||||||
|
|
61
src/fios.cpp
61
src/fios.cpp
|
@ -10,7 +10,6 @@
|
||||||
#include "heightmap.h"
|
#include "heightmap.h"
|
||||||
#include "fios.h"
|
#include "fios.h"
|
||||||
#include "fileio.h"
|
#include "fileio.h"
|
||||||
#include "core/alloc_func.hpp"
|
|
||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "string_func.h"
|
#include "string_func.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -30,12 +29,9 @@
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
|
|
||||||
/* Variables to display file lists */
|
/* Variables to display file lists */
|
||||||
int _fios_num;
|
SmallVector<FiosItem, 32> _fios_items;
|
||||||
|
|
||||||
static char *_fios_path;
|
static char *_fios_path;
|
||||||
static FiosItem *_fios_items;
|
|
||||||
SmallFiosItem _file_to_saveload;
|
SmallFiosItem _file_to_saveload;
|
||||||
static int _fios_count, _fios_alloc;
|
|
||||||
|
|
||||||
/* OS-specific functions are taken from their respective files (win32/unix/os2 .c) */
|
/* OS-specific functions are taken from their respective files (win32/unix/os2 .c) */
|
||||||
extern bool FiosIsRoot(const char *path);
|
extern bool FiosIsRoot(const char *path);
|
||||||
|
@ -47,19 +43,6 @@ extern bool FiosGetDiskFreeSpace(const char *path, uint32 *tot);
|
||||||
/* get the name of an oldstyle savegame */
|
/* get the name of an oldstyle savegame */
|
||||||
extern void GetOldSaveGameName(char *title, const char *path, const char *file);
|
extern void GetOldSaveGameName(char *title, const char *path, const char *file);
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate a new FiosItem.
|
|
||||||
* @return A pointer to the newly allocated FiosItem.
|
|
||||||
*/
|
|
||||||
FiosItem *FiosAlloc()
|
|
||||||
{
|
|
||||||
if (_fios_count == _fios_alloc) {
|
|
||||||
_fios_alloc += 256;
|
|
||||||
_fios_items = ReallocT(_fios_items, _fios_alloc);
|
|
||||||
}
|
|
||||||
return &_fios_items[_fios_count++];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compare two FiosItem's. Used with qsort when sorting the file list.
|
* Compare two FiosItem's. Used with qsort when sorting the file list.
|
||||||
* @param a A pointer to the first FiosItem to compare.
|
* @param a A pointer to the first FiosItem to compare.
|
||||||
|
@ -82,15 +65,12 @@ int CDECL compare_FiosItems(const void *a, const void *b)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/** Clear the list */
|
||||||
* Free the list of savegames
|
|
||||||
*/
|
|
||||||
void FiosFreeSavegameList()
|
void FiosFreeSavegameList()
|
||||||
{
|
{
|
||||||
free(_fios_items);
|
_fios_items.Clear();
|
||||||
_fios_items = NULL;
|
_fios_items.Compact();
|
||||||
_fios_alloc = _fios_count = 0;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get descriptive texts. Returns the path and free space
|
* Get descriptive texts. Returns the path and free space
|
||||||
|
@ -229,9 +209,11 @@ static FiosItem *FiosGetFileList(SaveLoadDialogMode mode, fios_getlist_callback_
|
||||||
int sort_start;
|
int sort_start;
|
||||||
char d_name[sizeof(fios->name)];
|
char d_name[sizeof(fios->name)];
|
||||||
|
|
||||||
|
_fios_items.Clear();
|
||||||
|
|
||||||
/* A parent directory link exists if we are not in the root directory */
|
/* A parent directory link exists if we are not in the root directory */
|
||||||
if (!FiosIsRoot(_fios_path) && mode != SLD_NEW_GAME) {
|
if (!FiosIsRoot(_fios_path) && mode != SLD_NEW_GAME) {
|
||||||
fios = FiosAlloc();
|
fios = _fios_items.Append();
|
||||||
fios->type = FIOS_TYPE_PARENT;
|
fios->type = FIOS_TYPE_PARENT;
|
||||||
fios->mtime = 0;
|
fios->mtime = 0;
|
||||||
ttd_strlcpy(fios->name, "..", lengthof(fios->name));
|
ttd_strlcpy(fios->name, "..", lengthof(fios->name));
|
||||||
|
@ -247,7 +229,7 @@ static FiosItem *FiosGetFileList(SaveLoadDialogMode mode, fios_getlist_callback_
|
||||||
if (FiosIsValidFile(_fios_path, dirent, &sb) && (sb.st_mode & S_IFDIR) &&
|
if (FiosIsValidFile(_fios_path, dirent, &sb) && (sb.st_mode & S_IFDIR) &&
|
||||||
(!FiosIsHiddenFile(dirent) || strncasecmp(d_name, PERSONAL_DIR, strlen(d_name)) == 0) &&
|
(!FiosIsHiddenFile(dirent) || strncasecmp(d_name, PERSONAL_DIR, strlen(d_name)) == 0) &&
|
||||||
strcmp(d_name, ".") != 0 && strcmp(d_name, "..") != 0) {
|
strcmp(d_name, ".") != 0 && strcmp(d_name, "..") != 0) {
|
||||||
fios = FiosAlloc();
|
fios = _fios_items.Append();
|
||||||
fios->type = FIOS_TYPE_DIR;
|
fios->type = FIOS_TYPE_DIR;
|
||||||
fios->mtime = 0;
|
fios->mtime = 0;
|
||||||
ttd_strlcpy(fios->name, d_name, lengthof(fios->name));
|
ttd_strlcpy(fios->name, d_name, lengthof(fios->name));
|
||||||
|
@ -262,12 +244,12 @@ static FiosItem *FiosGetFileList(SaveLoadDialogMode mode, fios_getlist_callback_
|
||||||
{
|
{
|
||||||
byte order = _savegame_sort_order;
|
byte order = _savegame_sort_order;
|
||||||
_savegame_sort_order = SORT_BY_NAME | SORT_ASCENDING;
|
_savegame_sort_order = SORT_BY_NAME | SORT_ASCENDING;
|
||||||
qsort(_fios_items, _fios_count, sizeof(FiosItem), compare_FiosItems);
|
qsort(_fios_items.Begin(), _fios_items.Length(), sizeof(FiosItem), compare_FiosItems);
|
||||||
_savegame_sort_order = order;
|
_savegame_sort_order = order;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is where to start sorting for the filenames */
|
/* This is where to start sorting for the filenames */
|
||||||
sort_start = _fios_count;
|
sort_start = _fios_items.Length();
|
||||||
|
|
||||||
/* Show files */
|
/* Show files */
|
||||||
dir = ttd_opendir(_fios_path);
|
dir = ttd_opendir(_fios_path);
|
||||||
|
@ -285,7 +267,7 @@ static FiosItem *FiosGetFileList(SaveLoadDialogMode mode, fios_getlist_callback_
|
||||||
|
|
||||||
FiosType type = callback_proc(mode, d_name, t, fios_title);
|
FiosType type = callback_proc(mode, d_name, t, fios_title);
|
||||||
if (type != FIOS_TYPE_INVALID) {
|
if (type != FIOS_TYPE_INVALID) {
|
||||||
fios = FiosAlloc();
|
fios = _fios_items.Append();
|
||||||
fios->mtime = sb.st_mtime;
|
fios->mtime = sb.st_mtime;
|
||||||
fios->type = type;
|
fios->type = type;
|
||||||
ttd_strlcpy(fios->name, d_name, lengthof(fios->name));
|
ttd_strlcpy(fios->name, d_name, lengthof(fios->name));
|
||||||
|
@ -300,13 +282,14 @@ static FiosItem *FiosGetFileList(SaveLoadDialogMode mode, fios_getlist_callback_
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
qsort(_fios_items + sort_start, _fios_count - sort_start, sizeof(FiosItem), compare_FiosItems);
|
qsort(_fios_items.Get(sort_start), _fios_items.Length() - sort_start, sizeof(FiosItem), compare_FiosItems);
|
||||||
|
|
||||||
/* Show drives */
|
/* Show drives */
|
||||||
if (mode != SLD_NEW_GAME) FiosGetDrives();
|
if (mode != SLD_NEW_GAME) FiosGetDrives();
|
||||||
|
|
||||||
_fios_num = _fios_count;
|
_fios_items.Compact();
|
||||||
return _fios_items;
|
|
||||||
|
return _fios_items.Begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -345,7 +328,7 @@ static FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char
|
||||||
* @return A pointer to an array of FiosItem representing all the files to be shown in the save/load dialog.
|
* @return A pointer to an array of FiosItem representing all the files to be shown in the save/load dialog.
|
||||||
* @see FiosGetFileList
|
* @see FiosGetFileList
|
||||||
*/
|
*/
|
||||||
FiosItem *FiosGetSavegameList(SaveLoadDialogMode mode)
|
void FiosGetSavegameList(SaveLoadDialogMode mode)
|
||||||
{
|
{
|
||||||
static char *fios_save_path = NULL;
|
static char *fios_save_path = NULL;
|
||||||
|
|
||||||
|
@ -356,7 +339,7 @@ FiosItem *FiosGetSavegameList(SaveLoadDialogMode mode)
|
||||||
|
|
||||||
_fios_path = fios_save_path;
|
_fios_path = fios_save_path;
|
||||||
|
|
||||||
return FiosGetFileList(mode, &FiosGetSavegameListCallback);
|
FiosGetFileList(mode, &FiosGetSavegameListCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -393,7 +376,7 @@ static FiosType FiosGetScenarioListCallback(SaveLoadDialogMode mode, const char
|
||||||
* @return A pointer to an array of FiosItem representing all the files to be shown in the save/load dialog.
|
* @return A pointer to an array of FiosItem representing all the files to be shown in the save/load dialog.
|
||||||
* @see FiosGetFileList
|
* @see FiosGetFileList
|
||||||
*/
|
*/
|
||||||
FiosItem *FiosGetScenarioList(SaveLoadDialogMode mode)
|
void FiosGetScenarioList(SaveLoadDialogMode mode)
|
||||||
{
|
{
|
||||||
static char *fios_scn_path = NULL;
|
static char *fios_scn_path = NULL;
|
||||||
|
|
||||||
|
@ -405,7 +388,7 @@ FiosItem *FiosGetScenarioList(SaveLoadDialogMode mode)
|
||||||
|
|
||||||
_fios_path = fios_scn_path;
|
_fios_path = fios_scn_path;
|
||||||
|
|
||||||
return FiosGetFileList(mode, &FiosGetScenarioListCallback);
|
FiosGetFileList(mode, &FiosGetScenarioListCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
static FiosType FiosGetHeightmapListCallback(SaveLoadDialogMode mode, const char *file, const char *ext, char *title)
|
static FiosType FiosGetHeightmapListCallback(SaveLoadDialogMode mode, const char *file, const char *ext, char *title)
|
||||||
|
@ -425,7 +408,7 @@ static FiosType FiosGetHeightmapListCallback(SaveLoadDialogMode mode, const char
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get a list of Heightmaps */
|
/* Get a list of Heightmaps */
|
||||||
FiosItem *FiosGetHeightmapList(SaveLoadDialogMode mode)
|
void FiosGetHeightmapList(SaveLoadDialogMode mode)
|
||||||
{
|
{
|
||||||
static char *fios_hmap_path = NULL;
|
static char *fios_hmap_path = NULL;
|
||||||
|
|
||||||
|
@ -436,5 +419,5 @@ FiosItem *FiosGetHeightmapList(SaveLoadDialogMode mode)
|
||||||
|
|
||||||
_fios_path = fios_hmap_path;
|
_fios_path = fios_hmap_path;
|
||||||
|
|
||||||
return FiosGetFileList(mode, &FiosGetHeightmapListCallback);
|
FiosGetFileList(mode, &FiosGetHeightmapListCallback);
|
||||||
}
|
}
|
||||||
|
|
10
src/fios.h
10
src/fios.h
|
@ -6,6 +6,7 @@
|
||||||
#define FIOS_H
|
#define FIOS_H
|
||||||
|
|
||||||
#include "strings_type.h"
|
#include "strings_type.h"
|
||||||
|
#include "misc/smallvec.h"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
/**
|
/**
|
||||||
|
@ -80,8 +81,7 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Variables to display file lists */
|
/* Variables to display file lists */
|
||||||
extern FiosItem *_fios_list; ///< defined in misc_gui.cpp
|
extern SmallVector<FiosItem, 32> _fios_items; ///< defined in fios.cpp
|
||||||
extern int _fios_num; ///< defined in fios.cpp, read_only version of _fios_count
|
|
||||||
extern SmallFiosItem _file_to_saveload;
|
extern SmallFiosItem _file_to_saveload;
|
||||||
extern SaveLoadDialogMode _saveload_mode; ///< defined in misc_gui.cpp
|
extern SaveLoadDialogMode _saveload_mode; ///< defined in misc_gui.cpp
|
||||||
extern byte _savegame_sort_order;
|
extern byte _savegame_sort_order;
|
||||||
|
@ -90,11 +90,11 @@ extern byte _savegame_sort_order;
|
||||||
void ShowSaveLoadDialog(SaveLoadDialogMode mode);
|
void ShowSaveLoadDialog(SaveLoadDialogMode mode);
|
||||||
|
|
||||||
/* Get a list of savegames */
|
/* Get a list of savegames */
|
||||||
FiosItem *FiosGetSavegameList(SaveLoadDialogMode mode);
|
void FiosGetSavegameList(SaveLoadDialogMode mode);
|
||||||
/* Get a list of scenarios */
|
/* Get a list of scenarios */
|
||||||
FiosItem *FiosGetScenarioList(SaveLoadDialogMode mode);
|
void FiosGetScenarioList(SaveLoadDialogMode mode);
|
||||||
/* Get a list of Heightmaps */
|
/* Get a list of Heightmaps */
|
||||||
FiosItem *FiosGetHeightmapList(SaveLoadDialogMode mode);
|
void FiosGetHeightmapList(SaveLoadDialogMode mode);
|
||||||
/* Free the list of savegames */
|
/* Free the list of savegames */
|
||||||
void FiosFreeSavegameList();
|
void FiosFreeSavegameList();
|
||||||
/* Browse to. Returns a filename w/path if we reached a file. */
|
/* Browse to. Returns a filename w/path if we reached a file. */
|
||||||
|
|
|
@ -50,7 +50,6 @@
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
|
|
||||||
/* Variables to display file lists */
|
/* Variables to display file lists */
|
||||||
FiosItem *_fios_list;
|
|
||||||
SaveLoadDialogMode _saveload_mode;
|
SaveLoadDialogMode _saveload_mode;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1300,11 +1299,11 @@ void BuildFileList()
|
||||||
case SLD_NEW_GAME:
|
case SLD_NEW_GAME:
|
||||||
case SLD_LOAD_SCENARIO:
|
case SLD_LOAD_SCENARIO:
|
||||||
case SLD_SAVE_SCENARIO:
|
case SLD_SAVE_SCENARIO:
|
||||||
_fios_list = FiosGetScenarioList(_saveload_mode); break;
|
FiosGetScenarioList(_saveload_mode); break;
|
||||||
case SLD_LOAD_HEIGHTMAP:
|
case SLD_LOAD_HEIGHTMAP:
|
||||||
_fios_list = FiosGetHeightmapList(_saveload_mode); break;
|
FiosGetHeightmapList(_saveload_mode); break;
|
||||||
|
|
||||||
default: _fios_list = FiosGetSavegameList(_saveload_mode); break;
|
default: FiosGetSavegameList(_saveload_mode); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1333,8 +1332,8 @@ static void MakeSortedSaveGameList()
|
||||||
* Drives (A:\ (windows only) are always under the files (FIOS_TYPE_DRIVE)
|
* Drives (A:\ (windows only) are always under the files (FIOS_TYPE_DRIVE)
|
||||||
* Only sort savegames/scenarios, not directories
|
* Only sort savegames/scenarios, not directories
|
||||||
*/
|
*/
|
||||||
for (int i = 0; i < _fios_num; i++) {
|
for (const FiosItem *item = _fios_items.Begin(); item != _fios_items.End(); item++) {
|
||||||
switch (_fios_list[i].type) {
|
switch (item->type) {
|
||||||
case FIOS_TYPE_DIR: sort_start++; break;
|
case FIOS_TYPE_DIR: sort_start++; break;
|
||||||
case FIOS_TYPE_PARENT: sort_start++; break;
|
case FIOS_TYPE_PARENT: sort_start++; break;
|
||||||
case FIOS_TYPE_DRIVE: sort_end++; break;
|
case FIOS_TYPE_DRIVE: sort_end++; break;
|
||||||
|
@ -1342,9 +1341,9 @@ static void MakeSortedSaveGameList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint s_amount = _fios_num - sort_start - sort_end;
|
uint s_amount = _fios_items.Length() - sort_start - sort_end;
|
||||||
if (s_amount > 0) {
|
if (s_amount > 0) {
|
||||||
qsort(_fios_list + sort_start, s_amount, sizeof(FiosItem), compare_FiosItems);
|
qsort(_fios_items.Get(sort_start), s_amount, sizeof(FiosItem), compare_FiosItems);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1443,10 +1442,9 @@ struct SaveLoadWindow : public QueryStringBaseWindow {
|
||||||
|
|
||||||
virtual void OnPaint()
|
virtual void OnPaint()
|
||||||
{
|
{
|
||||||
int pos;
|
|
||||||
int y;
|
int y;
|
||||||
|
|
||||||
SetVScrollCount(this, _fios_num);
|
SetVScrollCount(this, _fios_items.Length());
|
||||||
this->DrawWidgets();
|
this->DrawWidgets();
|
||||||
DrawFiosTexts(this->width);
|
DrawFiosTexts(this->width);
|
||||||
|
|
||||||
|
@ -1459,8 +1457,8 @@ struct SaveLoadWindow : public QueryStringBaseWindow {
|
||||||
this->DrawSortButtonState(_savegame_sort_order & SORT_BY_NAME ? 2 : 3, _savegame_sort_order & SORT_DESCENDING ? SBS_DOWN : SBS_UP);
|
this->DrawSortButtonState(_savegame_sort_order & SORT_BY_NAME ? 2 : 3, _savegame_sort_order & SORT_DESCENDING ? SBS_DOWN : SBS_UP);
|
||||||
|
|
||||||
y = this->widget[7].top + 1;
|
y = this->widget[7].top + 1;
|
||||||
for (pos = this->vscroll.pos; pos < _fios_num; pos++) {
|
for (uint pos = this->vscroll.pos; pos < _fios_items.Length(); pos++) {
|
||||||
const FiosItem *item = _fios_list + pos;
|
const FiosItem *item = _fios_items.Get(pos);
|
||||||
|
|
||||||
DoDrawStringTruncated(item->title, 4, y, _fios_colors[item->type], this->width - 18);
|
DoDrawStringTruncated(item->title, 4, y, _fios_colors[item->type], this->width - 18);
|
||||||
y += 10;
|
y += 10;
|
||||||
|
@ -1497,14 +1495,12 @@ struct SaveLoadWindow : public QueryStringBaseWindow {
|
||||||
|
|
||||||
case 7: { // Click the listbox
|
case 7: { // Click the listbox
|
||||||
int y = (pt.y - this->widget[widget].top - 1) / 10;
|
int y = (pt.y - this->widget[widget].top - 1) / 10;
|
||||||
char *name;
|
|
||||||
const FiosItem *file;
|
|
||||||
|
|
||||||
if (y < 0 || (y += this->vscroll.pos) >= this->vscroll.count) return;
|
if (y < 0 || (y += this->vscroll.pos) >= this->vscroll.count) return;
|
||||||
|
|
||||||
file = _fios_list + y;
|
const FiosItem *file = _fios_items.Get(y);
|
||||||
|
|
||||||
name = FiosBrowseTo(file);
|
char *name = FiosBrowseTo(file);
|
||||||
if (name != NULL) {
|
if (name != NULL) {
|
||||||
if (_saveload_mode == SLD_LOAD_GAME || _saveload_mode == SLD_LOAD_SCENARIO) {
|
if (_saveload_mode == SLD_LOAD_GAME || _saveload_mode == SLD_LOAD_SCENARIO) {
|
||||||
_switch_mode = (_game_mode == GM_EDITOR) ? SM_LOAD_SCENARIO : SM_LOAD;
|
_switch_mode = (_game_mode == GM_EDITOR) ? SM_LOAD_SCENARIO : SM_LOAD;
|
||||||
|
|
|
@ -670,7 +670,7 @@ struct NetworkStartServerWindow : public QueryStringBaseWindow {
|
||||||
_saveload_mode = SLD_NEW_GAME;
|
_saveload_mode = SLD_NEW_GAME;
|
||||||
BuildFileList();
|
BuildFileList();
|
||||||
this->vscroll.cap = 12;
|
this->vscroll.cap = 12;
|
||||||
this->vscroll.count = _fios_num + 1;
|
this->vscroll.count = _fios_items.Length();
|
||||||
|
|
||||||
this->afilter = CS_ALPHANUMERAL;
|
this->afilter = CS_ALPHANUMERAL;
|
||||||
InitializeTextBuffer(&this->text, this->edit_str_buf, lengthof(this->edit_str_buf), 160);
|
InitializeTextBuffer(&this->text, this->edit_str_buf, lengthof(this->edit_str_buf), 160);
|
||||||
|
@ -683,7 +683,7 @@ struct NetworkStartServerWindow : public QueryStringBaseWindow {
|
||||||
|
|
||||||
virtual void OnPaint()
|
virtual void OnPaint()
|
||||||
{
|
{
|
||||||
int y = NSSWND_START, pos;
|
int y = NSSWND_START;
|
||||||
const FiosItem *item;
|
const FiosItem *item;
|
||||||
|
|
||||||
/* draw basic widgets */
|
/* draw basic widgets */
|
||||||
|
@ -703,9 +703,8 @@ struct NetworkStartServerWindow : public QueryStringBaseWindow {
|
||||||
/* draw list of maps */
|
/* draw list of maps */
|
||||||
GfxFillRect(11, 63, 258, 215, 0xD7); // black background of maps list
|
GfxFillRect(11, 63, 258, 215, 0xD7); // black background of maps list
|
||||||
|
|
||||||
pos = this->vscroll.pos;
|
for (uint pos = this->vscroll.pos; pos < _fios_items.Length() + 1; pos++) {
|
||||||
while (pos < _fios_num + 1) {
|
item = _fios_items.Get(pos - 1);
|
||||||
item = _fios_list + pos - 1;
|
|
||||||
if (item == this->map || (pos == 0 && this->map == NULL))
|
if (item == this->map || (pos == 0 && this->map == NULL))
|
||||||
GfxFillRect(11, y - 1, 258, y + 10, 155); // show highlighted item with a different colour
|
GfxFillRect(11, y - 1, 258, y + 10, 155); // show highlighted item with a different colour
|
||||||
|
|
||||||
|
@ -714,7 +713,6 @@ struct NetworkStartServerWindow : public QueryStringBaseWindow {
|
||||||
} else {
|
} else {
|
||||||
DoDrawString(item->title, 14, y, _fios_colors[item->type] );
|
DoDrawString(item->title, 14, y, _fios_colors[item->type] );
|
||||||
}
|
}
|
||||||
pos++;
|
|
||||||
y += NSSWND_ROWSIZE;
|
y += NSSWND_ROWSIZE;
|
||||||
|
|
||||||
if (y >= this->vscroll.cap * NSSWND_ROWSIZE + NSSWND_START) break;
|
if (y >= this->vscroll.cap * NSSWND_ROWSIZE + NSSWND_START) break;
|
||||||
|
@ -746,7 +744,7 @@ struct NetworkStartServerWindow : public QueryStringBaseWindow {
|
||||||
y += this->vscroll.pos;
|
y += this->vscroll.pos;
|
||||||
if (y >= this->vscroll.count) return;
|
if (y >= this->vscroll.count) return;
|
||||||
|
|
||||||
this->map = (y == 0) ? NULL : _fios_list + y - 1;
|
this->map = (y == 0) ? NULL : _fios_items.Get(y - 1);
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue