src/rail_gui.cpp
changeset 9083 b242adf8191b
parent 9082 8217cb013e23
child 9112 ec6800eaa340
--- a/src/rail_gui.cpp	Sun Feb 17 17:00:43 2008 +0000
+++ b/src/rail_gui.cpp	Sun Feb 17 18:19:33 2008 +0000
@@ -150,7 +150,7 @@
 
 static void PlaceRail_Waypoint(TileIndex tile)
 {
-	if (_remove_button_clicked || _ctrl_pressed) {
+	if (_remove_button_clicked) {
 		DoCommandP(tile, 0, 0, CcPlaySound1E, CMD_REMOVE_TRAIN_WAYPOINT | CMD_MSG(STR_CANT_REMOVE_TRAIN_WAYPOINT));
 	} else {
 		DoCommandP(tile, _cur_waypoint_type, 0, CcPlaySound1E, CMD_BUILD_TRAIN_WAYPOINT | CMD_MSG(STR_CANT_BUILD_TRAIN_WAYPOINT));
@@ -169,7 +169,8 @@
 static void PlaceRail_Station(TileIndex tile)
 {
 	if (_remove_button_clicked) {
-		VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_REMOVE_STATION);
+		VpStartPlaceSizing(tile, VPM_X_AND_Y_LIMITED, DDSP_REMOVE_STATION);
+		VpSetPlaceSizingLimit(-1);
 	} else if (_railstation.dragdrop) {
 		VpStartPlaceSizing(tile, VPM_X_AND_Y_LIMITED, DDSP_BUILD_STATION);
 		VpSetPlaceSizingLimit(_patches.station_spread);
@@ -287,11 +288,6 @@
 	w->InvalidateWidget(RTW_REMOVE);
 	_remove_button_clicked = w->IsWidgetLowered(RTW_REMOVE);
 	SetSelectionRed(_remove_button_clicked);
-
-	// handle station builder
-	if (_remove_button_clicked) {
-		SetTileSelectSize(1, 1);
-	}
 }
 
 /** Updates the Remove button because of Ctrl state change
@@ -303,8 +299,8 @@
 	if (w->IsWidgetDisabled(RTW_REMOVE)) return false;
 
 	/* allow ctrl to switch remove mode only for these widgets */
-	for (uint i = RTW_BUILD_NS; i <= RTW_BUILD_WAYPOINT; i++) {
-		if ((i <= RTW_AUTORAIL || i == RTW_BUILD_WAYPOINT) && w->IsWidgetLowered(i)) {
+	for (uint i = RTW_BUILD_NS; i <= RTW_BUILD_STATION; i++) {
+		if ((i <= RTW_AUTORAIL || i >= RTW_BUILD_WAYPOINT) && w->IsWidgetLowered(i)) {
 			ToggleRailButton_Remove(w);
 			return true;
 		}
@@ -390,6 +386,28 @@
 	if (w->IsWidgetDisabled(RTW_REMOVE)) return;
 	ToggleRailButton_Remove(w);
 	SndPlayFx(SND_15_BEEP);
+
+	/* handle station builder */
+	if (w->IsWidgetLowered(RTW_BUILD_STATION)) {
+		if (_remove_button_clicked) {
+			/* starting drag & drop remove */
+			if (!_railstation.dragdrop) {
+				SetTileSelectSize(1, 1);
+			} else {
+				VpSetPlaceSizingLimit(-1);
+			}
+		} else {
+			/* starting station build mode */
+			if (!_railstation.dragdrop) {
+				int x = _railstation.numtracks;
+				int y = _railstation.platlength;
+				if (_railstation.orientation == 0) Swap(x, y);
+				SetTileSelectSize(x, y);
+			} else {
+				VpSetPlaceSizingLimit(_patches.station_spread);
+			}
+		}
+	}
 }
 
 static void BuildRailClick_Convert(Window *w)
@@ -594,15 +612,16 @@
 					GUIPlaceProcDragXY(e);
 					break;
 
-				case DDSP_REMOVE_STATION:
-					DoCommandP(end_tile, start_tile, 0, CcPlaySound1E, CMD_REMOVE_FROM_RAILROAD_STATION | CMD_MSG(STR_CANT_REMOVE_PART_OF_STATION));
-					break;
-
 				case DDSP_CONVERT_RAIL:
 					DoCommandP(end_tile, start_tile, _cur_railtype, CcPlaySound10, CMD_CONVERT_RAIL | CMD_MSG(STR_CANT_CONVERT_RAIL));
 					break;
 
+				case DDSP_REMOVE_STATION:
 				case DDSP_BUILD_STATION:
+					if (_remove_button_clicked) {
+						DoCommandP(end_tile, start_tile, 0, CcPlaySound1E, CMD_REMOVE_FROM_RAILROAD_STATION | CMD_MSG(STR_CANT_REMOVE_PART_OF_STATION));
+						break;
+					}
 					HandleStationPlacement(start_tile, end_tile);
 					break;
 
@@ -639,7 +658,8 @@
 		break;
 
 	case WE_CTRL_CHANGED:
-		if (RailToolbar_CtrlChanged(w)) e->we.ctrl.cont = false;
+		/* do not toggle Remove button by Ctrl when placing station */
+		if (!w->IsWidgetLowered(RTW_BUILD_STATION) && RailToolbar_CtrlChanged(w)) e->we.ctrl.cont = false;
 		break;
 	}
 }