context: /*  frmOptions.cs $
      This file is part of the HandBrake source code.
      Homepage: <http://handbrake.fr>.
      It may be used under the terms of the GNU General Public License. */
  
  namespace Handbrake
  {
      using System;
      using System.Collections.Generic;
      using System.Diagnostics;
      using System.Globalization;
      using System.Windows.Forms;
  
      using HandBrake.ApplicationServices;
      using HandBrake.ApplicationServices.Services;
  
      using Handbrake.Functions;
      using Handbrake.Model;
      using Handbrake.Properties;
  
      /// <summary>
      /// The Options Window
      /// </summary>
      public partial class frmOptions : Form
      {
          private frmMain mainWindow;
          private bool optionsWindowLoading = true;
  
          public frmOptions(frmMain mw)
          {
              InitializeComponent();
              mainWindow = mw;
  
              IDictionary<string, string> langList = Main.MapLanguages();
              foreach (string item in langList.Keys)
                  drop_preferredLang.Items.Add(item);
  
              // #############################
              // General
              // #############################
  
              // Enable Tooltips.
              if (Properties.Settings.Default.tooltipEnable)
              {
                  check_tooltip.CheckState = CheckState.Checked;
                  ToolTip.Active = true;
              }
  
              // Update Check
              if (Properties.Settings.Default.updateStatus)
                  check_updateCheck.CheckState = CheckState.Checked;
  
              // Days between update checks
              switch (Properties.Settings.Default.daysBetweenUpdateCheck)
              {
                  case 1:
                      drop_updateCheckDays.SelectedIndex = 0;
                      break;
                  case 7:
                      drop_updateCheckDays.SelectedIndex = 1;
                      break;
                  case 30:
                      drop_updateCheckDays.SelectedIndex = 2;
                      break;
              }
  
              // On Encode Completeion Action
              drp_completeOption.Text = Properties.Settings.Default.CompletionOption;
  
              // Growl.
              if (Properties.Settings.Default.growlEncode)
                  check_growlEncode.CheckState = CheckState.Checked;
  
              if (Properties.Settings.Default.growlQueue)
                  check_GrowlQueue.CheckState = CheckState.Checked;
  
              // Enable auto naming feature.
              if (Properties.Settings.Default.autoNaming)
                  check_autoNaming.CheckState = CheckState.Checked;
  
              // Store the auto name path
              text_an_path.Text = Properties.Settings.Default.autoNamePath;
              if (text_an_path.Text == string.Empty)
                  text_an_path.Text = "Click 'Browse' to set the default location";
  
              // Store auto name format
              txt_autoNameFormat.Text = Properties.Settings.Default.autoNameFormat;
  
              // Use iPod/iTunes friendly .m4v extension for MP4 files.
              if (Properties.Settings.Default.useM4v)
                  check_m4v.CheckState = CheckState.Checked;
  
              // Remove Underscores
              check_removeUnderscores.Checked = Properties.Settings.Default.AutoNameRemoveUnderscore;
  
              // Title case
              check_TitleCase.Checked = Properties.Settings.Default.AutoNameTitleCase;
  
              // #############################
              // Picture Tab
              // #############################
  
              // VLC Path
              txt_vlcPath.Text = Properties.Settings.Default.VLC_Path;
  
              // #############################
              // Audio and Subtitles Tab
              // #############################
  
              drop_preferredLang.SelectedItem = Properties.Settings.Default.NativeLanguage;
  
              switch (Settings.Default.DubMode)
              {
                  case 1:
                      radio_dub.Checked = true;
                      break;
                  case 2:
                      radio_foreignAndSubs.Checked = true;
                      break;
                  case 3:
                      radio_preferredAudioAndSubs.Checked = true;
                      break;
              }
  
              check_AddCCTracks.Checked = Properties.Settings.Default.useClosedCaption;
  
              // #############################
              // CLI
              // #############################
  
              // Priority level for encodes
              drp_Priority.Text = Properties.Settings.Default.processPriority;
  
              check_preventSleep.Checked = Properties.Settings.Default.preventSleep;
  
              // Log Verbosity Level
              cb_logVerboseLvl.SelectedIndex = Properties.Settings.Default.verboseLevel;
  
              // Save logs in the same directory as encoded files
              if (Properties.Settings.Default.saveLogWithVideo)
                  check_saveLogWithVideo.CheckState = CheckState.Checked;
  
              // Save Logs in a specified path
              if (Properties.Settings.Default.saveLogToSpecifiedPath)
                  check_logsInSpecifiedLocation.CheckState = CheckState.Checked;
  
              // The saved log path
              text_logPath.Text = Properties.Settings.Default.saveLogPath;
  
              check_clearOldLogs.Checked = Properties.Settings.Default.clearOldLogs;
  
              // #############################
              // Advanced
              // #############################
  
              // Minimise to Tray
              if (Properties.Settings.Default.trayIconAlerts)
                  check_trayStatusAlerts.CheckState = CheckState.Checked;
  
              // Tray Balloon popups
              if (Properties.Settings.Default.MainWindowMinimize)
                  check_mainMinimize.CheckState = CheckState.Checked;
  
              // Enable / Disable Query editor tab
              if (Properties.Settings.Default.QueryEditorTab)
                  check_queryEditorTab.CheckState = CheckState.Checked;
              check_promptOnUnmatchingQueries.Enabled = check_queryEditorTab.Checked;
  
              // Prompt on inconsistant queries
              check_promptOnUnmatchingQueries.Checked = Properties.Settings.Default.PromptOnUnmatchingQueries;
  
              // Preset update notification
              if (Properties.Settings.Default.presetNotification)
                  check_disablePresetNotification.CheckState = CheckState.Checked;
  
              // Show CLI Window
              check_showCliForInGUIEncode.Checked = Properties.Settings.Default.showCliForInGuiEncodeStatus;
  
              // Set the preview count
              drop_previewScanCount.SelectedItem = Properties.Settings.Default.previewScanCount.ToString();
  
              // x264 step
              string step = Properties.Settings.Default.x264cqstep.ToString(new CultureInfo("en-US"));
              switch (step)
              {
                  case "1":
                      drop_x264step.SelectedIndex = 0;
                      break;
                  case "0.5":
                      drop_x264step.SelectedIndex = 1;
                      break;
                  case "0.25":
                      drop_x264step.SelectedIndex = 2;
                      break;
                  case "0.2":
                      drop_x264step.SelectedIndex = 3;
                      break;
              }
  
              // Use Experimental dvdnav
              if (Properties.Settings.Default.noDvdNav)
                  check_dvdnav.CheckState = CheckState.Checked;
  
              optionsWindowLoading = false;
          }
  
          #region General
  
          private void check_updateCheck_CheckedChanged(object sender, EventArgs e)
          {
              Properties.Settings.Default.updateStatus = check_updateCheck.Checked;
          }
  
          private void drop_updateCheckDays_SelectedIndexChanged(object sender, EventArgs e)
          {
              switch (drop_updateCheckDays.SelectedIndex)
              {
                  case 0:
                      Properties.Settings.Default.daysBetweenUpdateCheck = 1;
                      break;
                  case 1:
                      Properties.Settings.Default.daysBetweenUpdateCheck = 7;
                      break;
                  case 2:
                      Properties.Settings.Default.daysBetweenUpdateCheck = 30;
                      break;
              }
          }
  
          private void check_tooltip_CheckedChanged(object sender, EventArgs e)
          {
              Properties.Settings.Default.tooltipEnable = check_tooltip.Checked;
          }
  
          private void drp_completeOption_SelectedIndexChanged(object sender, EventArgs e)
          {
              Properties.Settings.Default.CompletionOption = drp_completeOption.Text;
          }
  
          private void check_GrowlQueue_CheckedChanged(object sender, EventArgs e)
          {
              Properties.Settings.Default.growlQueue = check_GrowlQueue.Checked;
          }
  
          private void check_growlEncode_CheckedChanged(object sender, EventArgs e)
          {
              Properties.Settings.Default.growlEncode = check_growlEncode.Checked;
          }
  
          private void check_autoNaming_CheckedChanged(object sender, EventArgs e)
          {
              Properties.Settings.Default.autoNaming = check_autoNaming.Checked;
          }
  
          private void txt_autoNameFormat_TextChanged(object sender, EventArgs e)
          {
              Properties.Settings.Default.autoNameFormat = txt_autoNameFormat.Text;
          }
  
          private void btn_browse_Click(object sender, EventArgs e)
          {
              pathFinder.ShowDialog();
              text_an_path.Text = pathFinder.SelectedPath;
          }
  
          private void text_an_path_TextChanged(object sender, EventArgs e)
          {
  
gt:             if (text_an_path.Text == string.Empty)