(svn r6554) -Fix r6513: [depot window] fixed a bug where moving rail vehicles from one line to another could fail under certain conditions
authorbjarni
Thu, 28 Sep 2006 15:41:53 +0000
changeset 4663 83330678e41c
parent 4662 e36935c7bdde
child 4664 94b9bab7aed9
(svn r6554) -Fix r6513: [depot window] fixed a bug where moving rail vehicles from one line to another could fail under certain conditions
depot_gui.c
--- a/depot_gui.c	Thu Sep 28 14:17:08 2006 +0000
+++ b/depot_gui.c	Thu Sep 28 15:41:53 2006 +0000
@@ -392,11 +392,17 @@
 	row = (y - 14) / w->resize.step_height;
 	if (row >= w->vscroll.cap) return MODE_ERROR;
 
-	pos = (row + w->vscroll.pos) * w->hscroll.cap + xt;
+	pos = (row + w->vscroll.pos) * (WP(w, depot_d).type == VEH_Train ? 1 : w->hscroll.cap) + xt;
 
-	if (WP(w, depot_d).type == VEH_Train) pos = row + w->vscroll.pos;
-
-	if (WP(w, depot_d).engine_count + WP(w, depot_d).wagon_count <= pos) return MODE_ERROR; // empty block, so no vehicle is selected
+	if (WP(w, depot_d).engine_count + WP(w, depot_d).wagon_count <= pos) {
+		if (WP(w, depot_d).type == VEH_Train) {
+			d->head  = NULL;
+			d->wagon = NULL;
+			return MODE_DRAG_VEHICLE;
+		} else {
+			return MODE_ERROR; // empty block, so no vehicle is selected
+		}
+	}
 
 	if (WP(w, depot_d).engine_count > pos) {
 		*veh = vl[pos];
@@ -700,7 +706,7 @@
 					if (WP(w, depot_d).type == VEH_Train) {
 						GetDepotVehiclePtData gdvp;
 
-						if (GetVehicleFromDepotWndPt(w, e->we.dragdrop.pt.x, e->we.dragdrop.pt.y, &v, &gdvp) == 0 &&
+						if (GetVehicleFromDepotWndPt(w, e->we.dragdrop.pt.x, e->we.dragdrop.pt.y, &v, &gdvp) == MODE_DRAG_VEHICLE &&
 							sel != INVALID_VEHICLE) {
 							if (gdvp.wagon != NULL && gdvp.wagon->index == sel && _ctrl_pressed) {
 								DoCommandP(GetVehicle(sel)->tile, GetVehicle(sel)->index, true, NULL, CMD_REVERSE_TRAIN_DIRECTION | CMD_MSG(STR_9033_CAN_T_MAKE_VEHICLE_TURN));
@@ -710,7 +716,7 @@
 								ShowTrainViewWindow(gdvp.head);
 							}
 						}
-					} else if (GetVehicleFromDepotWndPt(w, e->we.dragdrop.pt.x, e->we.dragdrop.pt.y, &v, NULL) == 0 &&
+					} else if (GetVehicleFromDepotWndPt(w, e->we.dragdrop.pt.x, e->we.dragdrop.pt.y, &v, NULL) == MODE_DRAG_VEHICLE &&
 						v != NULL &&
 						sel == v->index) {
 						ShowVehicleViewWindow(v);