summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-03-03 20:43:50 +0000
committerrubidium <rubidium@openttd.org>2007-03-03 20:43:50 +0000
commit2061d6af2718b5acfe7218083bd6233b5941edc8 (patch)
tree284aa6d2ddd1c6595d02fad64458e763217af53b
parente33a8d3caa8699bf499c6cc1d432e0f3c0707201 (diff)
downloadopenttd-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.cpp34
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;