mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r2610) - Feature: set server map name to the loaded name of the game/scenario. Also truncate where neccessary
- Feature: truncate the path of the saveload window
This commit is contained in:
parent
80aa8c868b
commit
3e49626aec
26
misc_gui.c
26
misc_gui.c
|
@ -1163,7 +1163,7 @@ void BuildFileList(void)
|
||||||
_fios_list = FiosGetSavegameList(&_fios_num, _saveload_mode);
|
_fios_list = FiosGetSavegameList(&_fios_num, _saveload_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DrawFiosTexts(void)
|
static void DrawFiosTexts(uint maxw)
|
||||||
{
|
{
|
||||||
static const char *path = NULL;
|
static const char *path = NULL;
|
||||||
static StringID str = STR_4006_UNABLE_TO_READ_DRIVE;
|
static StringID str = STR_4006_UNABLE_TO_READ_DRIVE;
|
||||||
|
@ -1176,7 +1176,7 @@ static void DrawFiosTexts(void)
|
||||||
|
|
||||||
if (str != STR_4006_UNABLE_TO_READ_DRIVE) SetDParam(0, tot);
|
if (str != STR_4006_UNABLE_TO_READ_DRIVE) SetDParam(0, tot);
|
||||||
DrawString(2, 37, str, 0);
|
DrawString(2, 37, str, 0);
|
||||||
DoDrawString(path, 2, 27, 16);
|
DoDrawStringTruncated(path, 2, 27, 16, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MakeSortedSaveGameList(void)
|
static void MakeSortedSaveGameList(void)
|
||||||
|
@ -1231,7 +1231,7 @@ static void SaveLoadDlgWndProc(Window *w, WindowEvent *e)
|
||||||
|
|
||||||
SetVScrollCount(w, _fios_num);
|
SetVScrollCount(w, _fios_num);
|
||||||
DrawWindowWidgets(w);
|
DrawWindowWidgets(w);
|
||||||
DrawFiosTexts();
|
DrawFiosTexts(w->width);
|
||||||
|
|
||||||
if (_savegame_sort_dirty) {
|
if (_savegame_sort_dirty) {
|
||||||
_savegame_sort_dirty = false;
|
_savegame_sort_dirty = false;
|
||||||
|
@ -1245,7 +1245,7 @@ static void SaveLoadDlgWndProc(Window *w, WindowEvent *e)
|
||||||
pos = w->vscroll.pos;
|
pos = w->vscroll.pos;
|
||||||
while (pos < _fios_num) {
|
while (pos < _fios_num) {
|
||||||
item = _fios_list + pos;
|
item = _fios_list + pos;
|
||||||
DoDrawString(item->title[0] ? item->title : item->name, 4, y, _fios_colors[item->type] );
|
DoDrawString(item->title, 4, y, _fios_colors[item->type]);
|
||||||
pos++;
|
pos++;
|
||||||
y+=10;
|
y+=10;
|
||||||
if (y >= w->vscroll.cap*10+w->widget[6].top+1)
|
if (y >= w->vscroll.cap*10+w->widget[6].top+1)
|
||||||
|
@ -1282,19 +1282,17 @@ static void SaveLoadDlgWndProc(Window *w, WindowEvent *e)
|
||||||
file = _fios_list + y;
|
file = _fios_list + y;
|
||||||
|
|
||||||
if ((name = FiosBrowseTo(file)) != NULL) {
|
if ((name = FiosBrowseTo(file)) != NULL) {
|
||||||
if (_saveload_mode == SLD_LOAD_GAME) {
|
if (_saveload_mode == SLD_LOAD_GAME || _saveload_mode == SLD_LOAD_SCENARIO) {
|
||||||
_switch_mode = SM_LOAD;
|
_switch_mode = (_game_mode == GM_EDITOR) ? SM_LOAD_SCENARIO : SM_LOAD;
|
||||||
|
|
||||||
SetFiosType(file->type);
|
SetFiosType(file->type);
|
||||||
strcpy(_file_to_saveload.name, name);
|
ttd_strlcpy(_file_to_saveload.name, name, sizeof(_file_to_saveload.name));
|
||||||
DeleteWindow(w);
|
ttd_strlcpy(_file_to_saveload.title, file->title, sizeof(_file_to_saveload.title));
|
||||||
} else if (_saveload_mode == SLD_LOAD_SCENARIO) {
|
|
||||||
_switch_mode = (_game_mode == GM_MENU) ? SM_LOAD : SM_LOAD_SCENARIO;
|
|
||||||
SetFiosType(file->type);
|
|
||||||
strcpy(_file_to_saveload.name, name);
|
|
||||||
DeleteWindow(w);
|
DeleteWindow(w);
|
||||||
} else {
|
} else {
|
||||||
// SLD_SAVE_GAME, SLD_SAVE_SCENARIO copy clicked name to editbox
|
// SLD_SAVE_GAME, SLD_SAVE_SCENARIO copy clicked name to editbox
|
||||||
ttd_strlcpy(WP(w, querystr_d).text.buf, (file->title[0] != '\0') ? file->title : file->name, WP(w, querystr_d).text.maxlength);
|
ttd_strlcpy(WP(w, querystr_d).text.buf, file->title, WP(w, querystr_d).text.maxlength);
|
||||||
UpdateTextBufferSize(&WP(w, querystr_d).text);
|
UpdateTextBufferSize(&WP(w, querystr_d).text);
|
||||||
InvalidateWidget(w, 9);
|
InvalidateWidget(w, 9);
|
||||||
}
|
}
|
||||||
|
@ -1485,7 +1483,7 @@ static void SelectScenarioWndProc(Window *w, WindowEvent *e) {
|
||||||
pos = w->vscroll.pos;
|
pos = w->vscroll.pos;
|
||||||
while (pos < _fios_num) {
|
while (pos < _fios_num) {
|
||||||
item = _fios_list + pos;
|
item = _fios_list + pos;
|
||||||
DoDrawString(item->title[0] ? item->title : item->name, 4, y, _fios_colors[item->type] );
|
DoDrawString(item->title, 4, y, _fios_colors[item->type] );
|
||||||
pos++;
|
pos++;
|
||||||
y+=10;
|
y+=10;
|
||||||
if (y >= w->vscroll.cap*10+list_start)
|
if (y >= w->vscroll.cap*10+list_start)
|
||||||
|
|
|
@ -53,30 +53,9 @@ enum {
|
||||||
static NetworkGameList *_selected_item = NULL;
|
static NetworkGameList *_selected_item = NULL;
|
||||||
static int8 _selected_company_item = -1;
|
static int8 _selected_company_item = -1;
|
||||||
|
|
||||||
// Truncates a string to max_width (via GetStringWidth) and adds 3 dots
|
|
||||||
// at the end of the name.
|
|
||||||
static void NetworkTruncateString(char *name, const int max_width)
|
|
||||||
{
|
|
||||||
char temp[NETWORK_NAME_LENGTH];
|
|
||||||
char internal_name[NETWORK_NAME_LENGTH];
|
|
||||||
|
|
||||||
ttd_strlcpy(internal_name, name, sizeof(internal_name));
|
|
||||||
|
|
||||||
if (GetStringWidth(internal_name) > max_width) {
|
|
||||||
// Servername is too long, trunc it!
|
|
||||||
snprintf(temp, sizeof(temp), "%s...", internal_name);
|
|
||||||
// Continue to delete 1 char of the string till it is in range
|
|
||||||
while (GetStringWidth(temp) > max_width) {
|
|
||||||
internal_name[strlen(internal_name) - 1] = '\0';
|
|
||||||
snprintf(temp, sizeof(temp), "%s...", internal_name);
|
|
||||||
}
|
|
||||||
ttd_strlcpy(name, temp, sizeof(temp));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extern const char _openttd_revision[];
|
extern const char _openttd_revision[];
|
||||||
|
|
||||||
static FiosItem *selected_map = NULL; // to highlight slected map
|
static FiosItem *_selected_map = NULL; // to highlight slected map
|
||||||
|
|
||||||
// called when a new server is found on the network
|
// called when a new server is found on the network
|
||||||
void UpdateNetworkGameWindow(bool unselect)
|
void UpdateNetworkGameWindow(bool unselect)
|
||||||
|
@ -132,7 +111,6 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
|
||||||
uint16 y = NET_PRC__OFFSET_TOP_WIDGET + 3;
|
uint16 y = NET_PRC__OFFSET_TOP_WIDGET + 3;
|
||||||
int32 n = 0;
|
int32 n = 0;
|
||||||
int32 pos = w->vscroll.pos;
|
int32 pos = w->vscroll.pos;
|
||||||
char servername[NETWORK_NAME_LENGTH];
|
|
||||||
const NetworkGameList *cur_item = _network_game_list;
|
const NetworkGameList *cur_item = _network_game_list;
|
||||||
|
|
||||||
while (pos > 0 && cur_item != NULL) {
|
while (pos > 0 && cur_item != NULL) {
|
||||||
|
@ -148,9 +126,8 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
|
||||||
if (cur_item == sel)
|
if (cur_item == sel)
|
||||||
GfxFillRect(11, y - 2, 218, y + 9, 10); // show highlighted item with a different colour
|
GfxFillRect(11, y - 2, 218, y + 9, 10); // show highlighted item with a different colour
|
||||||
|
|
||||||
snprintf(servername, sizeof(servername), "%s", cur_item->info.server_name);
|
SetDParamStr(0, cur_item->info.server_name);
|
||||||
NetworkTruncateString(servername, 110);
|
DrawStringTruncated(15, y, STR_02BD, 16, 110);
|
||||||
DoDrawString(servername, 15, y, 16); // server name
|
|
||||||
|
|
||||||
SetDParam(0, cur_item->info.clients_on);
|
SetDParam(0, cur_item->info.clients_on);
|
||||||
SetDParam(1, cur_item->info.clients_max);
|
SetDParam(1, cur_item->info.clients_max);
|
||||||
|
@ -192,10 +169,10 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
|
||||||
|
|
||||||
|
|
||||||
SetDParamStr(0, sel->info.server_name);
|
SetDParamStr(0, sel->info.server_name);
|
||||||
DrawStringMultiCenter(365, 42, STR_ORANGE, 2); // game name
|
DrawStringCenteredTruncated(365, 42, STR_ORANGE, 16, 220); // game name
|
||||||
|
|
||||||
SetDParamStr(0, sel->info.map_name);
|
SetDParamStr(0, sel->info.map_name);
|
||||||
DrawStringMultiCenter(365, 54, STR_02BD, 2); // map name
|
DrawStringCenteredTruncated(365, 54, STR_02BD, 16, 220); // map name
|
||||||
|
|
||||||
SetDParam(0, sel->info.clients_on);
|
SetDParam(0, sel->info.clients_on);
|
||||||
SetDParam(1, sel->info.clients_max);
|
SetDParam(1, sel->info.clients_max);
|
||||||
|
@ -495,11 +472,11 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e)
|
||||||
pos = w->vscroll.pos;
|
pos = w->vscroll.pos;
|
||||||
while (pos < _fios_num + 1) {
|
while (pos < _fios_num + 1) {
|
||||||
item = _fios_list + pos - 1;
|
item = _fios_list + pos - 1;
|
||||||
if (item == selected_map || (pos == 0 && selected_map == NULL))
|
if (item == _selected_map || (pos == 0 && _selected_map == NULL))
|
||||||
GfxFillRect(11, y - 1, 259, y + 10, 155); // show highlighted item with a different colour
|
GfxFillRect(11, y - 1, 259, y + 10, 155); // show highlighted item with a different colour
|
||||||
|
|
||||||
if (pos == 0) DrawString(14, y, STR_4010_GENERATE_RANDOM_NEW_GAME, 9);
|
if (pos == 0) DrawString(14, y, STR_4010_GENERATE_RANDOM_NEW_GAME, 9);
|
||||||
else DoDrawString(item->title[0] ? item->title : item->name, 14, y, _fios_colors[item->type] );
|
else DoDrawString(item->title, 14, y, _fios_colors[item->type] );
|
||||||
pos++;
|
pos++;
|
||||||
y += NSSWND_ROWSIZE;
|
y += NSSWND_ROWSIZE;
|
||||||
|
|
||||||
|
@ -521,8 +498,8 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e)
|
||||||
int y = (e->click.pt.y - NSSWND_START) / NSSWND_ROWSIZE;
|
int y = (e->click.pt.y - NSSWND_START) / NSSWND_ROWSIZE;
|
||||||
if ((y += w->vscroll.pos) >= w->vscroll.count)
|
if ((y += w->vscroll.pos) >= w->vscroll.count)
|
||||||
return;
|
return;
|
||||||
if (y == 0) selected_map = NULL;
|
|
||||||
else selected_map = _fios_list + y-1;
|
_selected_map = (y == 0) ? NULL : _fios_list + y - 1;
|
||||||
SetWindowDirty(w);
|
SetWindowDirty(w);
|
||||||
} break;
|
} break;
|
||||||
case 7: case 8: /* Connection type */
|
case 7: case 8: /* Connection type */
|
||||||
|
@ -538,14 +515,15 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e)
|
||||||
_is_network_server = true;
|
_is_network_server = true;
|
||||||
ttd_strlcpy(_network_server_name, WP(w, querystr_d).text.buf, sizeof(_network_server_name));
|
ttd_strlcpy(_network_server_name, WP(w, querystr_d).text.buf, sizeof(_network_server_name));
|
||||||
UpdateTextBufferSize(&WP(w, querystr_d).text);
|
UpdateTextBufferSize(&WP(w, querystr_d).text);
|
||||||
if (selected_map == NULL) { // start random new game
|
if (_selected_map == NULL) { // start random new game
|
||||||
GenRandomNewGame(Random(), InteractiveRandom());
|
GenRandomNewGame(Random(), InteractiveRandom());
|
||||||
} else { // load a scenario
|
} else { // load a scenario
|
||||||
char *name;
|
char *name = FiosBrowseTo(_selected_map);
|
||||||
if ((name = FiosBrowseTo(selected_map)) != NULL) {
|
if (name != NULL) {
|
||||||
SetFiosType(selected_map->type);
|
SetFiosType(_selected_map->type);
|
||||||
strcpy(_file_to_saveload.name, name);
|
ttd_strlcpy(_file_to_saveload.name, name, sizeof(_file_to_saveload.name));
|
||||||
snprintf(_network_game_info.map_name, sizeof(_network_game_info.map_name), "Loaded scenario");
|
ttd_strlcpy(_file_to_saveload.title, _selected_map->title, sizeof(_file_to_saveload.title));
|
||||||
|
|
||||||
DeleteWindow(w);
|
DeleteWindow(w);
|
||||||
StartScenarioEditor(Random(), InteractiveRandom());
|
StartScenarioEditor(Random(), InteractiveRandom());
|
||||||
}
|
}
|
||||||
|
@ -555,7 +533,6 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e)
|
||||||
_is_network_server = true;
|
_is_network_server = true;
|
||||||
ttd_strlcpy(_network_server_name, WP(w, querystr_d).text.buf, sizeof(_network_server_name));
|
ttd_strlcpy(_network_server_name, WP(w, querystr_d).text.buf, sizeof(_network_server_name));
|
||||||
UpdateTextBufferSize(&WP(w, querystr_d).text);
|
UpdateTextBufferSize(&WP(w, querystr_d).text);
|
||||||
snprintf(_network_game_info.map_name, sizeof(_network_game_info.map_name), "Loaded game");
|
|
||||||
/* XXX - WC_NETWORK_WINDOW should stay, but if it stays, it gets
|
/* XXX - WC_NETWORK_WINDOW should stay, but if it stays, it gets
|
||||||
* copied all the elements of 'load game' and upon closing that, it segfaults */
|
* copied all the elements of 'load game' and upon closing that, it segfaults */
|
||||||
DeleteWindowById(WC_NETWORK_WINDOW, 0);
|
DeleteWindowById(WC_NETWORK_WINDOW, 0);
|
||||||
|
|
13
openttd.c
13
openttd.c
|
@ -907,12 +907,16 @@ void SwitchMode(int new_mode)
|
||||||
case SM_NEWGAME: /* New Game --> 'Random game' */
|
case SM_NEWGAME: /* New Game --> 'Random game' */
|
||||||
#ifdef ENABLE_NETWORK
|
#ifdef ENABLE_NETWORK
|
||||||
if (_network_server)
|
if (_network_server)
|
||||||
snprintf(_network_game_info.map_name, 40, "Random");
|
snprintf(_network_game_info.map_name, NETWORK_NAME_LENGTH, "Random Map");
|
||||||
#endif /* ENABLE_NETWORK */
|
#endif /* ENABLE_NETWORK */
|
||||||
MakeNewGame();
|
MakeNewGame();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SM_START_SCENARIO: /* New Game --> Choose one of the preset scenarios */
|
case SM_START_SCENARIO: /* New Game --> Choose one of the preset scenarios */
|
||||||
|
#ifdef ENABLE_NETWORK
|
||||||
|
if (_network_server)
|
||||||
|
snprintf(_network_game_info.map_name, NETWORK_NAME_LENGTH, "%s (Loaded scenario)", _file_to_saveload.title);
|
||||||
|
#endif /* ENABLE_NETWORK */
|
||||||
StartScenario();
|
StartScenario();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -928,7 +932,7 @@ void SwitchMode(int new_mode)
|
||||||
DoCommandP(0, 0, 0, NULL, CMD_PAUSE); // decrease pause counter (was increased from opening load dialog)
|
DoCommandP(0, 0, 0, NULL, CMD_PAUSE); // decrease pause counter (was increased from opening load dialog)
|
||||||
#ifdef ENABLE_NETWORK
|
#ifdef ENABLE_NETWORK
|
||||||
if (_network_server)
|
if (_network_server)
|
||||||
snprintf(_network_game_info.map_name, 40, "Loaded game");
|
snprintf(_network_game_info.map_name, NETWORK_NAME_LENGTH, "%s (Loaded game)", _file_to_saveload.title);
|
||||||
#endif /* ENABLE_NETWORK */
|
#endif /* ENABLE_NETWORK */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -950,11 +954,6 @@ void SwitchMode(int new_mode)
|
||||||
_generating_world = false;
|
_generating_world = false;
|
||||||
// delete all stations owned by a player
|
// delete all stations owned by a player
|
||||||
DeleteAllPlayerStations();
|
DeleteAllPlayerStations();
|
||||||
|
|
||||||
#ifdef ENABLE_NETWORK
|
|
||||||
if (_network_server)
|
|
||||||
snprintf(_network_game_info.map_name, 40, "Loaded scenario");
|
|
||||||
#endif /* ENABLE_NETWORK */
|
|
||||||
} else
|
} else
|
||||||
ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
|
ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue