src/rail_gui.cpp
changeset 8809 e0d09d74e805
parent 8808 6296dfa53f81
child 8810 33066120c736
--- a/src/rail_gui.cpp	Thu Apr 03 21:01:01 2008 +0000
+++ b/src/rail_gui.cpp	Thu Apr 03 21:54:31 2008 +0000
@@ -45,9 +45,9 @@
 static DiagDirection _build_depot_direction;
 static byte _waypoint_count = 1;
 static byte _cur_waypoint_type;
-static bool _convert_signal_button = false;              ///< convert signal button in the signal GUI pressed
-static SignalVariant _cur_signal_variant = SIG_ELECTRIC; ///< set the signal variant (for signal GUI)
-static SignalType _cur_signal_type = SIGTYPE_NORMAL;     ///< set the signal type (for signal GUI)
+static bool _convert_signal_button;       ///< convert signal button in the signal GUI pressed
+static SignalVariant _cur_signal_variant; ///< set the signal variant (for signal GUI)
+static SignalType _cur_signal_type;       ///< set the signal type (for signal GUI)
 
 static struct {
 	byte orientation;
@@ -1385,14 +1385,9 @@
 
 /**
  * Open the signal selection window
- * @pre reset all signal GUI relevant variables
  */
 static void ShowSignalBuilder()
 {
-	_convert_signal_button = false;
-	_cur_signal_variant = _cur_year < _patches.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC;
-	_cur_signal_type = SIGTYPE_NORMAL;
-
 	AllocateWindowDesc(&_signal_builder_desc);
 }
 
@@ -1601,7 +1596,7 @@
 	MarkWholeScreenDirty();
 }
 
-void SetDefaultRailGui()
+static void SetDefaultRailGui()
 {
 	if (_local_player == PLAYER_SPECTATOR || !IsValidPlayer(_local_player)) return;
 
@@ -1650,5 +1645,36 @@
 	}
 }
 
+/**
+ * Updates the current signal variant used in the signal GUI
+ * to the one adequate to current year.
+ * @param 0 needed to be called when a patch setting changes
+ * @return success, needed for patch settings
+ */
+int32 ResetSignalVariant(int32 = 0)
+{
+	SignalVariant new_variant = (_cur_year < _patches.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC);
 
+	if (new_variant != _cur_signal_variant) {
+		Window *w = FindWindowById(WC_BUILD_SIGNAL, 0);
+		if (w != NULL) {
+			SetWindowDirty(w);
+			w->RaiseWidget((_cur_signal_variant == SIG_ELECTRIC ? BSW_ELECTRIC_NORM : BSW_SEMAPHORE_NORM) + _cur_signal_type);
+		}
+		_cur_signal_variant = new_variant;
+	}
 
+	return 0;
+}
+
+/** Resets the rail GUI - sets default railtype to build
+ * and resets the signal GUI
+ */
+void InitializeRailGUI()
+{
+	SetDefaultRailGui();
+
+	_convert_signal_button = false;
+	_cur_signal_type = SIGTYPE_NORMAL;
+	ResetSignalVariant();
+}