--- a/train_cmd.c Sat Feb 19 14:40:32 2005 +0000
+++ b/train_cmd.c Sun Feb 20 07:47:42 2005 +0000
@@ -841,8 +841,12 @@
if (dst_head->subtype == TS_Front_Engine)
UpdateTrainAcceleration(dst_head);
InvalidateWindow(WC_VEHICLE_DETAILS, dst_head->index);
+ /* Update the refit button */
+ InvalidateWindowWidget(WC_VEHICLE_VIEW, dst_head->index, 12);
}
+ /* I added this to so that the refit buttons get updated */
+ InvalidateWindowWidget(WC_VEHICLE_VIEW, src_head->index, 12);
InvalidateWindow(WC_VEHICLE_DEPOT, src_head->tile);
RebuildVehicleLists();
}
--- a/train_gui.c Sat Feb 19 14:40:32 2005 +0000
+++ b/train_gui.c Sun Feb 20 07:47:42 2005 +0000
@@ -809,16 +809,29 @@
{
switch(e->event) {
case WE_PAINT: {
- Vehicle *v;
+ Vehicle *v, *u;
StringID str;
v = GetVehicle(w->window_number);
w->disabled_state = (v->owner == _local_player) ? 0 : 0x380;
- if (v->cargo_cap == 0) {
- //we cannot refit this engine
- SETBIT(w->disabled_state, 12);
+ SETBIT(w->disabled_state, 12);
+
+ /* See if any carriage can be refitted */
+ for ( u = v; u != NULL; u = u->next) {
+ if (_engine_refit_masks[u->engine_type] != 0) {
+ CLRBIT(w->disabled_state, 12);
+ /* We have a refittable carriage, bail out */
+ break;
+ }
+ }
+
+ /* Above code doesn't seem to handle non-newgrf engines, do it separately
+ TODO: handle engines which are NOT the head of the train, but don't break wagons */
+ if (v->cargo_cap != 0) {
+ /* we can refit this engine */
+ CLRBIT(w->disabled_state, 12);
}
/* draw widgets & caption */