From f051a81b4e5064f6b5c1d00f4a7d0ae38f768e35 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 13 Mar 2011 21:33:02 +0000 Subject: (svn r22244) -Codechange: Make vehicle windows handle command-/GUI-scope invalidations themself (from autoreplace and refitting). --- src/order_gui.cpp | 5 ++--- src/timetable_gui.cpp | 4 ++-- src/train_cmd.cpp | 4 ++-- src/vehicle_gui.cpp | 23 ++++++++--------------- 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/order_gui.cpp b/src/order_gui.cpp index f12b104cc..d23648383 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -812,7 +812,6 @@ public: */ 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 @@ public: 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 @@ public: break; default: + if (!gui_scope) break; if (data < 0) break; from = GB(data, 0, 8); to = GB(data, 8, 8); @@ -869,7 +868,7 @@ public: } 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)) { diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index 51cd82982..791e3312e 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -250,12 +250,10 @@ struct TimetableWindow : Window { */ 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 @@ struct TimetableWindow : Window { 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; diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index b090837ee..100b467ff 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -264,7 +264,7 @@ void Train::ConsistChanged(bool same_length) 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 @@ static void NormaliseTrainHead(Train *head) 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. */ diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 26b8666a3..a20e44a67 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -690,14 +690,8 @@ struct RefitWindow : public Window { */ 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 @@ struct RefitWindow : public Window { } 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 @@ struct RefitWindow : public Window { } case 1: // A new cargo has been selected. + if (!gui_scope) break; this->cargo = GetRefitOption(); break; } @@ -1132,8 +1128,8 @@ static inline void ChangeVehicleWindow(WindowClass window_class, VehicleID from_ _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 @@ struct VehicleDetailsWindow : Window { */ 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(VLD_WIDGET_MIDDLE_DETAILS); @@ -2621,11 +2616,9 @@ public: */ 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; } } -- cgit v1.2.3-70-g09d2