2 This file is part of the HandBrake source code.
\r
3 Homepage: <http://handbrake.fr>.
\r
4 It may be used under the terms of the GNU General Public License. */
\r
9 using System.Collections.Generic;
\r
10 using System.Diagnostics;
\r
11 using System.Globalization;
\r
12 using System.Windows.Forms;
\r
14 using HandBrake.ApplicationServices;
\r
16 using Handbrake.Functions;
\r
17 using Handbrake.Model;
\r
18 using Handbrake.Properties;
\r
21 /// The Options Window
\r
23 public partial class frmOptions : Form
\r
25 private frmMain mainWindow;
\r
27 public frmOptions(frmMain mw)
\r
29 InitializeComponent();
\r
32 IDictionary<string, string> langList = Main.MapLanguages();
\r
33 foreach (string item in langList.Keys)
\r
34 drop_preferredLang.Items.Add(item);
\r
36 // #############################
\r
38 // #############################
\r
41 if (Properties.Settings.Default.tooltipEnable)
\r
43 check_tooltip.CheckState = CheckState.Checked;
\r
44 ToolTip.Active = true;
\r
48 if (Properties.Settings.Default.updateStatus)
\r
49 check_updateCheck.CheckState = CheckState.Checked;
\r
51 // Days between update checks
\r
52 switch (Properties.Settings.Default.daysBetweenUpdateCheck)
\r
55 drop_updateCheckDays.SelectedIndex = 0;
\r
58 drop_updateCheckDays.SelectedIndex = 1;
\r
61 drop_updateCheckDays.SelectedIndex = 2;
\r
65 // On Encode Completeion Action
\r
66 drp_completeOption.Text = Properties.Settings.Default.CompletionOption;
\r
69 if (Properties.Settings.Default.growlEncode)
\r
70 check_growlEncode.CheckState = CheckState.Checked;
\r
72 if (Properties.Settings.Default.growlQueue)
\r
73 check_GrowlQueue.CheckState = CheckState.Checked;
\r
75 // Enable auto naming feature.
\r
76 if (Properties.Settings.Default.autoNaming)
\r
77 check_autoNaming.CheckState = CheckState.Checked;
\r
79 // Store the auto name path
\r
80 text_an_path.Text = Properties.Settings.Default.autoNamePath;
\r
81 if (text_an_path.Text == string.Empty)
\r
82 text_an_path.Text = "Click 'Browse' to set the default location";
\r
84 // Store auto name format
\r
85 txt_autoNameFormat.Text = Properties.Settings.Default.autoNameFormat;
\r
87 // Use iPod/iTunes friendly .m4v extension for MP4 files.
\r
88 if (Properties.Settings.Default.useM4v)
\r
89 check_m4v.CheckState = CheckState.Checked;
\r
91 // Remove Underscores
\r
92 check_removeUnderscores.Checked = Properties.Settings.Default.AutoNameRemoveUnderscore;
\r
95 check_TitleCase.Checked = Properties.Settings.Default.AutoNameTitleCase;
\r
97 // #############################
\r
99 // #############################
\r
102 txt_vlcPath.Text = Properties.Settings.Default.VLC_Path;
\r
104 // #############################
\r
105 // Audio and Subtitles Tab
\r
106 // #############################
\r
108 drop_preferredLang.SelectedItem = Properties.Settings.Default.NativeLanguage;
\r
110 switch (Settings.Default.DubMode)
\r
113 radio_dub.Checked = true;
\r
116 radio_foreignAndSubs.Checked = true;
\r
119 radio_preferredAudioAndSubs.Checked = true;
\r
123 // #############################
\r
125 // #############################
\r
127 // Priority level for encodes
\r
128 drp_Priority.Text = Properties.Settings.Default.processPriority;
\r
130 check_preventSleep.Checked = Properties.Settings.Default.preventSleep;
\r
132 // Log Verbosity Level
\r
133 cb_logVerboseLvl.SelectedIndex = Properties.Settings.Default.verboseLevel;
\r
135 // Save logs in the same directory as encoded files
\r
136 if (Properties.Settings.Default.saveLogWithVideo)
\r
137 check_saveLogWithVideo.CheckState = CheckState.Checked;
\r
139 // Save Logs in a specified path
\r
140 if (Properties.Settings.Default.saveLogToSpecifiedPath)
\r
141 check_logsInSpecifiedLocation.CheckState = CheckState.Checked;
\r
143 // The saved log path
\r
144 text_logPath.Text = Properties.Settings.Default.saveLogPath;
\r
146 check_clearOldLogs.Checked = Properties.Settings.Default.clearOldLogs;
\r
148 // #############################
\r
150 // #############################
\r
152 // Minimise to Tray
\r
153 if (Properties.Settings.Default.trayIconAlerts)
\r
154 check_trayStatusAlerts.CheckState = CheckState.Checked;
\r
156 // Tray Balloon popups
\r
157 if (Properties.Settings.Default.MainWindowMinimize)
\r
158 check_mainMinimize.CheckState = CheckState.Checked;
\r
160 // Enable / Disable Query editor tab
\r
161 if (Properties.Settings.Default.QueryEditorTab)
\r
162 check_queryEditorTab.CheckState = CheckState.Checked;
\r
163 check_promptOnUnmatchingQueries.Enabled = check_queryEditorTab.Checked;
\r
165 // Prompt on inconsistant queries
\r
166 check_promptOnUnmatchingQueries.Checked = Properties.Settings.Default.PromptOnUnmatchingQueries;
\r
168 // Preset update notification
\r
169 if (Properties.Settings.Default.presetNotification)
\r
170 check_disablePresetNotification.CheckState = CheckState.Checked;
\r
173 check_showCliForInGUIEncode.Checked = Properties.Settings.Default.showCliForInGuiEncodeStatus;
\r
175 // Set the preview count
\r
176 drop_previewScanCount.SelectedItem = Properties.Settings.Default.previewScanCount.ToString();
\r
179 string step = Properties.Settings.Default.x264cqstep.ToString(new CultureInfo("en-US"));
\r
183 drop_x264step.SelectedIndex = 0;
\r
186 drop_x264step.SelectedIndex = 1;
\r
189 drop_x264step.SelectedIndex = 2;
\r
192 drop_x264step.SelectedIndex = 3;
\r
196 // Use Experimental dvdnav
\r
197 if (Properties.Settings.Default.noDvdNav)
\r
198 check_dvdnav.CheckState = CheckState.Checked;
\r
203 private void check_updateCheck_CheckedChanged(object sender, EventArgs e)
\r
205 Properties.Settings.Default.updateStatus = check_updateCheck.Checked;
\r
208 private void drop_updateCheckDays_SelectedIndexChanged(object sender, EventArgs e)
\r
210 switch (drop_updateCheckDays.SelectedIndex)
\r
213 Properties.Settings.Default.daysBetweenUpdateCheck = 1;
\r
216 Properties.Settings.Default.daysBetweenUpdateCheck = 7;
\r
219 Properties.Settings.Default.daysBetweenUpdateCheck = 30;
\r
224 private void check_tooltip_CheckedChanged(object sender, EventArgs e)
\r
226 Properties.Settings.Default.tooltipEnable = check_tooltip.Checked;
\r
229 private void drp_completeOption_SelectedIndexChanged(object sender, EventArgs e)
\r
231 Properties.Settings.Default.CompletionOption = drp_completeOption.Text;
\r
234 private void check_GrowlQueue_CheckedChanged(object sender, EventArgs e)
\r
236 Properties.Settings.Default.growlQueue = check_GrowlQueue.Checked;
\r
239 private void check_growlEncode_CheckedChanged(object sender, EventArgs e)
\r
241 Properties.Settings.Default.growlEncode = check_growlEncode.Checked;
\r
244 private void check_autoNaming_CheckedChanged(object sender, EventArgs e)
\r
246 Properties.Settings.Default.autoNaming = check_autoNaming.Checked;
\r
249 private void txt_autoNameFormat_TextChanged(object sender, EventArgs e)
\r
251 Properties.Settings.Default.autoNameFormat = txt_autoNameFormat.Text;
\r
254 private void btn_browse_Click(object sender, EventArgs e)
\r
256 pathFinder.ShowDialog();
\r
257 text_an_path.Text = pathFinder.SelectedPath;
\r
260 private void text_an_path_TextChanged(object sender, EventArgs e)
\r
262 if (text_an_path.Text == string.Empty)
\r
264 Properties.Settings.Default.autoNamePath = string.Empty;
\r
265 text_an_path.Text = "Click 'Browse' to set the default location";
\r
268 Properties.Settings.Default.autoNamePath = text_an_path.Text;
\r
271 private void check_m4v_CheckedChanged(object sender, EventArgs e)
\r
273 Properties.Settings.Default.useM4v = check_m4v.Checked;
\r
276 private void check_removeUnderscores_CheckedChanged(object sender, EventArgs e)
\r
278 Properties.Settings.Default.AutoNameRemoveUnderscore = check_removeUnderscores.Checked;
\r
281 private void check_TitleCase_CheckedChanged(object sender, EventArgs e)
\r
283 Properties.Settings.Default.AutoNameTitleCase = check_TitleCase.Checked;
\r
290 private void btn_vlcPath_Click(object sender, EventArgs e)
\r
292 openFile_vlc.ShowDialog();
\r
293 if (openFile_vlc.FileName != string.Empty)
\r
294 txt_vlcPath.Text = openFile_vlc.FileName;
\r
297 private void txt_vlcPath_TextChanged(object sender, EventArgs e)
\r
299 Properties.Settings.Default.VLC_Path = txt_vlcPath.Text;
\r
304 #region Audio and Subtitles
\r
306 private void drop_preferredLang_SelectedIndexChanged(object sender, EventArgs e)
\r
308 Properties.Settings.Default.NativeLanguage = drop_preferredLang.SelectedItem.ToString();
\r
311 private void radio_dub_CheckedChanged(object sender, EventArgs e)
\r
313 if (radio_dub.Checked)
\r
314 Properties.Settings.Default.DubMode = 1;
\r
317 private void radio_foreignAndSubs_CheckedChanged(object sender, EventArgs e)
\r
319 if (radio_foreignAndSubs.Checked)
\r
320 Properties.Settings.Default.DubMode = 2;
\r
323 private void radio_preferredAudioAndSubs_CheckedChanged(object sender, EventArgs e)
\r
325 if (radio_preferredAudioAndSubs.Checked)
\r
326 Properties.Settings.Default.DubMode = 3;
\r
329 private void check_AddCCTracks_CheckedChanged(object sender, EventArgs e)
\r
331 Settings.Default.useClosedCaption = check_AddCCTracks.Checked;
\r
338 private void drp_Priority_SelectedIndexChanged(object sender, EventArgs e)
\r
340 Properties.Settings.Default.processPriority = drp_Priority.Text;
\r
343 private void check_preventSleep_CheckedChanged(object sender, EventArgs e)
\r
345 Properties.Settings.Default.preventSleep = check_preventSleep.Checked;
\r
348 private void cb_logVerboseLvl_SelectedIndexChanged(object sender, EventArgs e)
\r
350 Properties.Settings.Default.verboseLevel = cb_logVerboseLvl.SelectedIndex;
\r
353 private void check_saveLogWithVideo_CheckedChanged(object sender, EventArgs e)
\r
355 Properties.Settings.Default.saveLogWithVideo = check_saveLogWithVideo.Checked;
\r
358 private void check_logsInSpecifiedLocation_CheckedChanged(object sender, EventArgs e)
\r
360 Properties.Settings.Default.saveLogToSpecifiedPath = check_logsInSpecifiedLocation.Checked;
\r
363 private void btn_saveLog_Click(object sender, EventArgs e)
\r
365 pathFinder.SelectedPath = String.Empty;
\r
366 pathFinder.ShowDialog();
\r
367 if (pathFinder.SelectedPath != string.Empty)
\r
368 text_logPath.Text = pathFinder.SelectedPath;
\r
371 private void text_logPath_TextChanged(object sender, EventArgs e)
\r
373 Properties.Settings.Default.saveLogPath = text_logPath.Text;
\r
376 private void btn_viewLogs_Click(object sender, EventArgs e)
\r
378 string logDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\HandBrake\\logs";
\r
379 string windir = Environment.GetEnvironmentVariable("WINDIR");
\r
380 Process prc = new Process();
\r
381 prc.StartInfo.FileName = windir + @"\explorer.exe";
\r
382 prc.StartInfo.Arguments = logDir;
\r
386 private void btn_clearLogs_Click(object sender, EventArgs e)
\r
388 DialogResult result = MessageBox.Show("Are you sure you wish to clear the log file directory?", "Clear Logs",
\r
389 MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
\r
390 if (result == DialogResult.Yes)
\r
393 MessageBox.Show(this, "HandBrake's Log file directory has been cleared!", "Notice", MessageBoxButtons.OK,
\r
394 MessageBoxIcon.Information);
\r
398 private void check_clearOldLogs_CheckedChanged(object sender, EventArgs e)
\r
400 Properties.Settings.Default.clearOldLogs = check_clearOldLogs.Checked;
\r
407 private void check_mainMinimize_CheckedChanged(object sender, EventArgs e)
\r
409 Properties.Settings.Default.MainWindowMinimize = check_mainMinimize.Checked;
\r
410 check_trayStatusAlerts.Enabled = check_mainMinimize.Checked;
\r
413 private void check_trayStatusAlerts_CheckedChanged(object sender, EventArgs e)
\r
415 Properties.Settings.Default.trayIconAlerts = check_trayStatusAlerts.Checked;
\r
418 private void check_queryEditorTab_CheckedChanged(object sender, EventArgs e)
\r
420 Properties.Settings.Default.QueryEditorTab = check_queryEditorTab.Checked;
\r
421 check_promptOnUnmatchingQueries.Enabled = check_queryEditorTab.Checked;
\r
424 private void check_promptOnUnmatchingQueries_CheckedChanged(object sender, EventArgs e)
\r
426 Properties.Settings.Default.PromptOnUnmatchingQueries = check_promptOnUnmatchingQueries.Checked;
\r
429 private void check_disablePresetNotification_CheckedChanged(object sender, EventArgs e)
\r
431 Properties.Settings.Default.presetNotification = check_disablePresetNotification.Checked;
\r
434 private void check_showCliForInGUIEncode_CheckedChanged(object sender, EventArgs e)
\r
436 Properties.Settings.Default.showCliForInGuiEncodeStatus = check_showCliForInGUIEncode.Checked;
\r
439 private void drop_previewScanCount_SelectedIndexChanged(object sender, EventArgs e)
\r
441 Properties.Settings.Default.previewScanCount = int.Parse(drop_previewScanCount.SelectedItem.ToString());
\r
444 private void x264step_SelectedIndexChanged(object sender, EventArgs e)
\r
446 switch (drop_x264step.SelectedIndex)
\r
449 Properties.Settings.Default.x264cqstep = 1.0;
\r
452 Properties.Settings.Default.x264cqstep = 0.50;
\r
455 Properties.Settings.Default.x264cqstep = 0.25;
\r
458 Properties.Settings.Default.x264cqstep = 0.20;
\r
461 mainWindow.setQualityFromSlider();
\r
464 private void check_dvdnav_CheckedChanged(object sender, EventArgs e)
\r
466 Properties.Settings.Default.noDvdNav = check_dvdnav.Checked;
\r
471 private void btn_close_Click(object sender, EventArgs e)
\r
473 Properties.Settings.Default.Save(); // Small hack for Vista. Seems to work fine on XP without this
\r
474 UpdateApplicationServicesSettings();
\r
480 /// Initialize App Services
\r
482 private static void UpdateApplicationServicesSettings()
\r
484 string versionId = String.Format(
\r
485 "Windows GUI {1} {0}", Settings.Default.hb_build, Settings.Default.hb_version);
\r
486 Init.SetupSettings(
\r
488 Program.InstanceId,
\r
489 Settings.Default.CompletionOption,
\r
490 Settings.Default.noDvdNav,
\r
491 Settings.Default.growlEncode,
\r
492 Settings.Default.growlQueue,
\r
493 Settings.Default.processPriority,
\r
494 Settings.Default.saveLogPath,
\r
495 Settings.Default.saveLogToSpecifiedPath,
\r
496 Settings.Default.saveLogWithVideo,
\r
497 Settings.Default.showCliForInGuiEncodeStatus,
\r
498 Settings.Default.preventSleep);
\r