OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmOptions.cs
1 /*  frmOptions.cs $\r
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
5 \r
6 namespace Handbrake\r
7 {\r
8     using System;\r
9     using System.Collections.Generic;\r
10     using System.Diagnostics;\r
11     using System.Globalization;\r
12     using System.Windows.Forms;\r
13 \r
14     using HandBrake.ApplicationServices;\r
15 \r
16     using Handbrake.Functions;\r
17     using Handbrake.Model;\r
18     using Handbrake.Properties;\r
19 \r
20     /// <summary>\r
21     /// The Options Window\r
22     /// </summary>\r
23     public partial class frmOptions : Form\r
24     {\r
25         private frmMain mainWindow;\r
26 \r
27         public frmOptions(frmMain mw)\r
28         {\r
29             InitializeComponent();\r
30             mainWindow = mw;\r
31 \r
32             IDictionary<string, string> langList = Main.MapLanguages();\r
33             foreach (string item in langList.Keys)\r
34                 drop_preferredLang.Items.Add(item);\r
35 \r
36             // #############################\r
37             // General\r
38             // #############################\r
39 \r
40             // Enable Tooltips.\r
41             if (Properties.Settings.Default.tooltipEnable)\r
42             {\r
43                 check_tooltip.CheckState = CheckState.Checked;\r
44                 ToolTip.Active = true;\r
45             }\r
46 \r
47             // Update Check\r
48             if (Properties.Settings.Default.updateStatus)\r
49                 check_updateCheck.CheckState = CheckState.Checked;\r
50 \r
51             // Days between update checks\r
52             switch (Properties.Settings.Default.daysBetweenUpdateCheck)\r
53             {\r
54                 case 1:\r
55                     drop_updateCheckDays.SelectedIndex = 0;\r
56                     break;\r
57                 case 7:\r
58                     drop_updateCheckDays.SelectedIndex = 1;\r
59                     break;\r
60                 case 30:\r
61                     drop_updateCheckDays.SelectedIndex = 2;\r
62                     break;\r
63             }\r
64 \r
65             // On Encode Completeion Action\r
66             drp_completeOption.Text = Properties.Settings.Default.CompletionOption;\r
67 \r
68             // Growl.\r
69             if (Properties.Settings.Default.growlEncode)\r
70                 check_growlEncode.CheckState = CheckState.Checked;\r
71 \r
72             if (Properties.Settings.Default.growlQueue)\r
73                 check_GrowlQueue.CheckState = CheckState.Checked;\r
74 \r
75             // Enable auto naming feature.\r
76             if (Properties.Settings.Default.autoNaming)\r
77                 check_autoNaming.CheckState = CheckState.Checked;\r
78 \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
83 \r
84             // Store auto name format\r
85             txt_autoNameFormat.Text = Properties.Settings.Default.autoNameFormat;\r
86 \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
90 \r
91             // Remove Underscores\r
92             check_removeUnderscores.Checked = Properties.Settings.Default.AutoNameRemoveUnderscore;\r
93 \r
94             // Title case\r
95             check_TitleCase.Checked = Properties.Settings.Default.AutoNameTitleCase;\r
96 \r
97             // #############################\r
98             // Picture Tab\r
99             // #############################\r
100 \r
101             // VLC Path\r
102             txt_vlcPath.Text = Properties.Settings.Default.VLC_Path;\r
103 \r
104             // #############################\r
105             // Audio and Subtitles Tab\r
106             // #############################\r
107 \r
108             drop_preferredLang.SelectedItem = Properties.Settings.Default.NativeLanguage;\r
109 \r
110             switch (Settings.Default.DubMode)\r
111             {\r
112                 case 1:\r
113                     radio_dub.Checked = true;\r
114                     break;\r
115                 case 2:\r
116                     radio_foreignAndSubs.Checked = true;\r
117                     break;\r
118                 case 3:\r
119                     radio_preferredAudioAndSubs.Checked = true;\r
120                     break;\r
121             }\r
122 \r
123             // #############################\r
124             // CLI\r
125             // #############################\r
126 \r
127             // Priority level for encodes\r
128             drp_Priority.Text = Properties.Settings.Default.processPriority;\r
129 \r
130             check_preventSleep.Checked = Properties.Settings.Default.preventSleep;\r
131 \r
132             // Log Verbosity Level\r
133             cb_logVerboseLvl.SelectedIndex = Properties.Settings.Default.verboseLevel;\r
134 \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
138 \r
139             // Save Logs in a specified path\r
140             if (Properties.Settings.Default.saveLogToSpecifiedPath)\r
141                 check_logsInSpecifiedLocation.CheckState = CheckState.Checked;\r
142 \r
143             // The saved log path\r
144             text_logPath.Text = Properties.Settings.Default.saveLogPath;\r
145 \r
146             check_clearOldLogs.Checked = Properties.Settings.Default.clearOldLogs;\r
147 \r
148             // #############################\r
149             // Advanced\r
150             // #############################\r
151 \r
152             // Minimise to Tray\r
153             if (Properties.Settings.Default.trayIconAlerts)\r
154                 check_trayStatusAlerts.CheckState = CheckState.Checked;\r
155 \r
156             // Tray Balloon popups\r
157             if (Properties.Settings.Default.MainWindowMinimize)\r
158                 check_mainMinimize.CheckState = CheckState.Checked;\r
159 \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
164 \r
165             // Prompt on inconsistant queries\r
166             check_promptOnUnmatchingQueries.Checked = Properties.Settings.Default.PromptOnUnmatchingQueries;\r
167 \r
168             // Preset update notification\r
169             if (Properties.Settings.Default.presetNotification)\r
170                 check_disablePresetNotification.CheckState = CheckState.Checked;\r
171 \r
172             // Show CLI Window\r
173             check_showCliForInGUIEncode.Checked = Properties.Settings.Default.showCliForInGuiEncodeStatus;\r
174 \r
175             // Set the preview count\r
176             drop_previewScanCount.SelectedItem = Properties.Settings.Default.previewScanCount.ToString();\r
177 \r
178             // x264 step\r
179             string step = Properties.Settings.Default.x264cqstep.ToString(new CultureInfo("en-US"));\r
180             switch (step)\r
181             {\r
182                 case "1":\r
183                     drop_x264step.SelectedIndex = 0;\r
184                     break;\r
185                 case "0.5":\r
186                     drop_x264step.SelectedIndex = 1;\r
187                     break;\r
188                 case "0.25":\r
189                     drop_x264step.SelectedIndex = 2;\r
190                     break;\r
191                 case "0.2":\r
192                     drop_x264step.SelectedIndex = 3;\r
193                     break;\r
194             }\r
195 \r
196             // Use Experimental dvdnav\r
197             if (Properties.Settings.Default.noDvdNav)\r
198                 check_dvdnav.CheckState = CheckState.Checked;\r
199         }\r
200 \r
201         #region General\r
202 \r
203         private void check_updateCheck_CheckedChanged(object sender, EventArgs e)\r
204         {\r
205             Properties.Settings.Default.updateStatus = check_updateCheck.Checked;\r
206         }\r
207 \r
208         private void drop_updateCheckDays_SelectedIndexChanged(object sender, EventArgs e)\r
209         {\r
210             switch (drop_updateCheckDays.SelectedIndex)\r
211             {\r
212                 case 0:\r
213                     Properties.Settings.Default.daysBetweenUpdateCheck = 1;\r
214                     break;\r
215                 case 1:\r
216                     Properties.Settings.Default.daysBetweenUpdateCheck = 7;\r
217                     break;\r
218                 case 2:\r
219                     Properties.Settings.Default.daysBetweenUpdateCheck = 30;\r
220                     break;\r
221             }\r
222         }\r
223 \r
224         private void check_tooltip_CheckedChanged(object sender, EventArgs e)\r
225         {\r
226             Properties.Settings.Default.tooltipEnable = check_tooltip.Checked;\r
227         }\r
228 \r
229         private void drp_completeOption_SelectedIndexChanged(object sender, EventArgs e)\r
230         {\r
231             Properties.Settings.Default.CompletionOption = drp_completeOption.Text;\r
232         }\r
233 \r
234         private void check_GrowlQueue_CheckedChanged(object sender, EventArgs e)\r
235         {\r
236             Properties.Settings.Default.growlQueue = check_GrowlQueue.Checked;\r
237         }\r
238 \r
239         private void check_growlEncode_CheckedChanged(object sender, EventArgs e)\r
240         {\r
241             Properties.Settings.Default.growlEncode = check_growlEncode.Checked;\r
242         }\r
243 \r
244         private void check_autoNaming_CheckedChanged(object sender, EventArgs e)\r
245         {\r
246             Properties.Settings.Default.autoNaming = check_autoNaming.Checked;\r
247         }\r
248 \r
249         private void txt_autoNameFormat_TextChanged(object sender, EventArgs e)\r
250         {\r
251             Properties.Settings.Default.autoNameFormat = txt_autoNameFormat.Text;\r
252         }\r
253 \r
254         private void btn_browse_Click(object sender, EventArgs e)\r
255         {\r
256             pathFinder.ShowDialog();\r
257             text_an_path.Text = pathFinder.SelectedPath;\r
258         }\r
259 \r
260         private void text_an_path_TextChanged(object sender, EventArgs e)\r
261         {\r
262             if (text_an_path.Text == string.Empty)\r
263             {\r
264                 Properties.Settings.Default.autoNamePath = string.Empty;\r
265                 text_an_path.Text = "Click 'Browse' to set the default location";\r
266             }\r
267             else\r
268                 Properties.Settings.Default.autoNamePath = text_an_path.Text;\r
269         }\r
270 \r
271         private void check_m4v_CheckedChanged(object sender, EventArgs e)\r
272         {\r
273             Properties.Settings.Default.useM4v = check_m4v.Checked;\r
274         }\r
275 \r
276         private void check_removeUnderscores_CheckedChanged(object sender, EventArgs e)\r
277         {\r
278             Properties.Settings.Default.AutoNameRemoveUnderscore = check_removeUnderscores.Checked;\r
279         }\r
280 \r
281         private void check_TitleCase_CheckedChanged(object sender, EventArgs e)\r
282         {\r
283             Properties.Settings.Default.AutoNameTitleCase = check_TitleCase.Checked;\r
284         }\r
285 \r
286         #endregion\r
287 \r
288         #region Picture\r
289 \r
290         private void btn_vlcPath_Click(object sender, EventArgs e)\r
291         {\r
292             openFile_vlc.ShowDialog();\r
293             if (openFile_vlc.FileName != string.Empty)\r
294                 txt_vlcPath.Text = openFile_vlc.FileName;\r
295         }\r
296 \r
297         private void txt_vlcPath_TextChanged(object sender, EventArgs e)\r
298         {\r
299             Properties.Settings.Default.VLC_Path = txt_vlcPath.Text;\r
300         }\r
301 \r
302         #endregion\r
303 \r
304         #region Audio and Subtitles\r
305 \r
306         private void drop_preferredLang_SelectedIndexChanged(object sender, EventArgs e)\r
307         {\r
308             Properties.Settings.Default.NativeLanguage = drop_preferredLang.SelectedItem.ToString();\r
309         }\r
310 \r
311         private void radio_dub_CheckedChanged(object sender, EventArgs e)\r
312         {\r
313             if (radio_dub.Checked)\r
314                 Properties.Settings.Default.DubMode = 1;\r
315         }\r
316 \r
317         private void radio_foreignAndSubs_CheckedChanged(object sender, EventArgs e)\r
318         {\r
319             if (radio_foreignAndSubs.Checked)\r
320                 Properties.Settings.Default.DubMode = 2;\r
321         }\r
322 \r
323         private void radio_preferredAudioAndSubs_CheckedChanged(object sender, EventArgs e)\r
324         {\r
325             if (radio_preferredAudioAndSubs.Checked)\r
326                 Properties.Settings.Default.DubMode = 3;\r
327         }\r
328 \r
329         private void check_AddCCTracks_CheckedChanged(object sender, EventArgs e)\r
330         {\r
331             Settings.Default.useClosedCaption = check_AddCCTracks.Checked;\r
332         }\r
333 \r
334         #endregion\r
335 \r
336         #region CLI\r
337 \r
338         private void drp_Priority_SelectedIndexChanged(object sender, EventArgs e)\r
339         {\r
340             Properties.Settings.Default.processPriority = drp_Priority.Text;\r
341         }\r
342 \r
343         private void check_preventSleep_CheckedChanged(object sender, EventArgs e)\r
344         {\r
345             Properties.Settings.Default.preventSleep = check_preventSleep.Checked;\r
346         }\r
347 \r
348         private void cb_logVerboseLvl_SelectedIndexChanged(object sender, EventArgs e)\r
349         {\r
350             Properties.Settings.Default.verboseLevel = cb_logVerboseLvl.SelectedIndex;\r
351         }\r
352 \r
353         private void check_saveLogWithVideo_CheckedChanged(object sender, EventArgs e)\r
354         {\r
355             Properties.Settings.Default.saveLogWithVideo = check_saveLogWithVideo.Checked;\r
356         }\r
357 \r
358         private void check_logsInSpecifiedLocation_CheckedChanged(object sender, EventArgs e)\r
359         {\r
360             Properties.Settings.Default.saveLogToSpecifiedPath = check_logsInSpecifiedLocation.Checked;\r
361         }\r
362 \r
363         private void btn_saveLog_Click(object sender, EventArgs e)\r
364         {\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
369         }\r
370 \r
371         private void text_logPath_TextChanged(object sender, EventArgs e)\r
372         {\r
373             Properties.Settings.Default.saveLogPath = text_logPath.Text;\r
374         }\r
375 \r
376         private void btn_viewLogs_Click(object sender, EventArgs e)\r
377         {\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
383             prc.Start();\r
384         }\r
385 \r
386         private void btn_clearLogs_Click(object sender, EventArgs e)\r
387         {\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
391             {\r
392                 Main.ClearLogs();\r
393                 MessageBox.Show(this, "HandBrake's Log file directory has been cleared!", "Notice", MessageBoxButtons.OK,\r
394                                 MessageBoxIcon.Information);\r
395             }\r
396         }\r
397 \r
398         private void check_clearOldLogs_CheckedChanged(object sender, EventArgs e)\r
399         {\r
400             Properties.Settings.Default.clearOldLogs = check_clearOldLogs.Checked;\r
401         }\r
402 \r
403         #endregion\r
404 \r
405         #region Advanced\r
406 \r
407         private void check_mainMinimize_CheckedChanged(object sender, EventArgs e)\r
408         {\r
409             Properties.Settings.Default.MainWindowMinimize = check_mainMinimize.Checked;\r
410             check_trayStatusAlerts.Enabled = check_mainMinimize.Checked;\r
411         }\r
412 \r
413         private void check_trayStatusAlerts_CheckedChanged(object sender, EventArgs e)\r
414         {\r
415             Properties.Settings.Default.trayIconAlerts = check_trayStatusAlerts.Checked;\r
416         }\r
417 \r
418         private void check_queryEditorTab_CheckedChanged(object sender, EventArgs e)\r
419         {\r
420             Properties.Settings.Default.QueryEditorTab = check_queryEditorTab.Checked;\r
421             check_promptOnUnmatchingQueries.Enabled = check_queryEditorTab.Checked;\r
422         }\r
423 \r
424         private void check_promptOnUnmatchingQueries_CheckedChanged(object sender, EventArgs e)\r
425         {\r
426             Properties.Settings.Default.PromptOnUnmatchingQueries = check_promptOnUnmatchingQueries.Checked;\r
427         }\r
428 \r
429         private void check_disablePresetNotification_CheckedChanged(object sender, EventArgs e)\r
430         {\r
431             Properties.Settings.Default.presetNotification = check_disablePresetNotification.Checked;\r
432         }\r
433 \r
434         private void check_showCliForInGUIEncode_CheckedChanged(object sender, EventArgs e)\r
435         {\r
436             Properties.Settings.Default.showCliForInGuiEncodeStatus = check_showCliForInGUIEncode.Checked;\r
437         }\r
438 \r
439         private void drop_previewScanCount_SelectedIndexChanged(object sender, EventArgs e)\r
440         {\r
441             Properties.Settings.Default.previewScanCount = int.Parse(drop_previewScanCount.SelectedItem.ToString());\r
442         }\r
443 \r
444         private void x264step_SelectedIndexChanged(object sender, EventArgs e)\r
445         {\r
446             switch (drop_x264step.SelectedIndex)\r
447             {\r
448                 case 0:\r
449                     Properties.Settings.Default.x264cqstep = 1.0;\r
450                     break;\r
451                 case 1:\r
452                     Properties.Settings.Default.x264cqstep = 0.50;\r
453                     break;\r
454                 case 2:\r
455                     Properties.Settings.Default.x264cqstep = 0.25;\r
456                     break;\r
457                 case 3:\r
458                     Properties.Settings.Default.x264cqstep = 0.20;\r
459                     break;\r
460             }\r
461             mainWindow.setQualityFromSlider();\r
462         }\r
463 \r
464         private void check_dvdnav_CheckedChanged(object sender, EventArgs e)\r
465         {\r
466             Properties.Settings.Default.noDvdNav = check_dvdnav.Checked;\r
467         }\r
468 \r
469         #endregion\r
470 \r
471         private void btn_close_Click(object sender, EventArgs e)\r
472         {\r
473             Properties.Settings.Default.Save(); // Small hack for Vista. Seems to work fine on XP without this\r
474             UpdateApplicationServicesSettings();\r
475 \r
476             this.Close();\r
477         }\r
478 \r
479         /// <summary>\r
480         /// Initialize App Services\r
481         /// </summary>\r
482         private static void UpdateApplicationServicesSettings()\r
483         {\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
487                 versionId,\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
499         }\r
500     }\r
501 }