changeset 17489:7e48879a9608 draft

(svn r22244) -Codechange: Make vehicle windows handle command-/GUI-scope invalidations themself (from autoreplace and refitting).
author frosch <frosch@openttd.org>
date Sun, 13 Mar 2011 21:33:02 +0000
parents c94289e6fdf7
children 78c33eb4b741
files src/order_gui.cpp src/timetable_gui.cpp src/train_cmd.cpp src/vehicle_gui.cpp
diffstat 4 files changed, 14 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/src/order_gui.cpp
+++ b/src/order_gui.cpp
@@ -812,7 +812,6 @@
 	 */
 	virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
 	{
-		if (!gui_scope) return;
 		VehicleOrderID from = INVALID_VEH_ORDER_ID;
 		VehicleOrderID to   = INVALID_VEH_ORDER_ID;
 
@@ -820,7 +819,6 @@
 			case -666:
 				/* Autoreplace replaced the vehicle */
 				this->vehicle = Vehicle::Get(this->window_number);
-				/* This case is _not_ called asynchronously. Get out directly, rest can be done later */
 				break;
 
 			case -1:
@@ -837,6 +835,7 @@
 				break;
 
 			default:
+				if (!gui_scope) break;
 				if (data < 0) break;
 				from = GB(data, 0, 8);
 				to   = GB(data, 8, 8);
@@ -869,7 +868,7 @@
 		}
 
 		this->vscroll->SetCount(this->vehicle->GetNumOrders() + 1);
-		this->UpdateButtonState();
+		if (gui_scope) this->UpdateButtonState();
 
 		/* Scroll to the new order. */
 		if (from == INVALID_VEH_ORDER_ID && to != INVALID_VEH_ORDER_ID && !this->vscroll->IsVisible(to)) {
--- a/src/timetable_gui.cpp
+++ b/src/timetable_gui.cpp
@@ -250,12 +250,10 @@
 	 */
 	virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
 	{
-		if (!gui_scope) return;
 		switch (data) {
 			case -666:
 				/* Autoreplace replaced the vehicle */
 				this->vehicle = Vehicle::Get(this->window_number);
-				/* This case is _not_ called asynchronously. Get out directly, rest can be done later */
 				break;
 
 			case -1:
@@ -267,11 +265,13 @@
 				break;
 
 			case -2:
+				if (!gui_scope) break;
 				this->UpdateSelectionStates();
 				this->ReInit();
 				break;
 
 			default: {
+				if (!gui_scope) break;
 				/* Moving an order. If one of these is INVALID_VEH_ORDER_ID, then
 				 * the order is being created / removed */
 				if (this->sel_index == -1) break;
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -264,7 +264,7 @@
 	if (this->IsFrontEngine()) {
 		this->UpdateAcceleration();
 		SetWindowDirty(WC_VEHICLE_DETAILS, this->index);
-		InvalidateWindowData(WC_VEHICLE_REFIT, this->index); // Important, do not invalidate immediately. The refit window tests commands.
+		InvalidateWindowData(WC_VEHICLE_REFIT, this->index);
 	}
 }
 
@@ -1092,7 +1092,7 @@
 	if (!head->IsFrontEngine()) return;
 
 	/* Update the refit button and window */
-	InvalidateWindowData(WC_VEHICLE_REFIT, head->index); // Important, do not invalidate immediately. The refit window tests commands.
+	InvalidateWindowData(WC_VEHICLE_REFIT, head->index);
 	SetWindowWidgetDirty(WC_VEHICLE_VIEW, head->index, VVW_WIDGET_REFIT_VEH);
 
 	/* If we don't have a unit number yet, set one. */
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -690,14 +690,8 @@
 	 */
 	virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
 	{
-		if (!gui_scope) return;
 		switch (data) {
-			case -666:
-				/* Autoreplace replaced the vehicle.
-				 * Nothing to do though for this window.
-				 * This case is _not_ called asynchronously. Get out directly, rest can be done later */
-				break;
-
+			case -666: // Autoreplace replaced the vehicle; selected_vehicle became invalid.
 			case 0: { // The consist has changed; rebuild the entire list.
 				/* Clear the selection. */
 				Vehicle *v = Vehicle::Get(this->window_number);
@@ -707,6 +701,7 @@
 			}
 
 			case 2: { // The vehicle selection has changed; rebuild the entire list.
+				if (!gui_scope) break;
 				this->BuildRefitList();
 
 				/* The vehicle width has changed too. */
@@ -732,6 +727,7 @@
 			}
 
 			case 1: // A new cargo has been selected.
+				if (!gui_scope) break;
 				this->cargo = GetRefitOption();
 				break;
 		}
@@ -1132,8 +1128,8 @@
 			_thd.window_number = to_index;
 		}
 
-		/* Notify the window immediately, without scheduling. */
-		w->InvalidateData(-666);
+		/* Notify the window. */
+		w->InvalidateData(-666, false);
 	}
 }
 
@@ -1806,13 +1802,12 @@
 	 */
 	virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
 	{
-		if (!gui_scope) return;
 		if (data == -666) {
 			/* Autoreplace replaced the vehicle.
-			 * Nothing to do for this window though.
-			 * This case is _not_ called asynchronously. Get out directly, rest can be done later */
+			 * Nothing to do for this window. */
 			return;
 		}
+		if (!gui_scope) return;
 		const Vehicle *v = Vehicle::Get(this->window_number);
 		if (v->type == VEH_ROAD) {
 			const NWidgetBase *nwid_info = this->GetWidget<NWidgetBase>(VLD_WIDGET_MIDDLE_DETAILS);
@@ -2621,11 +2616,9 @@
 	 */
 	virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
 	{
-		if (!gui_scope) return;
 		if (data == -666) {
 			/* Autoreplace replaced the vehicle.
-			 * Nothing to do for this window though.
-			 * This case is _not_ called asynchronously. Get out directly, rest can be done later */
+			 * Nothing to do for this window. */
 			return;
 		}
 	}