diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -796,16 +796,31 @@ static void StationBuildWndProc(Window * case 8: case 9: case 10: - case 11: + case 11: { RaiseWindowWidget(w, _railstation.numtracks + 4); RaiseWindowWidget(w, 19); + _railstation.numtracks = (e->we.click.widget - 5) + 1; _railstation.dragdrop = false; + + const StationSpec *statspec = _railstation.newstations ? GetCustomStationSpec(_railstation.station_class, _railstation.station_type) : NULL; + if (statspec != NULL && HASBIT(statspec->disallowed_lengths, _railstation.platlength - 1)) { + /* The previously selected number of platforms in invalid */ + for (uint i = 0; i < 7; i++) { + if (!HASBIT(statspec->disallowed_lengths, i)) { + RaiseWindowWidget(w, _railstation.platlength + 11); + _railstation.platlength = i + 1; + break; + } + } + } + LowerWindowWidget(w, _railstation.platlength + 11); LowerWindowWidget(w, _railstation.numtracks + 4); SndPlayFx(SND_15_BEEP); SetWindowDirty(w); break; + } case 12: case 13: @@ -813,16 +828,31 @@ static void StationBuildWndProc(Window * case 15: case 16: case 17: - case 18: + case 18: { RaiseWindowWidget(w, _railstation.platlength + 11); RaiseWindowWidget(w, 19); + _railstation.platlength = (e->we.click.widget - 12) + 1; _railstation.dragdrop = false; + + const StationSpec *statspec = _railstation.newstations ? GetCustomStationSpec(_railstation.station_class, _railstation.station_type) : NULL; + if (statspec != NULL && HASBIT(statspec->disallowed_platforms, _railstation.numtracks - 1)) { + /* The previously selected number of tracks in invalid */ + for (uint i = 0; i < 7; i++) { + if (!HASBIT(statspec->disallowed_platforms, i)) { + RaiseWindowWidget(w, _railstation.numtracks + 4); + _railstation.numtracks = i + 1; + break; + } + } + } + LowerWindowWidget(w, _railstation.platlength + 11); LowerWindowWidget(w, _railstation.numtracks + 4); SndPlayFx(SND_15_BEEP); SetWindowDirty(w); break; + } case 19: _railstation.dragdrop ^= true;