(svn r2610) - Feature: set server map name to the loaded name of the game/scenario. Also truncate where neccessary
authorDarkvater
Sun, 17 Jul 2005 16:01:26 +0000
changeset 2100 217ea6fdfd18
parent 2099 02c5a49863e9
child 2101 822f0b48ce64
(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
misc_gui.c
network_gui.c
openttd.c
--- a/misc_gui.c	Sun Jul 17 15:58:47 2005 +0000
+++ b/misc_gui.c	Sun Jul 17 16:01:26 2005 +0000
@@ -1163,7 +1163,7 @@
 		_fios_list = FiosGetSavegameList(&_fios_num, _saveload_mode);
 }
 
-static void DrawFiosTexts(void)
+static void DrawFiosTexts(uint maxw)
 {
 	static const char *path = NULL;
 	static StringID str = STR_4006_UNABLE_TO_READ_DRIVE;
@@ -1176,7 +1176,7 @@
 
 	if (str != STR_4006_UNABLE_TO_READ_DRIVE) SetDParam(0, tot);
 	DrawString(2, 37, str, 0);
-	DoDrawString(path, 2, 27, 16);
+	DoDrawStringTruncated(path, 2, 27, 16, 5);
 }
 
 static void MakeSortedSaveGameList(void)
@@ -1231,7 +1231,7 @@
 
 		SetVScrollCount(w, _fios_num);
 		DrawWindowWidgets(w);
-		DrawFiosTexts();
+		DrawFiosTexts(w->width);
 
 		if (_savegame_sort_dirty) {
 			_savegame_sort_dirty = false;
@@ -1245,7 +1245,7 @@
 		pos = w->vscroll.pos;
 		while (pos < _fios_num) {
 			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++;
 			y+=10;
 			if (y >= w->vscroll.cap*10+w->widget[6].top+1)
@@ -1282,19 +1282,17 @@
 			file = _fios_list + y;
 
 			if ((name = FiosBrowseTo(file)) != NULL) {
-				if (_saveload_mode == SLD_LOAD_GAME) {
-					_switch_mode = SM_LOAD;
+				if (_saveload_mode == SLD_LOAD_GAME || _saveload_mode == SLD_LOAD_SCENARIO) {
+					_switch_mode = (_game_mode == GM_EDITOR) ? SM_LOAD_SCENARIO : SM_LOAD;
+
 					SetFiosType(file->type);
-					strcpy(_file_to_saveload.name, name);
-					DeleteWindow(w);
-				} 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);
+					ttd_strlcpy(_file_to_saveload.name, name, sizeof(_file_to_saveload.name));
+					ttd_strlcpy(_file_to_saveload.title, file->title, sizeof(_file_to_saveload.title));
+
 					DeleteWindow(w);
 				} else {
 					// 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);
 					InvalidateWidget(w, 9);
 				}
@@ -1485,7 +1483,7 @@
 		pos = w->vscroll.pos;
 		while (pos < _fios_num) {
 			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++;
 			y+=10;
 			if (y >= w->vscroll.cap*10+list_start)
--- a/network_gui.c	Sun Jul 17 15:58:47 2005 +0000
+++ b/network_gui.c	Sun Jul 17 16:01:26 2005 +0000
@@ -53,30 +53,9 @@
 static NetworkGameList *_selected_item = NULL;
 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[];
 
-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
 void UpdateNetworkGameWindow(bool unselect)
@@ -132,7 +111,6 @@
 			uint16 y = NET_PRC__OFFSET_TOP_WIDGET + 3;
 			int32 n = 0;
 			int32 pos = w->vscroll.pos;
-			char servername[NETWORK_NAME_LENGTH];
 			const NetworkGameList *cur_item = _network_game_list;
 
 			while (pos > 0 && cur_item != NULL) {
@@ -148,9 +126,8 @@
 				if (cur_item == sel)
 					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);
-				NetworkTruncateString(servername, 110);
-				DoDrawString(servername, 15, y, 16); // server name
+				SetDParamStr(0, cur_item->info.server_name);
+				DrawStringTruncated(15, y, STR_02BD, 16, 110);
 
 				SetDParam(0, cur_item->info.clients_on);
 				SetDParam(1, cur_item->info.clients_max);
@@ -192,10 +169,10 @@
 
 
 			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);
-			DrawStringMultiCenter(365, 54, STR_02BD, 2); // map name
+			DrawStringCenteredTruncated(365, 54, STR_02BD, 16, 220); // map name
 
 			SetDParam(0, sel->info.clients_on);
 			SetDParam(1, sel->info.clients_max);
@@ -495,11 +472,11 @@
 		pos = w->vscroll.pos;
 		while (pos < _fios_num + 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
 
 			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++;
 			y += NSSWND_ROWSIZE;
 
@@ -521,8 +498,8 @@
 			int y = (e->click.pt.y - NSSWND_START) / NSSWND_ROWSIZE;
 			if ((y += w->vscroll.pos) >= w->vscroll.count)
 				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);
 			} break;
 		case 7: case 8: /* Connection type */
@@ -538,14 +515,15 @@
 			_is_network_server = true;
 			ttd_strlcpy(_network_server_name, WP(w, querystr_d).text.buf, sizeof(_network_server_name));
 			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());
 			} else { // load a scenario
-				char *name;
-				if ((name = FiosBrowseTo(selected_map)) != NULL) {
-					SetFiosType(selected_map->type);
-					strcpy(_file_to_saveload.name, name);
-					snprintf(_network_game_info.map_name, sizeof(_network_game_info.map_name), "Loaded scenario");
+				char *name = FiosBrowseTo(_selected_map);
+				if (name != NULL) {
+					SetFiosType(_selected_map->type);
+					ttd_strlcpy(_file_to_saveload.name, name, sizeof(_file_to_saveload.name));
+					ttd_strlcpy(_file_to_saveload.title, _selected_map->title, sizeof(_file_to_saveload.title));
+
 					DeleteWindow(w);
 					StartScenarioEditor(Random(), InteractiveRandom());
 				}
@@ -555,7 +533,6 @@
 			_is_network_server = true;
 			ttd_strlcpy(_network_server_name, WP(w, querystr_d).text.buf, sizeof(_network_server_name));
 			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
 			 * copied all the elements of 'load game' and upon closing that, it segfaults */
 			DeleteWindowById(WC_NETWORK_WINDOW, 0);
--- a/openttd.c	Sun Jul 17 15:58:47 2005 +0000
+++ b/openttd.c	Sun Jul 17 16:01:26 2005 +0000
@@ -907,12 +907,16 @@
 	case SM_NEWGAME: /* New Game --> 'Random game' */
 #ifdef ENABLE_NETWORK
 		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 */
 		MakeNewGame();
 		break;
 
 	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();
 		break;
 
@@ -928,7 +932,7 @@
 			DoCommandP(0, 0, 0, NULL, CMD_PAUSE); // decrease pause counter (was increased from opening load dialog)
 #ifdef ENABLE_NETWORK
 			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 */
 		}
 		break;
@@ -950,11 +954,6 @@
 			_generating_world = false;
 			// delete all stations owned by a player
 			DeleteAllPlayerStations();
-
-#ifdef ENABLE_NETWORK
-			if (_network_server)
-				snprintf(_network_game_info.map_name, 40, "Loaded scenario");
-#endif /* ENABLE_NETWORK */
 		} else
 			ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);