Mercurial > hg > openttd
changeset 6207:37978eaf16dc draft
(svn r8999) -Fix [FS#450]: do not select a disabled platform length/number of track count when going out of drag-drop mode.
author | rubidium <rubidium@openttd.org> |
---|---|
date | Sat, 03 Mar 2007 20:43:50 +0000 |
parents | 1cdff64e2480 |
children | 1732b7e71167 |
files | src/rail_gui.cpp |
diffstat | 1 files changed, 32 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -796,16 +796,31 @@ 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 @@ 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;