@@ -67,6 +67,8 @@ public OptionsForm(UserSettings settings, UpdateManager updateManager, bool init
6767 Settings = settings ;
6868 UpdateManager = updateManager ;
6969
70+ InitializeHelpIcons ( ) ;
71+
7072 // Collect all the available language codes by searching for
7173 // localisation files, but always include English (base language).
7274 var languageCodes = new List < string > { "en" } ;
@@ -795,6 +797,67 @@ private void checkPerformanceTuner_Click(object sender, EventArgs e)
795797
796798
797799 #region Help for General Options
800+ /// <summary>
801+ /// Allows multiple controls to change a single help icon with their hover events.
802+ /// </summary>
803+ private class HelpIconHover
804+ {
805+ private readonly PictureBox Icon ;
806+ private int HoverCount = 0 ;
807+
808+ public HelpIconHover ( PictureBox pb )
809+ {
810+ Icon = pb ;
811+ }
812+
813+ public void Enter ( )
814+ {
815+ HoverCount ++ ;
816+ SetImage ( ) ;
817+ }
818+
819+ public void Leave ( )
820+ {
821+ HoverCount -- ;
822+ SetImage ( ) ;
823+ }
824+
825+ private void SetImage ( )
826+ {
827+ Icon . Image = HoverCount > 0 ? Properties . Resources . info_18_hover : Properties . Resources . info_18 ;
828+ }
829+ }
830+
831+ private readonly IDictionary < Control , HelpIconHover > ToHelpIcon = new Dictionary < Control , HelpIconHover > ( ) ;
832+
833+ private void InitializeHelpIcons ( )
834+ {
835+ // static mapping of picture boxes to controls
836+ var helpIconControls = new ( PictureBox , Control [ ] ) [ ]
837+ {
838+ ( pbAlerter , new [ ] { checkAlerter } ) ,
839+ ( pbControlConfirmations , new [ ] { checkControlConfirmations } ) ,
840+ ( pbMapWindow , new [ ] { checkViewMapWindow } ) ,
841+ ( pbLAA , new [ ] { checkUseLargeAddressAware } ) ,
842+ ( pbRetainers , new [ ] { checkRetainers } ) ,
843+ ( pbGraduatedRelease , new [ ] { checkGraduatedRelease } ) ,
844+ ( pbBrakePipeChargingRate , new [ ] { lBrakePipeChargingRate } ) ,
845+ ( pbLanguage , new Control [ ] { labelLanguage , comboLanguage } ) ,
846+ ( pbPressureUnit , new Control [ ] { labelPressureUnit , comboPressureUnit } ) ,
847+ ( pbOtherUnits , new Control [ ] { labelOtherUnits , comboOtherUnits } ) ,
848+ ( pbDisableTcsScripts , new [ ] { checkDisableTCSScripts } ) ,
849+ ( pbEnableWebServer , new [ ] { checkEnableWebServer } ) ,
850+ ( pbOverspeedMonitor , new [ ] { checkOverspeedMonitor } ) ,
851+ } ;
852+ foreach ( ( PictureBox pb , Control [ ] controls ) in helpIconControls )
853+ {
854+ var hover = new HelpIconHover ( pb ) ;
855+ ToHelpIcon [ pb ] = hover ;
856+ foreach ( Control control in controls )
857+ ToHelpIcon [ control ] = hover ;
858+ }
859+ }
860+
798861 /// <summary>
799862 /// Loads a relevant page from the manual maintained by James Ross's automatic build.
800863 /// </summary>
@@ -877,71 +940,14 @@ private void HelpIcon_Click(object sender, EventArgs _)
877940 /// <param name="_"></param>
878941 private void HelpIcon_MouseEnter ( object sender , EventArgs _ )
879942 {
880- if ( sender is PictureBox pb )
881- pb . Image = Properties . Resources . info_18_hover ;
882- else
883- {
884- EnterHelp ( sender , "checkAlerter" , "pbAlerter" ) ;
885- EnterHelp ( sender , "checkControlConfirmations" , "pbControlConfirmations" ) ;
886- EnterHelp ( sender , "checkViewMapWindow" , "pbMapWindow" ) ;
887- EnterHelp ( sender , "checkUseLargeAddressAware" , "pbLAA" ) ;
888- EnterHelp ( sender , "checkRetainers" , "pbRetainers" ) ;
889- EnterHelp ( sender , "checkGraduatedRelease" , "pbGraduatedRelease" ) ;
890- EnterHelp ( sender , "lBrakePipeChargingRate" , "pbBrakePipeChargingRate" ) ;
891- EnterHelp ( sender , "labelLanguage" , "pbLanguage" ) ;
892- EnterHelp ( sender , "comboLanguage" , "pbLanguage" ) ;
893- EnterHelp ( sender , "labelPressureUnit" , "pbPressureUnit" ) ;
894- EnterHelp ( sender , "comboPressureUnit" , "pbPressureUnit" ) ;
895- EnterHelp ( sender , "labelOtherUnits" , "pbOtherUnits" ) ;
896- EnterHelp ( sender , "comboOtherUnits" , "pbOtherUnits" ) ;
897- EnterHelp ( sender , "checkDisableTCSScripts" , "pbDisableTcsScripts" ) ;
898- EnterHelp ( sender , "checkEnableWebServer" , "pbEnableWebServer" ) ;
899- EnterHelp ( sender , "checkOverspeedMonitor" , "pbOverspeedMonitor" ) ;
900- }
943+ if ( sender is Control control && ToHelpIcon . TryGetValue ( control , out var hover ) )
944+ hover . Enter ( ) ;
901945 }
902946
903947 private void HelpIcon_MouseLeave ( object sender , EventArgs _ )
904948 {
905- if ( sender is PictureBox pb )
906- pb . Image = Properties . Resources . info_18 ;
907- else
908- {
909- LeaveHelp ( sender , "checkAlerter" , "pbAlerter" ) ;
910- LeaveHelp ( sender , "checkControlConfirmations" , "pbControlConfirmations" ) ;
911- LeaveHelp ( sender , "checkViewMapWindow" , "pbMapWindow" ) ;
912- LeaveHelp ( sender , "checkUseLargeAddressAware" , "pbLAA" ) ;
913- LeaveHelp ( sender , "checkRetainers" , "pbRetainers" ) ;
914- LeaveHelp ( sender , "checkGraduatedRelease" , "pbGraduatedRelease" ) ;
915- LeaveHelp ( sender , "lBrakePipeChargingRate" , "pbBrakePipeChargingRate" ) ;
916- LeaveHelp ( sender , "comboLanguage" , "pbLanguage" ) ;
917- LeaveHelp ( sender , "labelPressureUnit" , "pbPressureUnit" ) ;
918- LeaveHelp ( sender , "comboPressureUnit" , "pbPressureUnit" ) ;
919- LeaveHelp ( sender , "labelOtherUnits" , "pbOtherUnits" ) ;
920- LeaveHelp ( sender , "comboOtherUnits" , "pbOtherUnits" ) ;
921- LeaveHelp ( sender , "checkDisableTCSScripts" , "pbDisableTcsScripts" ) ;
922- LeaveHelp ( sender , "checkEnableWebServer" , "pbEnableWebServer" ) ;
923- LeaveHelp ( sender , "checkOverspeedMonitor" , "pbOverspeedMonitor" ) ;
924- }
925- }
926-
927- private void EnterHelp ( object sender , string controlName , string iconName )
928- {
929- if ( sender is Control control && control . Name == controlName )
930- {
931- var iconArray = Controls . Find ( iconName , true ) ;
932- if ( iconArray [ 0 ] is PictureBox pb2 )
933- pb2 . Image = Properties . Resources . info_18_hover ;
934- }
935- }
936-
937- private void LeaveHelp ( object sender , string controlName , string iconName )
938- {
939- if ( sender is Control control && control . Name == controlName )
940- {
941- var iconArray = Controls . Find ( iconName , true ) ;
942- if ( iconArray [ 0 ] is PictureBox pb2 )
943- pb2 . Image = Properties . Resources . info_18 ;
944- }
949+ if ( sender is Control control && ToHelpIcon . TryGetValue ( control , out var hover ) )
950+ hover . Leave ( ) ;
945951 }
946952 #endregion
947953 }
0 commit comments