(svn r8999) -Fix [FS#450]: do not select a disabled platform length/number of track count when going out of drag-drop mode.
authorrubidium
Sat, 03 Mar 2007 20:43:50 +0000
changeset 6207 a04057330c4d
parent 6206 8d6802352e2c
child 6208 e1f3320d2410
(svn r8999) -Fix [FS#450]: do not select a disabled platform length/number of track count when going out of drag-drop mode.
src/rail_gui.cpp
--- a/src/rail_gui.cpp	Sat Mar 03 13:36:25 2007 +0000
+++ b/src/rail_gui.cpp	Sat Mar 03 20:43:50 2007 +0000
@@ -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;