(svn r14334) -Feature: ability to reset name to default/automatic value (for vehicles, engines, towns, groups, stations, waypoints, managers and companies)
authorsmatz
Mon, 15 Sep 2008 19:02:50 +0000
changeset 10148 ad8e8a65f6a2
parent 10147 f0215b6c526e
child 10149 c855d5982951
(svn r14334) -Feature: ability to reset name to default/automatic value (for vehicles, engines, towns, groups, stations, waypoints, managers and companies)
src/build_vehicle_gui.cpp
src/engine.cpp
src/group_cmd.cpp
src/group_gui.cpp
src/lang/english.txt
src/misc_cmd.cpp
src/misc_gui.cpp
src/player_gui.cpp
src/station_cmd.cpp
src/station_gui.cpp
src/textbuf_gui.h
src/town_cmd.cpp
src/town_gui.cpp
src/vehicle.cpp
src/vehicle_gui.cpp
src/waypoint.cpp
src/waypoint_gui.cpp
--- a/src/build_vehicle_gui.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/build_vehicle_gui.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -1094,7 +1094,7 @@
 						case VEH_AIRCRAFT: str = STR_A039_RENAME_AIRCRAFT_TYPE;      break;
 					}
 					SetDParam(0, sel_eng);
-					ShowQueryString(STR_ENGINE_NAME, str, MAX_LENGTH_ENGINE_NAME_BYTES, MAX_LENGTH_ENGINE_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_NONE);
+					ShowQueryString(STR_ENGINE_NAME, str, MAX_LENGTH_ENGINE_NAME_BYTES, MAX_LENGTH_ENGINE_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT);
 				}
 				break;
 			}
@@ -1156,18 +1156,18 @@
 
 	virtual void OnQueryTextFinished(char *str)
 	{
-		if (!StrEmpty(str)) {
-			StringID err_str = STR_NULL;
-			_cmd_text = str;
-			switch (this->vehicle_type) {
-				default: NOT_REACHED();
-				case VEH_TRAIN:    err_str = STR_886B_CAN_T_RENAME_TRAIN_VEHICLE; break;
-				case VEH_ROAD:     err_str = STR_9037_CAN_T_RENAME_ROAD_VEHICLE;  break;
-				case VEH_SHIP:     err_str = STR_9839_CAN_T_RENAME_SHIP_TYPE;     break;
-				case VEH_AIRCRAFT: err_str = STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE; break;
-			}
-			DoCommandP(0, this->rename_engine, 0, NULL, CMD_RENAME_ENGINE | CMD_MSG(err_str));
+		if (str == NULL) return;
+
+		StringID err_str = STR_NULL;
+		_cmd_text = str;
+		switch (this->vehicle_type) {
+			default: NOT_REACHED();
+			case VEH_TRAIN:    err_str = STR_886B_CAN_T_RENAME_TRAIN_VEHICLE; break;
+			case VEH_ROAD:     err_str = STR_9037_CAN_T_RENAME_ROAD_VEHICLE;  break;
+			case VEH_SHIP:     err_str = STR_9839_CAN_T_RENAME_SHIP_TYPE;     break;
+			case VEH_AIRCRAFT: err_str = STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE; break;
 		}
+		DoCommandP(0, this->rename_engine, 0, NULL, CMD_RENAME_ENGINE | CMD_MSG(err_str));
 	}
 
 	virtual void OnDropdownSelect(int widget, int index)
--- a/src/engine.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/engine.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -494,15 +494,33 @@
 CommandCost CmdRenameEngine(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsEngineIndex(p1)) return CMD_ERROR;
-	if (StrEmpty(_cmd_text) || strlen(_cmd_text) >= MAX_LENGTH_ENGINE_NAME_BYTES) return CMD_ERROR;
 
-	if (!IsUniqueEngineName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	bool reset = StrEmpty(_cmd_text);
+
+	if (!reset) {
+		if (strlen(_cmd_text) >= MAX_LENGTH_ENGINE_NAME_BYTES) return CMD_ERROR;
+		if (!IsUniqueEngineName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	}
 
 	if (flags & DC_EXEC) {
 		Engine *e = GetEngine(p1);
 		free(e->name);
-		e->name = strdup(_cmd_text);
-		_vehicle_design_names |= 3;
+
+		if (reset) {
+			e->name = NULL;
+			/* if we removed the last custom name, disable the 'Save custom names' button */
+			_vehicle_design_names &= ~1;
+			FOR_ALL_ENGINES(e) {
+				if (e->name != NULL) {
+					_vehicle_design_names |= 1;
+					break;
+				}
+			}
+		} else {
+			e->name = strdup(_cmd_text);
+			_vehicle_design_names |= 3;
+		}
+
 		MarkWholeScreenDirty();
 	}
 
--- a/src/group_cmd.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/group_cmd.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -171,18 +171,22 @@
 CommandCost CmdRenameGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidGroupID(p1)) return CMD_ERROR;
-	if (StrEmpty(_cmd_text) || strlen(_cmd_text) >= MAX_LENGTH_GROUP_NAME_BYTES) return CMD_ERROR;
 
 	Group *g = GetGroup(p1);
 	if (g->owner != _current_player) return CMD_ERROR;
 
-	if (!IsUniqueGroupName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	bool reset = StrEmpty(_cmd_text);
+
+	if (!reset) {
+		if (strlen(_cmd_text) >= MAX_LENGTH_GROUP_NAME_BYTES) return CMD_ERROR;
+		if (!IsUniqueGroupName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	}
 
 	if (flags & DC_EXEC) {
 		/* Delete the old name */
 		free(g->name);
 		/* Assign the new one */
-		g->name = strdup(_cmd_text);
+		g->name = reset ? NULL : strdup(_cmd_text);
 
 		InvalidateWindowData(GetWindowClassForVehicleType(g->vehicle_type), (g->vehicle_type << 11) | VLW_GROUP_LIST | _current_player);
 	}
--- a/src/group_gui.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/group_gui.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -530,7 +530,7 @@
 				const Group *g = GetGroup(this->group_sel);
 
 				SetDParam(0, g->index);
-				ShowQueryString(STR_GROUP_NAME, STR_GROUP_RENAME_CAPTION, MAX_LENGTH_GROUP_NAME_BYTES, MAX_LENGTH_GROUP_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_NONE);
+				ShowQueryString(STR_GROUP_NAME, STR_GROUP_RENAME_CAPTION, MAX_LENGTH_GROUP_NAME_BYTES, MAX_LENGTH_GROUP_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT);
 			} break;
 
 
@@ -623,11 +623,10 @@
 
 	virtual void OnQueryTextFinished(char *str)
 	{
-		if (!StrEmpty(str)) {
-			_cmd_text = str;
+		if (str == NULL) return;
 
-			DoCommandP(0, this->group_sel, 0, NULL, CMD_RENAME_GROUP | CMD_MSG(STR_GROUP_CAN_T_RENAME));
-		}
+		_cmd_text = str;
+		DoCommandP(0, this->group_sel, 0, NULL, CMD_RENAME_GROUP | CMD_MSG(STR_GROUP_CAN_T_RENAME));
 	}
 
 	virtual void OnResize(Point new_size, Point delta)
--- a/src/lang/english.txt	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/lang/english.txt	Mon Sep 15 19:02:50 2008 +0000
@@ -268,6 +268,7 @@
 STR_012B_SNOW                                                   :{BLACK}{TINYFONT}Snow
 STR_012C_MESSAGE                                                :{WHITE}Message
 STR_012D                                                        :{WHITE}{STRING}
+STR_DEFAULT                                                     :{BLACK}Default
 STR_012E_CANCEL                                                 :{BLACK}Cancel
 STR_012F_OK                                                     :{BLACK}OK
 STR_0130_RENAME                                                 :{BLACK}Rename
--- a/src/misc_cmd.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/misc_cmd.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -224,14 +224,17 @@
  */
 CommandCost CmdChangeCompanyName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	if (StrEmpty(_cmd_text) || strlen(_cmd_text) >= MAX_LENGTH_COMPANY_NAME_BYTES) return CMD_ERROR;
+	bool reset = StrEmpty(_cmd_text);
 
-	if (!IsUniqueCompanyName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	if (!reset) {
+		if (strlen(_cmd_text) >= MAX_LENGTH_COMPANY_NAME_BYTES) return CMD_ERROR;
+		if (!IsUniqueCompanyName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	}
 
 	if (flags & DC_EXEC) {
 		Player *p = GetPlayer(_current_player);
 		free(p->name);
-		p->name = strdup(_cmd_text);
+		p->name = reset ? NULL : strdup(_cmd_text);
 		MarkWholeScreenDirty();
 	}
 
@@ -260,22 +263,31 @@
  */
 CommandCost CmdChangePresidentName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	if (StrEmpty(_cmd_text) || strlen(_cmd_text) >= MAX_LENGTH_PRESIDENT_NAME_BYTES) return CMD_ERROR;
+	bool reset = StrEmpty(_cmd_text);
 
-	if (!IsUniquePresidentName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	if (!reset) {
+		if (strlen(_cmd_text) >= MAX_LENGTH_PRESIDENT_NAME_BYTES) return CMD_ERROR;
+		if (!IsUniquePresidentName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	}
 
 	if (flags & DC_EXEC) {
 		Player *p = GetPlayer(_current_player);
 		free(p->president_name);
-		p->president_name = strdup(_cmd_text);
 
-		if (p->name_1 == STR_SV_UNNAMED && p->name == NULL) {
-			char buf[80];
+		if (reset) {
+			p->president_name = NULL;
+		} else {
+			p->president_name = strdup(_cmd_text);
 
-			snprintf(buf, lengthof(buf), "%s Transport", _cmd_text);
-			_cmd_text = buf;
-			DoCommand(0, 0, 0, DC_EXEC, CMD_CHANGE_COMPANY_NAME);
+			if (p->name_1 == STR_SV_UNNAMED && p->name == NULL) {
+				char buf[80];
+
+				snprintf(buf, lengthof(buf), "%s Transport", _cmd_text);
+				_cmd_text = buf;
+				DoCommand(0, 0, 0, DC_EXEC, CMD_CHANGE_COMPANY_NAME);
+			}
 		}
+
 		MarkWholeScreenDirty();
 	}
 
--- a/src/misc_gui.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/misc_gui.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -1049,6 +1049,7 @@
 
 enum QueryStringWidgets {
 	QUERY_STR_WIDGET_TEXT = 3,
+	QUERY_STR_WIDGET_DEFAULT,
 	QUERY_STR_WIDGET_CANCEL,
 	QUERY_STR_WIDGET_OK
 };
@@ -1093,6 +1094,9 @@
 				ShowOnScreenKeyboard(this, QUERY_STR_WIDGET_TEXT, QUERY_STR_WIDGET_CANCEL, QUERY_STR_WIDGET_OK);
 				break;
 
+			case QUERY_STR_WIDGET_DEFAULT:
+				this->text.buf[0] = '\0';
+				/* Fallthrough */
 			case QUERY_STR_WIDGET_OK:
 				this->OnOk();
 				/* Fallthrough */
@@ -1138,9 +1142,10 @@
 {   WWT_CLOSEBOX,   RESIZE_NONE,  COLOUR_GREY,     0,    10,     0,    13, STR_00C5,        STR_018B_CLOSE_WINDOW},
 {    WWT_CAPTION,   RESIZE_NONE,  COLOUR_GREY,    11,   259,     0,    13, STR_012D,        STR_NULL},
 {      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   259,    14,    29, 0x0,             STR_NULL},
-{    WWT_EDITBOX,   RESIZE_NONE,  COLOUR_GREY,     2,   257,    16,    27, 0x0,             STR_NULL},
-{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_GREY,     0,   129,    30,    41, STR_012E_CANCEL, STR_NULL},
-{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_GREY,   130,   259,    30,    41, STR_012F_OK,     STR_NULL},
+{    WWT_EDITBOX,   RESIZE_NONE,  COLOUR_GREY,     2,   257,    16,    27, 0x0,             STR_NULL}, // QUERY_STR_WIDGET_TEXT
+{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_GREY,     0,    86,    30,    41, STR_DEFAULT,     STR_NULL}, // QUERY_STR_WIDGET_DEFAULT
+{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_GREY,    87,   172,    30,    41, STR_012E_CANCEL, STR_NULL}, // QUERY_STR_WIDGET_CANCEL
+{    WWT_TEXTBTN,   RESIZE_NONE,  COLOUR_GREY,   173,   259,    30,    41, STR_012F_OK,     STR_NULL}, // QUERY_STR_WIDGET_OK
 {   WIDGETS_END},
 };
 
@@ -1173,6 +1178,15 @@
 
 	if ((flags & QSF_ACCEPT_UNCHANGED) == 0) w->orig = strdup(w->edit_str_buf);
 
+	if ((flags & QSF_ENABLE_DEFAULT) == 0) {
+		/* without the "Default" button, make "Cancel" and "OK" buttons wider */
+		w->SetWidgetHiddenState(QUERY_STR_WIDGET_DEFAULT, true);
+		w->widget[QUERY_STR_WIDGET_CANCEL].left  = 0;
+		w->widget[QUERY_STR_WIDGET_CANCEL].right = w->width / 2 - 1;
+		w->widget[QUERY_STR_WIDGET_OK].left      = w->width / 2;
+		w->widget[QUERY_STR_WIDGET_OK].right     = w->width - 1;
+	}
+
 	w->LowerWidget(QUERY_STR_WIDGET_TEXT);
 	w->caption = caption;
 	w->afilter = afilter;
--- a/src/player_gui.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/player_gui.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -1257,13 +1257,13 @@
 			case PCW_WIDGET_PRESIDENT_NAME:
 				this->query_widget = PCW_WIDGET_PRESIDENT_NAME;
 				SetDParam(0, this->window_number);
-				ShowQueryString(STR_PLAYER_NAME, STR_700B_PRESIDENT_S_NAME, MAX_LENGTH_PRESIDENT_NAME_BYTES, MAX_LENGTH_PRESIDENT_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_NONE);
+				ShowQueryString(STR_PLAYER_NAME, STR_700B_PRESIDENT_S_NAME, MAX_LENGTH_PRESIDENT_NAME_BYTES, MAX_LENGTH_PRESIDENT_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT);
 				break;
 
 			case PCW_WIDGET_COMPANY_NAME:
 				this->query_widget = PCW_WIDGET_COMPANY_NAME;
 				SetDParam(0, this->window_number);
-				ShowQueryString(STR_COMPANY_NAME, STR_700A_COMPANY_NAME, MAX_LENGTH_COMPANY_NAME_BYTES, MAX_LENGTH_COMPANY_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_NONE);
+				ShowQueryString(STR_COMPANY_NAME, STR_700A_COMPANY_NAME, MAX_LENGTH_COMPANY_NAME_BYTES, MAX_LENGTH_COMPANY_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT);
 				break;
 
 			case PCW_WIDGET_BUILD_VIEW_HQ: {
@@ -1328,7 +1328,7 @@
 
 	virtual void OnQueryTextFinished(char *str)
 	{
-		if (StrEmpty(str)) return;
+		if (str == NULL) return;
 
 		_cmd_text = str;
 		switch (this->query_widget) {
--- a/src/station_cmd.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/station_cmd.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -2814,17 +2814,20 @@
 CommandCost CmdRenameStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidStationID(p1)) return CMD_ERROR;
-	if (StrEmpty(_cmd_text) || strlen(_cmd_text) >= MAX_LENGTH_STATION_NAME_BYTES) return CMD_ERROR;
 
 	Station *st = GetStation(p1);
-
 	if (!CheckOwnership(st->owner)) return CMD_ERROR;
 
-	if (!IsUniqueStationName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	bool reset = StrEmpty(_cmd_text);
+
+	if (!reset) {
+		if (strlen(_cmd_text) >= MAX_LENGTH_STATION_NAME_BYTES) return CMD_ERROR;
+		if (!IsUniqueStationName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	}
 
 	if (flags & DC_EXEC) {
 		free(st->name);
-		st->name = strdup(_cmd_text);
+		st->name = reset ? NULL : strdup(_cmd_text);
 
 		UpdateStationVirtCoord(st);
 		InvalidateWindowData(WC_STATION_LIST, st->owner, 1);
--- a/src/station_gui.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/station_gui.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -912,7 +912,7 @@
 
 			case SVW_RENAME:
 				SetDParam(0, this->window_number);
-				ShowQueryString(STR_STATION, STR_3030_RENAME_STATION_LOADING, MAX_LENGTH_STATION_NAME_BYTES, MAX_LENGTH_STATION_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_NONE);
+				ShowQueryString(STR_STATION, STR_3030_RENAME_STATION_LOADING, MAX_LENGTH_STATION_NAME_BYTES, MAX_LENGTH_STATION_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT);
 				break;
 
 			case SVW_TRAINS: { // Show a list of scheduled trains to this station
@@ -947,11 +947,10 @@
 
 	virtual void OnQueryTextFinished(char *str)
 	{
-		if (!StrEmpty(str)) {
-			_cmd_text = str;
-			DoCommandP(0, this->window_number, 0, NULL,
-				CMD_RENAME_STATION | CMD_MSG(STR_3031_CAN_T_RENAME_STATION));
-		}
+		if (str == NULL) return;
+
+		_cmd_text = str;
+		DoCommandP(0, this->window_number, 0, NULL, CMD_RENAME_STATION | CMD_MSG(STR_3031_CAN_T_RENAME_STATION));
 	}
 
 	virtual void OnResize(Point new_size, Point delta)
--- a/src/textbuf_gui.h	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/textbuf_gui.h	Mon Sep 15 19:02:50 2008 +0000
@@ -31,8 +31,9 @@
 
 /** Flags used in ShowQueryString() call */
 enum QueryStringFlags {
-	QSF_NONE            =    0,
+	QSF_NONE             =    0,
 	QSF_ACCEPT_UNCHANGED = 0x01, ///< return success even when the text didn't change
+	QSF_ENABLE_DEFAULT   = 0x02, ///< enable the 'Default' button ("\0" is returned)
 };
 
 DECLARE_ENUM_AS_BIT_SET(QueryStringFlags)
--- a/src/town_cmd.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/town_cmd.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -2094,15 +2094,19 @@
 CommandCost CmdRenameTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidTownID(p1)) return CMD_ERROR;
-	if (StrEmpty(_cmd_text) || strlen(_cmd_text) >= MAX_LENGTH_TOWN_NAME_BYTES) return CMD_ERROR;
-
-	if (!IsUniqueTownName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+
+	bool reset = StrEmpty(_cmd_text);
+
+	if (!reset) {
+		if (strlen(_cmd_text) >= MAX_LENGTH_TOWN_NAME_BYTES) return CMD_ERROR;
+		if (!IsUniqueTownName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	}
 
 	if (flags & DC_EXEC) {
 		Town *t = GetTown(p1);
 
 		free(t->name);
-		t->name = strdup(_cmd_text);
+		t->name = reset ? NULL : strdup(_cmd_text);
 
 		UpdateTownVirtCoord(t);
 		InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 1);
--- a/src/town_gui.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/town_gui.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -370,7 +370,7 @@
 
 			case TVW_CHANGENAME: /* rename */
 				SetDParam(0, this->window_number);
-				ShowQueryString(STR_TOWN, STR_2007_RENAME_TOWN, MAX_LENGTH_TOWN_NAME_BYTES, MAX_LENGTH_TOWN_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_NONE);
+				ShowQueryString(STR_TOWN, STR_2007_RENAME_TOWN, MAX_LENGTH_TOWN_NAME_BYTES, MAX_LENGTH_TOWN_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT);
 				break;
 
 			case TVW_EXPAND: /* expand town - only available on Scenario editor */
@@ -401,11 +401,10 @@
 
 	virtual void OnQueryTextFinished(char *str)
 	{
-		if (!StrEmpty(str)) {
-			_cmd_text = str;
-			DoCommandP(0, this->window_number, 0, NULL,
-				CMD_RENAME_TOWN | CMD_MSG(STR_2008_CAN_T_RENAME_TOWN));
-		}
+		if (str == NULL) return;
+
+		_cmd_text = str;
+		DoCommandP(0, this->window_number, 0, NULL, CMD_RENAME_TOWN | CMD_MSG(STR_2008_CAN_T_RENAME_TOWN));
 	}
 };
 
--- a/src/vehicle.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/vehicle.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -1680,17 +1680,20 @@
 CommandCost CmdNameVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
-	if (StrEmpty(_cmd_text) || strlen(_cmd_text) >= MAX_LENGTH_VEHICLE_NAME_BYTES) return CMD_ERROR;
 
 	Vehicle *v = GetVehicle(p1);
-
 	if (!CheckOwnership(v->owner)) return CMD_ERROR;
 
-	if ((flags & DC_AUTOREPLACE) == 0 && !IsUniqueVehicleName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	bool reset = StrEmpty(_cmd_text);
+
+	if (!reset) {
+		if (strlen(_cmd_text) >= MAX_LENGTH_VEHICLE_NAME_BYTES) return CMD_ERROR;
+		if (!(flags & DC_AUTOREPLACE) && !IsUniqueVehicleName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+	}
 
 	if (flags & DC_EXEC) {
 		free(v->name);
-		v->name = strdup(_cmd_text);
+		v->name = reset ? NULL : strdup(_cmd_text);
 		InvalidateWindowClassesData(WC_TRAINS_LIST, 1);
 		MarkWholeScreenDirty();
 	}
--- a/src/vehicle_gui.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/vehicle_gui.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -1470,7 +1470,7 @@
 			case VLD_WIDGET_RENAME_VEHICLE: {// rename
 				const Vehicle *v = GetVehicle(this->window_number);
 				SetDParam(0, v->index);
-				ShowQueryString(STR_VEHICLE_NAME, _name_vehicle_title[v->type], MAX_LENGTH_VEHICLE_NAME_BYTES, MAX_LENGTH_VEHICLE_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_NONE);
+				ShowQueryString(STR_VEHICLE_NAME, _name_vehicle_title[v->type], MAX_LENGTH_VEHICLE_NAME_BYTES, MAX_LENGTH_VEHICLE_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT);
 			} break;
 
 			case VLD_WIDGET_INCREASE_SERVICING_INTERVAL:   // increase int
@@ -1513,10 +1513,10 @@
 			STR_A031_CAN_T_NAME_AIRCRAFT
 		};
 
-		if (!StrEmpty(str)) {
-			_cmd_text = str;
-			DoCommandP(0, this->window_number, 0, NULL, CMD_NAME_VEHICLE | CMD_MSG(_name_vehicle_error[GetVehicle(this->window_number)->type]));
-		}
+		if (str == NULL) return;
+
+		_cmd_text = str;
+		DoCommandP(0, this->window_number, 0, NULL, CMD_NAME_VEHICLE | CMD_MSG(_name_vehicle_error[GetVehicle(this->window_number)->type]));
 	}
 
 	virtual void OnResize(Point new_size, Point delta)
--- a/src/waypoint.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/waypoint.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -386,26 +386,24 @@
 	Waypoint *wp = GetWaypoint(p1);
 	if (!CheckOwnership(wp->owner)) return CMD_ERROR;
 
-	if (!StrEmpty(_cmd_text)) {
+	bool reset = StrEmpty(_cmd_text);
+
+	if (!reset) {
 		if (strlen(_cmd_text) >= MAX_LENGTH_WAYPOINT_NAME_BYTES) return CMD_ERROR;
 		if (!IsUniqueWaypointName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
-
-		if (flags & DC_EXEC) {
-			free(wp->name);
-			wp->name = strdup(_cmd_text);
-			wp->town_cn = 0;
+	}
 
-			UpdateWaypointSign(wp);
-			MarkWholeScreenDirty();
+	if (flags & DC_EXEC) {
+		free(wp->name);
+
+		if (reset) {
+			MakeDefaultWaypointName(wp); // sets wp->name = NULL
+		} else {
+			wp->name = strdup(_cmd_text);
 		}
-	} else {
-		if (flags & DC_EXEC) {
-			free(wp->name);
 
-			MakeDefaultWaypointName(wp);
-			UpdateWaypointSign(wp);
-			MarkWholeScreenDirty();
-		}
+		UpdateWaypointSign(wp);
+		MarkWholeScreenDirty();
 	}
 	return CommandCost();
 }
--- a/src/waypoint_gui.cpp	Mon Sep 15 18:50:48 2008 +0000
+++ b/src/waypoint_gui.cpp	Mon Sep 15 19:02:50 2008 +0000
@@ -74,7 +74,7 @@
 
 			case WAYPVW_RENAME: /* rename */
 				SetDParam(0, this->wp->index);
-				ShowQueryString(STR_WAYPOINT_RAW, STR_EDIT_WAYPOINT_NAME, MAX_LENGTH_WAYPOINT_NAME_BYTES, MAX_LENGTH_WAYPOINT_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_NONE);
+				ShowQueryString(STR_WAYPOINT_RAW, STR_EDIT_WAYPOINT_NAME, MAX_LENGTH_WAYPOINT_NAME_BYTES, MAX_LENGTH_WAYPOINT_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT);
 				break;
 
 			case WAYPVW_SHOW_TRAINS: /* show list of trains having this waypoint in their orders*/
@@ -92,10 +92,10 @@
 
 	virtual void OnQueryTextFinished(char *str)
 	{
-		if (!StrEmpty(str)) {
-			_cmd_text = str;
-			DoCommandP(0, this->window_number, 0, NULL, CMD_RENAME_WAYPOINT | CMD_MSG(STR_CANT_CHANGE_WAYPOINT_NAME));
-		}
+		if (str == NULL) return;
+
+		_cmd_text = str;
+		DoCommandP(0, this->window_number, 0, NULL, CMD_RENAME_WAYPOINT | CMD_MSG(STR_CANT_CHANGE_WAYPOINT_NAME));
 	}
 
 };