diff options
author | rubidium <rubidium@openttd.org> | 2007-03-03 20:43:50 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-03-03 20:43:50 +0000 |
commit | 2061d6af2718b5acfe7218083bd6233b5941edc8 (patch) | |
tree | 284aa6d2ddd1c6595d02fad64458e763217af53b | |
parent | e33a8d3caa8699bf499c6cc1d432e0f3c0707201 (diff) | |
download | openttd-2061d6af2718b5acfe7218083bd6233b5941edc8.tar.xz |
(svn r8999) -Fix [FS#450]: do not select a disabled platform length/number of track count when going out of drag-drop mode.
-rw-r--r-- | src/rail_gui.cpp | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 7f69ccb99..228ddc99b 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -796,16 +796,31 @@ static void StationBuildWndProc(Window *w, WindowEvent *e) 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 *w, WindowEvent *e) 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; |