(svn r22226) -Codechange: When autoreplace invalidates vehicle windows because the Vehicle index changed, use a better eye-catcher-'data' than 0 to identify them.

This commit is contained in:
frosch 2011-03-08 19:41:58 +00:00
parent 31f46c0786
commit 9cf92e2bd2
3 changed files with 27 additions and 3 deletions

View File

@ -811,9 +811,10 @@ public:
VehicleOrderID to = GB(data, 8, 8);
switch (data) {
case 0:
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:

View File

@ -246,9 +246,10 @@ struct TimetableWindow : Window {
virtual void OnInvalidateData(int data)
{
switch (data) {
case 0:
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:

View File

@ -686,6 +686,12 @@ struct RefitWindow : public Window {
virtual void OnInvalidateData(int data)
{
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 0: { // The consist has changed; rebuild the entire list.
/* Clear the selection. */
Vehicle *v = Vehicle::Get(this->window_number);
@ -1121,7 +1127,7 @@ static inline void ChangeVehicleWindow(WindowClass window_class, VehicleID from_
}
/* Notify the window immediately, without scheduling. */
w->InvalidateData();
w->InvalidateData(-666);
}
}
@ -1780,6 +1786,12 @@ struct VehicleDetailsWindow : Window {
virtual void OnInvalidateData(int data)
{
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 */
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);
@ -2581,6 +2593,16 @@ public:
}
}
virtual void OnInvalidateData(int data)
{
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 */
return;
}
}
virtual bool IsNewGRFInspectable() const
{
return ::IsNewGRFInspectable(GetGrfSpecFeature(Vehicle::Get(this->window_number)->type), this->window_number);