/// <summary>
        /// Selectes the current game mode.
        /// </summary>
        /// <param name="p_strRequestedGameMode">The id of the game mode we want to select.</param>
        /// <param name="p_booChangeDefaultGameMode">Whether the users ahs requested a change to the default game mode.</param>
        /// <returns>The <see cref="IGameModeFactory"/> that can build the game mode selected by the user.</returns>
        public IGameModeFactory SelectGameMode(string p_strRequestedGameMode, bool p_booChangeDefaultGameMode)
        {
            Trace.Write("Determining Game Mode: ");

            string strSelectedGame = EnvironmentInfo.Settings.RememberGameMode ? EnvironmentInfo.Settings.RememberedGameMode : null;

            if (!String.IsNullOrEmpty(p_strRequestedGameMode))
            {
                Trace.Write("(Requested Mode: " + p_strRequestedGameMode + ") ");
                strSelectedGame = p_strRequestedGameMode;
            }

            if (p_booChangeDefaultGameMode || String.IsNullOrEmpty(strSelectedGame))
            {
                Trace.Write("(From Selection Form) ");
                List <IGameModeDescriptor> lstGameModeInfos = new List <IGameModeDescriptor>();
                foreach (IGameModeDescriptor gmdGameMode in InstalledGameModes.RegisteredGameModes)
                {
                    lstGameModeInfos.Add(gmdGameMode);
                }
                GameModeSelectionForm msfSelector = new GameModeSelectionForm(lstGameModeInfos, EnvironmentInfo.Settings);
                msfSelector.ShowDialog();
                if ((msfSelector.DialogResult == DialogResult.OK) && !(RescanRequested = msfSelector.RescanRequested))
                {
                    strSelectedGame = msfSelector.SelectedGameModeId;
                }
                else
                {
                    return(null);
                }
            }
            Trace.WriteLine(strSelectedGame);
            if (!InstalledGameModes.IsRegistered(strSelectedGame))
            {
                StringBuilder stbError = new StringBuilder();
                if (!SupportedGameModes.IsRegistered(strSelectedGame))
                {
                    stbError.AppendFormat("Unrecognized Game Mode: {0}", strSelectedGame);
                }
                else
                {
                    stbError.AppendFormat("{0} is not set up to work with {1}", EnvironmentInfo.Settings.ModManagerName, SupportedGameModes.GetGameMode(strSelectedGame).GameModeDescriptor.Name).AppendLine();
                    stbError.AppendFormat("If {0} is installed, rescan for installed games from the Change Game toolbar item.", SupportedGameModes.GetGameMode(strSelectedGame).GameModeDescriptor.Name).AppendLine();
                }
                Trace.TraceError(stbError.ToString());
                MessageBox.Show(stbError.ToString(), "Unrecognized Game Mode", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(null);
            }

            return(InstalledGameModes.GetGameMode(strSelectedGame));
        }
		/// <summary>
		/// Selectes the current game mode.
		/// </summary>
		/// <param name="p_strRequestedGameMode">The id of the game mode we want to select.</param>
		/// <param name="p_booChangeDefaultGameMode">Whether the users ahs requested a change to the default game mode.</param>
		/// <returns>The <see cref="IGameModeFactory"/> that can build the game mode selected by the user.</returns>
		public IGameModeFactory SelectGameMode(string p_strRequestedGameMode, bool p_booChangeDefaultGameMode)
		{
			Trace.Write("Determining Game Mode: ");

			string strSelectedGame = EnvironmentInfo.Settings.RememberGameMode ? EnvironmentInfo.Settings.RememberedGameMode : null;
			if (!String.IsNullOrEmpty(p_strRequestedGameMode))
			{
				Trace.Write("(Requested Mode: " + p_strRequestedGameMode + ") ");
				strSelectedGame = p_strRequestedGameMode;
			}

			if (p_booChangeDefaultGameMode || String.IsNullOrEmpty(strSelectedGame))
			{
				Trace.Write("(From Selection Form) ");
				List<IGameModeDescriptor> lstGameModeInfos = new List<IGameModeDescriptor>();
				foreach (IGameModeDescriptor gmdGameMode in InstalledGameModes.RegisteredGameModes)
					lstGameModeInfos.Add(gmdGameMode);
				GameModeSelectionForm msfSelector = new GameModeSelectionForm(lstGameModeInfos, EnvironmentInfo.Settings);
				msfSelector.ShowDialog();
				if ((msfSelector.DialogResult == DialogResult.OK) && !(RescanRequested = msfSelector.RescanRequested))
					strSelectedGame = msfSelector.SelectedGameModeId;
				else
					return null;
			}
			Trace.WriteLine(strSelectedGame);
			if (!InstalledGameModes.IsRegistered(strSelectedGame))
			{
				StringBuilder stbError = new StringBuilder();
				if (!SupportedGameModes.IsRegistered(strSelectedGame))
					stbError.AppendFormat("Unrecognized Game Mode: {0}", strSelectedGame);
				else
				{
					stbError.AppendFormat("{0} is not set up to work with {1}", EnvironmentInfo.Settings.ModManagerName, SupportedGameModes.GetGameMode(strSelectedGame).GameModeDescriptor.Name).AppendLine();
					stbError.AppendFormat("If {0} is installed, rescan for installed games from the Change Game toolbar item.", SupportedGameModes.GetGameMode(strSelectedGame).GameModeDescriptor.Name).AppendLine();
				}
				Trace.TraceError(stbError.ToString());
				MessageBox.Show(stbError.ToString(), "Unrecognized Game Mode", MessageBoxButtons.OK, MessageBoxIcon.Error);
				return null;
			}

			return InstalledGameModes.GetGameMode(strSelectedGame);
		}