OSDN Git Service

WinGui: Bug Fixes
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain.cs
1 /*  frmMain.cs $\r
2         \r
3            This file is part of the HandBrake source code.\r
4            Homepage: <http://handbrake.fr/>.\r
5            It may be used under the terms of the GNU General Public License. */\r
6 \r
7 using System;\r
8 using System.Collections;\r
9 using System.Drawing;\r
10 using System.Text;\r
11 using System.Windows.Forms;\r
12 using System.IO;\r
13 using System.Diagnostics;\r
14 using System.Threading;\r
15 using System.Runtime.InteropServices;\r
16 using System.Globalization;\r
17 using System.Text.RegularExpressions;\r
18 \r
19 namespace Handbrake\r
20 {\r
21     public partial class frmMain : Form\r
22     {\r
23         // -------------------------------------------------------------- \r
24         // Applicaiton Startup\r
25         // --------------------------------------------------------------\r
26 \r
27         #region Application Startup\r
28 \r
29         // Declarations\r
30         private Process hbProc;\r
31         private Parsing.DVD thisDVD;\r
32         private frmQueue queueWindow = new frmQueue();\r
33         private delegate void updateStatusChanger();\r
34         Functions.Common hb_common_func = new Functions.Common();\r
35         Functions.x264Panel x264PanelFunctions = new Functions.x264Panel();\r
36 \r
37         public frmMain()\r
38         {\r
39             // Load the splash screen in this thread\r
40             Form splash = new frmSplashScreen();\r
41             splash.Show();\r
42 \r
43             //Create a label that can be updated from the parent thread.\r
44             Label lblStatus = new Label();\r
45             lblStatus.Size = new Size(250, 20);\r
46             lblStatus.Location = new Point(10, 280);\r
47             splash.Controls.Add(lblStatus);\r
48 \r
49             //Fire a thread to wait for 2 seconds.  The splash screen will exit when the time expires\r
50             Thread timer = new Thread(splashTimer);\r
51             timer.Start();\r
52 \r
53             InitializeComponent();\r
54 \r
55             // show the form, but leave disabled until preloading is complete then show the main form\r
56             this.Enabled = false;\r
57             this.Show();\r
58             // Forces frmMain to draw\r
59             Application.DoEvents();\r
60 \r
61             // update the status\r
62             if (Properties.Settings.Default.updateStatus == "Checked")\r
63             {\r
64                 lblStatus.Text = "Checking for updates ...";\r
65                 Application.DoEvents();\r
66                 Thread updateCheckThread = new Thread(startupUpdateCheck);\r
67                 updateCheckThread.Start();\r
68                 Thread.Sleep(100);\r
69             }\r
70 \r
71             //H264 Panel Loading\r
72             lblStatus.Text = "Loading H264 Panel ...";\r
73             Application.DoEvents();\r
74             setupH264Panel();\r
75             Thread.Sleep(100);\r
76 \r
77             // Load the presets\r
78             // Set some defaults for the dropdown menus. Just incase the normal or user presets dont load.\r
79             lblStatus.Text = "Loading Presets Bar ...";\r
80             Application.DoEvents();\r
81             drp_crop.SelectedIndex = 0;\r
82             loadPresetPanel();\r
83             Thread.Sleep(200);\r
84 \r
85             // Now load the users default if required. (Will overide the above setting)\r
86             lblStatus.Text = "Loading Preset Settings ...";\r
87             Application.DoEvents();\r
88             if (Properties.Settings.Default.defaultSettings == "Checked")\r
89                 loadUserDefaults();\r
90             else\r
91                 loadNormalPreset();\r
92             Thread.Sleep(100);\r
93 \r
94             // Enable or disable tooltips\r
95             if (Properties.Settings.Default.tooltipEnable == "Checked")\r
96             {\r
97                 lblStatus.Text = "Loading Tooltips ...";\r
98                 Application.DoEvents();\r
99                 ToolTip.Active = true;\r
100                 Thread.Sleep(100);\r
101             }\r
102 \r
103             //Finished Loading\r
104             lblStatus.Text = "Loading Complete!";\r
105             Application.DoEvents();\r
106             Thread.Sleep(200);\r
107 \r
108             // Wait until splash screen is done\r
109             while (timer.IsAlive)\r
110             { Thread.Sleep(100); }\r
111 \r
112             //Close the splash screen\r
113             splash.Close();\r
114             splash.Dispose();\r
115 \r
116             // Turn the interface back to the user\r
117             this.Enabled = true;\r
118         }\r
119 \r
120         // Startup Functions\r
121         private void startupUpdateCheck()\r
122         {\r
123             try\r
124             {\r
125                 if (this.InvokeRequired)\r
126                 {\r
127                     this.BeginInvoke(new updateStatusChanger(startupUpdateCheck));\r
128                     return;\r
129                 }\r
130 \r
131                 Boolean update = hb_common_func.updateCheck(false);\r
132                 if (update == true)\r
133                 {\r
134                     frmUpdater updateWindow = new frmUpdater();\r
135                     updateWindow.Show();\r
136                 }\r
137             }\r
138             catch (Exception)\r
139             {\r
140                 // Don't want to have an exception messagebox displayed behind the splash screen,\r
141                 // So, exception is ignored. Lets hope there are no bugs here :)\r
142             }\r
143         }\r
144         private void splashTimer(object sender)\r
145         {\r
146             Thread.Sleep(1000);  //sit for 1 seconds then exit\r
147         }\r
148         private void showSplash(object sender)\r
149         {\r
150             Form splash = new frmSplashScreen();\r
151             splash.Show();\r
152         }\r
153         private void setupH264Panel()\r
154         {\r
155             /*Set opt widget values here*/\r
156 \r
157             /*B-Frames fX264optBframesPopUp*/\r
158             int i;\r
159             drop_bFrames.Items.Clear();\r
160             drop_bFrames.Items.Add("Default (0)");\r
161             drop_bFrames.Text = "Default (0)";\r
162 \r
163             for (i = 0; i < 17; i++)\r
164             {\r
165                 drop_bFrames.Items.Add(i.ToString());\r
166             }\r
167 \r
168             /*Reference Frames fX264optRefPopUp*/\r
169             drop_refFrames.Items.Clear();\r
170             drop_refFrames.Items.Add("Default (1)");\r
171             drop_refFrames.Text = "Default (1)";\r
172             for (i = 0; i < 17; i++)\r
173             {\r
174                 drop_refFrames.Items.Add(i.ToString());\r
175             }\r
176 \r
177             /*No Fast P-Skip fX264optNfpskipSwitch BOOLEAN*/\r
178             check_noFastPSkip.CheckState = CheckState.Unchecked;\r
179 \r
180             /*No Dict Decimate fX264optNodctdcmtSwitch BOOLEAN*/\r
181             check_noDCTDecimate.CheckState = CheckState.Unchecked;\r
182 \r
183 \r
184             /*Sub Me fX264optSubmePopUp*/\r
185             drop_subpixelMotionEstimation.Items.Clear();\r
186             drop_subpixelMotionEstimation.Items.Add("Default (4)");\r
187             drop_subpixelMotionEstimation.Text = "Default (4)";\r
188             for (i = 0; i < 8; i++)\r
189             {\r
190                 drop_subpixelMotionEstimation.Items.Add(i.ToString());\r
191             }\r
192 \r
193             /*Trellis fX264optTrellisPopUp*/\r
194             drop_trellis.Items.Clear();\r
195             drop_trellis.Items.Add("Default (0)");\r
196             drop_trellis.Text = "Default (0)";\r
197             for (i = 0; i < 3; i++)\r
198             {\r
199                 drop_trellis.Items.Add(i.ToString());\r
200             }\r
201 \r
202             /*Mixed-references fX264optMixedRefsSwitch BOOLEAN*/\r
203             check_mixedReferences.CheckState = CheckState.Unchecked;\r
204 \r
205             /*Motion Estimation fX264optMotionEstPopUp*/\r
206             drop_MotionEstimationMethod.Items.Clear();\r
207             drop_MotionEstimationMethod.Items.Add("Default (Hexagon)");\r
208             drop_MotionEstimationMethod.Items.Add("Diamond");\r
209             drop_MotionEstimationMethod.Items.Add("Hexagon");\r
210             drop_MotionEstimationMethod.Items.Add("Uneven Multi-Hexagon");\r
211             drop_MotionEstimationMethod.Items.Add("Exhaustive");\r
212             drop_MotionEstimationMethod.Text = "Default (Hexagon)";\r
213 \r
214             /*Motion Estimation range fX264optMERangePopUp*/\r
215             drop_MotionEstimationRange.Items.Clear();\r
216             drop_MotionEstimationRange.Items.Add("Default (16)");\r
217             drop_MotionEstimationRange.Text = "Default (16)";\r
218             for (i = 4; i < 65; i++)\r
219             {\r
220                 drop_MotionEstimationRange.Items.Add(i.ToString());\r
221             }\r
222 \r
223             /*Weighted B-Frame Prediction fX264optWeightBSwitch BOOLEAN*/\r
224             check_weightedBFrames.CheckState = CheckState.Unchecked;\r
225 \r
226             /*B-Frame Rate Distortion Optimization fX264optBRDOSwitch BOOLEAN*/\r
227             check_bFrameDistortion.CheckState = CheckState.Unchecked;\r
228 \r
229             /*B-frame Pyramids fX264optBPyramidSwitch BOOLEAN*/\r
230             check_pyrmidalBFrames.CheckState = CheckState.Unchecked;\r
231 \r
232             /*Bidirectional Motion Estimation Refinement fX264optBiMESwitch BOOLEAN*/\r
233             check_BidirectionalRefinement.CheckState = CheckState.Unchecked;\r
234 \r
235             /*Direct B-Frame Prediction Mode fX264optDirectPredPopUp*/\r
236             drop_directPrediction.Items.Clear();\r
237             drop_directPrediction.Items.Add("Default (Spatial)");\r
238             drop_directPrediction.Items.Add("None");\r
239             drop_directPrediction.Items.Add("Spatial");\r
240             drop_directPrediction.Items.Add("Temporal");\r
241             drop_directPrediction.Items.Add("Automatic");\r
242             drop_directPrediction.Text = "Default (Spatial)";\r
243 \r
244             /*Alpha Deblock*/\r
245             drop_deblockAlpha.Items.Clear();\r
246             drop_deblockAlpha.Items.Add("Default (0)");\r
247             drop_deblockAlpha.Text = "Default (0)";\r
248             for (i = -6; i < 7; i++)\r
249             {\r
250                 drop_deblockAlpha.Items.Add(i.ToString());\r
251             }\r
252 \r
253             /*Beta Deblock*/\r
254             drop_deblockBeta.Items.Clear();\r
255             drop_deblockBeta.Items.Add("Default (0)");\r
256             drop_deblockBeta.Text = "Default (0)";\r
257             for (i = -6; i < 7; i++)\r
258             {\r
259                 drop_deblockBeta.Items.Add(i.ToString());\r
260             }\r
261 \r
262             /* Analysis fX264optAnalysePopUp */\r
263             drop_analysis.Items.Clear();\r
264             drop_analysis.Items.Add("Default (some)"); /* 0=default */\r
265             drop_analysis.Items.Add("None");  /* 1=none */\r
266             drop_analysis.Items.Add("All"); /* 2=all */\r
267             drop_analysis.Text = "Default (some)";\r
268 \r
269             /* 8x8 DCT fX264op8x8dctSwitch */\r
270             check_8x8DCT.CheckState = CheckState.Unchecked;\r
271 \r
272             /* CABAC fX264opCabacSwitch */\r
273             check_Cabac.CheckState = CheckState.Checked;\r
274 \r
275             /* Standardize the option string */\r
276             rtf_x264Query.Text = "";\r
277         }\r
278         private void loadUserDefaults()\r
279         {\r
280             string userDefaults = Properties.Settings.Default.defaultUserSettings;\r
281             try\r
282             {\r
283                 // Send the query from the file to the Query Parser class Then load the preset\r
284                 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(userDefaults);\r
285                 hb_common_func.presetLoader(this, presetQuery, "User Defaults ");\r
286             }\r
287             catch (Exception)\r
288             {\r
289                 // Do Nothing. We don't want an error appearing behind the splash screen.\r
290             }\r
291         }\r
292 \r
293         #endregion\r
294 \r
295         // -------------------------------------------------------------- \r
296         // The Applications Main Menu\r
297         // -------------------------------------------------------------- \r
298 \r
299         #region File Menu\r
300 \r
301         private void mnu_open_Click(object sender, EventArgs e)\r
302         {\r
303             string filename;\r
304             File_Open.ShowDialog();\r
305             filename = File_Open.FileName;\r
306 \r
307             if (filename != "")\r
308             {\r
309                 try\r
310                 {\r
311                     // Create StreamReader & open file\r
312                     StreamReader line = new StreamReader(filename);\r
313 \r
314                     // Send the query from the file to the Query Parser class then load the preset\r
315                     Functions.QueryParser presetQuery = Functions.QueryParser.Parse(line.ReadLine());\r
316                     hb_common_func.presetLoader(this, presetQuery, filename);\r
317 \r
318                     // Close the stream\r
319                     line.Close();\r
320 \r
321                     Form preset = new frmAddPreset(this);\r
322                     preset.ShowDialog();\r
323 \r
324                 }\r
325                 catch (Exception exc)\r
326                 {\r
327                     MessageBox.Show("Unable to load profile. \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
328                 }\r
329             }\r
330         }\r
331         private void mnu_exit_Click(object sender, EventArgs e)\r
332         {\r
333             Application.Exit();\r
334         }\r
335 \r
336         #endregion\r
337 \r
338         #region Tools Menu\r
339 \r
340         private void mnu_encode_Click(object sender, EventArgs e)\r
341         {\r
342             showQueue();\r
343         }\r
344         private void mnu_viewDVDdata_Click(object sender, EventArgs e)\r
345         {\r
346             frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
347             dvdInfoWindow.Show();\r
348         }\r
349         private void mnu_options_Click(object sender, EventArgs e)\r
350         {\r
351             Form Options = new frmOptions();\r
352             Options.ShowDialog();\r
353         }\r
354 \r
355         #endregion\r
356 \r
357         #region Presets Menu\r
358 \r
359         private void mnu_presetReset_Click(object sender, EventArgs e)\r
360         {\r
361             treeView_presets.Nodes.Clear();\r
362             grabCLIPresets();\r
363             loadPresetPanel();\r
364             if (treeView_presets.Nodes.Count == 0)\r
365                 MessageBox.Show("Unable to load the presets.dat file. Please select \"Update Built-in Presets\" from the Presets Menu \nMake sure you are running the program in Admin mode if running on Vista. See Windows FAQ for details!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
366             else\r
367                 MessageBox.Show("Presets have been updated!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
368         }\r
369         private void mnu_SelectDefault_Click(object sender, EventArgs e)\r
370         {\r
371             loadNormalPreset();\r
372         }\r
373 \r
374         #endregion\r
375 \r
376         #region Help Menu\r
377 \r
378         private void mnu_wiki_Click(object sender, EventArgs e)\r
379         {\r
380             Process.Start("http://handbrake.fr/trac");\r
381         }\r
382         private void mnu_faq_Click(object sender, EventArgs e)\r
383         {\r
384             Process.Start("http://handbrake.fr/trac/wiki/SupportFAQ");\r
385         }\r
386         private void mnu_onlineDocs_Click(object sender, EventArgs e)\r
387         {\r
388             Process.Start("http://handbrake.fr/?article=documentation");\r
389         }\r
390         private void mnu_handbrake_home_Click(object sender, EventArgs e)\r
391         {\r
392             Process.Start("http://handbrake.fr");\r
393         }\r
394         private void mnu_UpdateCheck_Click(object sender, EventArgs e)\r
395         {\r
396             Boolean update = hb_common_func.updateCheck(true);\r
397             if (update == true)\r
398             {\r
399                 frmUpdater updateWindow = new frmUpdater();\r
400                 updateWindow.Show();\r
401             }\r
402             else\r
403                 MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
404         }\r
405         private void mnu_about_Click(object sender, EventArgs e)\r
406         {\r
407             Form About = new frmAbout();\r
408             About.ShowDialog();\r
409         }\r
410 \r
411         #endregion\r
412 \r
413         // -------------------------------------------------------------- \r
414         // MainWindow Components, Actions and Functions\r
415         // --------------------------------------------------------------\r
416 \r
417         #region Actions\r
418 \r
419         // ToolBar\r
420         private void btn_start_Click(object sender, EventArgs e)\r
421         {\r
422             if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
423                 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
424             else\r
425             {\r
426                 String query;\r
427                 if (rtf_query.Text != "")\r
428                     query = rtf_query.Text;\r
429                 else\r
430                     query = hb_common_func.GenerateTheQuery(this);\r
431 \r
432                 ThreadPool.QueueUserWorkItem(procMonitor, query);\r
433                 lbl_encode.Visible = true;\r
434                 lbl_encode.Text = "Encoding in Progress";\r
435             }\r
436         }\r
437         private void btn_add2Queue_Click(object sender, EventArgs e)\r
438         {\r
439             if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
440                 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
441             else\r
442             {\r
443                 String query;\r
444                 if (rtf_query.Text != "")\r
445                     query = rtf_query.Text;\r
446                 else\r
447                     query = hb_common_func.GenerateTheQuery(this);\r
448 \r
449                 queueWindow.list_queue.Items.Add(query);\r
450                 queueWindow.Show();\r
451             }\r
452         }\r
453         private void btn_showQueue_Click(object sender, EventArgs e)\r
454         {\r
455             showQueue();\r
456         }\r
457         private void btn_ActivityWindow_Click(object sender, EventArgs e)\r
458         {\r
459             Form ActivityWindow = new frmActivityWindow();\r
460             ActivityWindow.ShowDialog();\r
461         }\r
462 \r
463         //Source\r
464         private void btn_Browse_Click(object sender, EventArgs e)\r
465         {\r
466             String filename = "";\r
467             text_source.Text = "";\r
468             frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
469 \r
470             if (check_fileMode.Checked)\r
471             {\r
472                 ISO_Open.ShowDialog();\r
473                 filename = ISO_Open.FileName;\r
474             }\r
475             else\r
476             {\r
477                 DVD_Open.ShowDialog();\r
478                 filename = DVD_Open.SelectedPath;\r
479             }\r
480 \r
481             if (filename.StartsWith("\\"))\r
482                 MessageBox.Show("Sorry, HandBrake does not support UNC file paths. \nTry mounting the share as a network drive in My Computer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
483             else\r
484             {\r
485                 if (filename != "")\r
486                 {\r
487                     Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow);\r
488                     text_source.Text = filename;\r
489                     frmRD.ShowDialog();\r
490                 }\r
491                 else\r
492                     text_source.Text = "Click 'Browse' to continue";\r
493 \r
494                 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.\r
495                 if (drp_dvdtitle.Items.Count == 0)\r
496                     MessageBox.Show("No Title(s) found. Please make sure you have selected a valid, non-copy protected source. Please refer to the FAQ (see Help Menu).", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
497 \r
498             }\r
499         }\r
500         private void drp_dvdtitle_Click(object sender, EventArgs e)\r
501         {\r
502             if ((drp_dvdtitle.Items.Count == 1) && ((string)drp_dvdtitle.Items[0] == "Automatic"))\r
503                 MessageBox.Show("There are no titles to select. Please scan the DVD by clicking the 'browse' button above before trying to select a title.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
504         }\r
505         private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)\r
506         {\r
507             // Reset some values on the form\r
508             lbl_Aspect.Text = "Select a Title";\r
509             lbl_RecomendedCrop.Text = "Select a Title";\r
510             drop_chapterStart.Items.Clear();\r
511             drop_chapterFinish.Items.Clear();\r
512 \r
513             // If the dropdown is set to automatic nothing else needs to be done.\r
514             // Otheriwse if its not, title data has to be loased from parsing.\r
515             if (drp_dvdtitle.Text != "Automatic")\r
516             {\r
517                 Parsing.Title selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;\r
518 \r
519                 // Set the Aspect Ratio\r
520                 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();\r
521 \r
522                 // Set the Recommended Cropping values\r
523                 lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]);\r
524 \r
525                 // Populate the Start chapter Dropdown\r
526                 drop_chapterStart.Items.Clear();\r
527                 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());\r
528                 if (drop_chapterStart.Items.Count > 0)\r
529                     drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();\r
530 \r
531                 // Populate the Final Chapter Dropdown\r
532                 drop_chapterFinish.Items.Clear();\r
533                 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());\r
534                 if (drop_chapterFinish.Items.Count > 0)\r
535                     drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();\r
536 \r
537                 // Populate the Audio Channels Dropdown\r
538                 drp_track1Audio.Items.Clear();\r
539                 drp_track1Audio.Items.Add("Automatic");\r
540                 drp_track1Audio.Items.Add("None");\r
541                 drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
542                 drp_track1Audio.SelectedIndex = 0;\r
543 \r
544                 drp_track2Audio.Items.Clear();\r
545                 drp_track2Audio.Items.Add("None");\r
546                 drp_track2Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
547                 drp_track2Audio.SelectedIndex = 0;\r
548 \r
549                 drp_track3Audio.Items.Clear();\r
550                 drp_track3Audio.Items.Add("None");\r
551                 drp_track3Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
552                 drp_track3Audio.SelectedIndex = 0;\r
553 \r
554                 drp_track4Audio.Items.Clear();\r
555                 drp_track4Audio.Items.Add("None");\r
556                 drp_track4Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
557                 drp_track4Audio.SelectedIndex = 0;\r
558 \r
559                 // Populate the Subtitles dropdown\r
560                 drp_subtitle.Items.Clear();\r
561                 drp_subtitle.Items.Add("None");\r
562                 drp_subtitle.Items.Add("Autoselect");\r
563                 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());\r
564                 if (drp_subtitle.Items.Count > 0)\r
565                     drp_subtitle.Text = drp_subtitle.Items[0].ToString();\r
566 \r
567             }\r
568 \r
569             // Run the autoName & chapterNaming functions\r
570             hb_common_func.autoName(this);\r
571             hb_common_func.chapterNaming(this);\r
572         }\r
573         private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)\r
574         {\r
575             drop_chapterStart.BackColor = Color.White;\r
576             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
577             {\r
578                 try\r
579                 {\r
580                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
581                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
582 \r
583                     if (chapterFinish < chapterStart)\r
584                         drop_chapterStart.BackColor = Color.LightCoral;\r
585                 }\r
586                 catch (Exception)\r
587                 {\r
588                     drop_chapterStart.BackColor = Color.LightCoral;\r
589                 }\r
590             }\r
591             // Run the Autonaming function\r
592             hb_common_func.autoName(this);\r
593         }\r
594         private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)\r
595         {\r
596             drop_chapterFinish.BackColor = Color.White;\r
597             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
598             {\r
599                 try\r
600                 {\r
601                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
602                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
603 \r
604                     if (chapterFinish < chapterStart)\r
605                         drop_chapterFinish.BackColor = Color.LightCoral;\r
606                 }\r
607                 catch (Exception)\r
608                 {\r
609                     drop_chapterFinish.BackColor = Color.LightCoral;\r
610                 }\r
611             }\r
612 \r
613             // Run the Autonaming function\r
614             hb_common_func.autoName(this);\r
615         }\r
616 \r
617         //Destination\r
618         private void btn_destBrowse_Click(object sender, EventArgs e)\r
619         {\r
620             // This removes the file extension from the filename box on the save file dialog.\r
621             // It's daft but some users don't realise that typing an extension overrides the dropdown extension selected.\r
622             DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", "");\r
623 \r
624             // Show the dialog and set the main form file path\r
625             DVD_Save.ShowDialog();\r
626             if (DVD_Save.FileName.StartsWith("\\"))\r
627                 MessageBox.Show("Sorry, HandBrake does not support UNC file paths. \nTry mounting the share as a network drive in My Computer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
628             else\r
629             {\r
630                 setAudioByContainer(DVD_Save.FileName);\r
631 \r
632                 text_destination.Text = DVD_Save.FileName;\r
633 \r
634                 // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)\r
635                 if (Check_ChapterMarkers.Checked)\r
636                     text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v");\r
637             }\r
638         }\r
639         private void text_destination_TextChanged(object sender, EventArgs e)\r
640         {\r
641             setAudioByContainer(text_destination.Text);\r
642             setVideoByContainer(text_destination.Text);\r
643         }\r
644 \r
645         // Output Settings\r
646         private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)\r
647         {\r
648             if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))\r
649             {\r
650                 check_largeFile.Enabled = true;\r
651                 check_optimiseMP4.Enabled = true;\r
652             }\r
653             else\r
654             {\r
655                 check_largeFile.Enabled = false;\r
656                 check_optimiseMP4.Enabled = false;\r
657                 check_largeFile.Checked = false;\r
658                 check_optimiseMP4.Checked = false;\r
659             }\r
660 \r
661 \r
662             //Turn off some options which are H.264 only when the user selects a non h.264 encoder\r
663             if (drp_videoEncoder.Text.Contains("H.264"))\r
664             {\r
665                 if (check_2PassEncode.CheckState == CheckState.Checked)\r
666                     check_turbo.Enabled = true;\r
667 \r
668                 h264Tab.Enabled = true;\r
669                 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))\r
670                     check_iPodAtom.Enabled = true;\r
671                 else\r
672                     check_iPodAtom.Enabled = false;\r
673                 if (!drp_anamorphic.Items.Contains("Loose"))\r
674                     drp_anamorphic.Items.Add("Loose");\r
675             }\r
676             else\r
677             {\r
678                 check_turbo.CheckState = CheckState.Unchecked;\r
679                 check_turbo.Enabled = false;\r
680                 h264Tab.Enabled = false;\r
681                 rtf_x264Query.Text = "";\r
682                 check_iPodAtom.Enabled = false;\r
683                 check_iPodAtom.Checked = false;\r
684                 if (drp_anamorphic.Items.Count == 3)\r
685                     drp_anamorphic.Items.RemoveAt(2);\r
686             }\r
687 \r
688         }\r
689 \r
690         //Video Tab\r
691         private void text_bitrate_TextChanged(object sender, EventArgs e)\r
692         {\r
693             text_filesize.Text = "";\r
694             slider_videoQuality.Value = 0;\r
695             SliderValue.Text = "0%";\r
696         }\r
697         private void text_filesize_TextChanged(object sender, EventArgs e)\r
698         {\r
699             text_bitrate.Text = "";\r
700             slider_videoQuality.Value = 0;\r
701             SliderValue.Text = "0%";\r
702         }\r
703         private void slider_videoQuality_Scroll(object sender, EventArgs e)\r
704         {\r
705             SliderValue.Text = slider_videoQuality.Value.ToString() + "%";\r
706             text_bitrate.Text = "";\r
707             text_filesize.Text = "";\r
708         }\r
709         private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)\r
710         {\r
711             if (check_2PassEncode.CheckState.ToString() == "Checked")\r
712             {\r
713                 if (drp_videoEncoder.Text.Contains("H.264"))\r
714                     check_turbo.Enabled = true;\r
715             }\r
716             else\r
717             {\r
718                 check_turbo.Enabled = false;\r
719                 check_turbo.CheckState = CheckState.Unchecked;\r
720             }\r
721         }\r
722 \r
723         //Picture Tab\r
724         private void text_width_TextChanged(object sender, EventArgs e)\r
725         {\r
726             try\r
727             {\r
728                 if ((int.Parse(text_width.Text) % 16) != 0)\r
729                     text_width.BackColor = Color.LightCoral;\r
730                 else\r
731                     text_width.BackColor = Color.LightGreen;\r
732 \r
733 \r
734                 if ((lbl_Aspect.Text != "Select a Title") && (drp_crop.SelectedIndex == 2))\r
735                 {\r
736                     double height = int.Parse(text_width.Text) / double.Parse(lbl_Aspect.Text);\r
737                     double mod16 = height % 16;\r
738                     height = height - mod16;\r
739 \r
740                     if (text_width.Text == "")\r
741                     {\r
742                         text_height.Text = "";\r
743                         text_width.BackColor = Color.White;\r
744                     }\r
745                     else\r
746                         text_height.Text = height.ToString();\r
747                 }\r
748             }\r
749             catch (Exception)\r
750             {\r
751                 // No need to throw an error here.\r
752             }\r
753         }\r
754         private void text_height_TextChanged(object sender, EventArgs e)\r
755         {\r
756             try\r
757             {\r
758                 if ((int.Parse(text_height.Text) % 16) != 0)\r
759                     text_height.BackColor = Color.LightCoral;\r
760                 else\r
761                     text_height.BackColor = Color.LightGreen;\r
762             }\r
763             catch (Exception)\r
764             {\r
765                 // No need to alert the user.\r
766             }\r
767         }\r
768         private void drp_crop_SelectedIndexChanged(object sender, EventArgs e)\r
769         {\r
770             if ((string)drp_crop.SelectedItem == "Custom")\r
771             {\r
772                 text_left.Enabled = true;\r
773                 text_right.Enabled = true;\r
774                 text_top.Enabled = true;\r
775                 text_bottom.Enabled = true;\r
776                 text_left.Text = "0";\r
777                 text_right.Text = "0";\r
778                 text_top.Text = "0";\r
779                 text_bottom.Text = "0";\r
780             }\r
781 \r
782             if ((string)drp_crop.SelectedItem == "Automatic")\r
783             {\r
784                 text_left.Enabled = false;\r
785                 text_right.Enabled = false;\r
786                 text_top.Enabled = false;\r
787                 text_bottom.Enabled = false;\r
788 \r
789                 if (lbl_RecomendedCrop.Text != "Select a Title")\r
790                 {\r
791                     string[] temp = new string[4];\r
792                     temp = lbl_RecomendedCrop.Text.Split('/');\r
793                     text_left.Text = temp[2];\r
794                     text_right.Text = temp[3];\r
795                     text_top.Text = temp[0];\r
796                     text_bottom.Text = temp[1];\r
797                 }\r
798                 else\r
799                 {\r
800                     text_left.Text = "";\r
801                     text_right.Text = "";\r
802                     text_top.Text = "";\r
803                     text_bottom.Text = "";\r
804                 }\r
805             }\r
806 \r
807             if ((string)drp_crop.SelectedItem == "No Crop")\r
808             {\r
809                 text_left.Enabled = false;\r
810                 text_right.Enabled = false;\r
811                 text_top.Enabled = false;\r
812                 text_bottom.Enabled = false;\r
813                 text_left.Text = "0";\r
814                 text_right.Text = "0";\r
815                 text_top.Text = "0";\r
816                 text_bottom.Text = "0";\r
817             }\r
818         }\r
819         private void check_vfr_CheckedChanged(object sender, EventArgs e)\r
820         {\r
821             if (check_vfr.CheckState == CheckState.Checked)\r
822             {\r
823                 check_detelecine.Enabled = false;\r
824                 check_detelecine.CheckState = CheckState.Checked;\r
825                 drp_videoFramerate.Enabled = false;\r
826                 drp_videoFramerate.SelectedItem = "29.97";\r
827                 lbl_vfr.Visible = true;\r
828             }\r
829             else\r
830             {\r
831                 check_detelecine.Enabled = true;\r
832                 drp_videoFramerate.Enabled = true;\r
833                 drp_videoFramerate.SelectedItem = "Automatic";\r
834                 lbl_vfr.Visible = false;\r
835             }\r
836         }\r
837         private void drp_anamorphic_SelectedIndexChanged(object sender, EventArgs e)\r
838         {\r
839             if (drp_anamorphic.SelectedIndex == 1)\r
840             {\r
841                 text_height.BackColor = Color.LightGray;\r
842                 text_width.BackColor = Color.LightGray;\r
843                 text_height.Text = "";\r
844                 text_width.Text = "";\r
845                 text_height.Enabled = false;\r
846                 text_width.Enabled = false;\r
847             }\r
848 \r
849             if (drp_anamorphic.SelectedIndex == 2)\r
850             {\r
851                 text_height.Text = "";\r
852                 text_height.Enabled = false;\r
853                 text_height.BackColor = Color.LightGray;\r
854 \r
855                 text_width.Enabled = true;\r
856                 text_width.BackColor = Color.White;\r
857             }\r
858 \r
859             if (drp_anamorphic.SelectedIndex == 0)\r
860             {\r
861                 text_height.BackColor = Color.White;\r
862                 text_width.BackColor = Color.White;\r
863                 text_height.Enabled = true;\r
864                 text_width.Enabled = true;\r
865             }\r
866         }\r
867 \r
868         // Audio Tab\r
869         private void drp_track2Audio_SelectedIndexChanged(object sender, EventArgs e)\r
870         {\r
871             if (drp_track2Audio.SelectedItem.Equals("None"))\r
872             {\r
873                 drp_audbit_2.Enabled = false;\r
874                 drp_audenc_2.Enabled = false;\r
875                 drp_audsr_2.Enabled = false;\r
876                 drp_audmix_2.Enabled = false;\r
877                 trackBar2.Enabled = false;\r
878                 drp_audbit_2.Text = "";\r
879                 drp_audenc_2.Text = "";\r
880                 drp_audsr_2.Text = "";\r
881                 drp_audmix_2.Text = "Automatic";\r
882                 trackBar2.Value = 0;\r
883 \r
884                 // Disable the 3rd Track.\r
885                 drp_track3Audio.Enabled = false;\r
886                 drp_track3Audio.Text = "None";\r
887                 drp_audbit_3.Text = "";\r
888                 drp_audenc_3.Text = "";\r
889                 drp_audsr_3.Text = "";\r
890                 drp_audmix_3.Text = "Automatic";\r
891                 trackBar3.Value = 0;\r
892             }\r
893             else\r
894             {\r
895                 drp_audbit_2.Enabled = true;\r
896                 drp_audenc_2.Enabled = true;\r
897                 drp_audsr_2.Enabled = true;\r
898                 drp_audmix_2.Enabled = true;\r
899                 trackBar2.Enabled = true;\r
900                 drp_audbit_2.Text = "160";\r
901                 drp_audenc_2.Text = "AAC";\r
902                 drp_audsr_2.Text = "48";\r
903                 drp_audmix_2.Text = "Automatic";\r
904 \r
905                 // Enable the 3rd Track.\r
906                 drp_track3Audio.Enabled = true;\r
907                 drp_audbit_3.Text = "";\r
908                 drp_audenc_3.Text = "";\r
909                 drp_audsr_3.Text = "";\r
910                 drp_audmix_3.Text = "Automatic";\r
911             }\r
912         }\r
913         private void drp_track3Audio_SelectedIndexChanged(object sender, EventArgs e)\r
914         {\r
915             if (drp_track3Audio.SelectedItem.Equals("None"))\r
916             {\r
917                 drp_audbit_3.Enabled = false;\r
918                 drp_audenc_3.Enabled = false;\r
919                 drp_audsr_3.Enabled = false;\r
920                 drp_audmix_3.Enabled = false;\r
921                 trackBar3.Enabled = false;\r
922                 drp_audbit_3.Text = "";\r
923                 drp_audenc_3.Text = "";\r
924                 drp_audsr_3.Text = "";\r
925                 drp_audmix_3.Text = "Automatic";\r
926                 trackBar3.Value = 0;\r
927 \r
928                 // Disable the 4th Track.\r
929                 drp_track4Audio.Enabled = false;\r
930                 drp_track4Audio.Text = "None";\r
931                 drp_audbit_4.Text = "";\r
932                 drp_audenc_4.Text = "";\r
933                 drp_audsr_4.Text = "";\r
934                 drp_audmix_4.Text = "Automatic";\r
935                 \r
936             }\r
937             else\r
938             {\r
939                 drp_audbit_3.Enabled = true;\r
940                 drp_audenc_3.Enabled = true;\r
941                 drp_audsr_3.Enabled = true;\r
942                 drp_audmix_3.Enabled = true;\r
943                 trackBar3.Enabled = true;\r
944                 drp_audbit_3.Text = "160";\r
945                 drp_audenc_3.Text = "AAC";\r
946                 drp_audsr_3.Text = "48";\r
947                 drp_audmix_3.Text = "Automatic";\r
948 \r
949                 // Enable the 4th Track.\r
950                 drp_track4Audio.Enabled = true;\r
951                 drp_audbit_4.Text = "";\r
952                 drp_audenc_4.Text = "";\r
953                 drp_audsr_4.Text = "";\r
954                 drp_audmix_4.Text = "Automatic";\r
955             }\r
956             \r
957         }\r
958         private void drp_track4Audio_SelectedIndexChanged(object sender, EventArgs e)\r
959         {\r
960             if (drp_track4Audio.SelectedItem.Equals("None"))\r
961             {\r
962                 drp_audbit_4.Enabled = false;\r
963                 drp_audenc_4.Enabled = false;\r
964                 drp_audsr_4.Enabled = false;\r
965                 drp_audmix_4.Enabled = false;\r
966                 trackBar4.Enabled = false;\r
967                 drp_audbit_4.Text = "";\r
968                 drp_audenc_4.Text = "";\r
969                 drp_audsr_4.Text = "";\r
970                 drp_audmix_4.Text = "Automatic";\r
971                 trackBar4.Value = 0;\r
972             }\r
973             else\r
974             {\r
975                 drp_audbit_4.Enabled = true;\r
976                 drp_audenc_4.Enabled = true;\r
977                 drp_audsr_4.Enabled = true;\r
978                 drp_audmix_4.Enabled = true;\r
979                 trackBar4.Enabled = true;\r
980                 drp_audbit_4.Text = "160";\r
981                 drp_audenc_4.Text = "AAC";\r
982                 drp_audsr_4.Text = "48";\r
983                 drp_audmix_4.Text = "Automatic";\r
984             }\r
985         }\r
986 \r
987         private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e)\r
988         {\r
989             if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))\r
990                 setBitrateSelections384(drp_audbit_1);\r
991             else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete"))\r
992             {\r
993                 setBitrateSelections160(drp_audbit_1);\r
994                 drp_audbit_1.Text = "160";\r
995             }\r
996         }\r
997         private void drp_audmix_2_SelectedIndexChanged(object sender, EventArgs e)\r
998         {\r
999             if (drp_audmix_1.Text == "Automatic")\r
1000                 MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1001 \r
1002             if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text == "6 Channel Discrete"))\r
1003                 setBitrateSelections384(drp_audbit_2);\r
1004             else if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text != "6 Channel Discrete"))\r
1005             {\r
1006                 setBitrateSelections160(drp_audbit_2);\r
1007                 drp_audbit_2.Text = "160";\r
1008             }\r
1009         }\r
1010         private void drp_audmix_3_SelectedIndexChanged(object sender, EventArgs e)\r
1011         {\r
1012             if (drp_audmix_2.Text == "Automatic")\r
1013                 MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1014 \r
1015             if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text == "6 Channel Discrete"))\r
1016                 setBitrateSelections384(drp_audbit_3);\r
1017             else if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text != "6 Channel Discrete"))\r
1018             {\r
1019                 setBitrateSelections160(drp_audbit_3);\r
1020                 drp_audbit_3.Text = "160";\r
1021             }\r
1022         }\r
1023         private void drp_audmix_4_SelectedIndexChanged(object sender, EventArgs e)\r
1024         {\r
1025             if (drp_audmix_3.Text == "Automatic")\r
1026                 MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1027 \r
1028             if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text == "6 Channel Discrete"))\r
1029                 setBitrateSelections384(drp_audbit_4);\r
1030             else if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text != "6 Channel Discrete"))\r
1031             {\r
1032                 setBitrateSelections160(drp_audbit_4);\r
1033                 drp_audbit_4.Text = "160";\r
1034             }\r
1035         }\r
1036 \r
1037         private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)\r
1038         {\r
1039             if (drp_audenc_1.Text == "AC3")\r
1040             {\r
1041                 drp_audmix_1.Enabled = false;\r
1042                 drp_audbit_1.Enabled = false;\r
1043                 drp_audsr_1.Enabled = false;\r
1044             }\r
1045             else\r
1046             {\r
1047                 drp_audmix_1.Enabled = true;\r
1048                 drp_audbit_1.Enabled = true;\r
1049                 drp_audsr_1.Enabled = true;\r
1050 \r
1051                 drp_audmix_1.Text = "Automatic";\r
1052                 drp_audbit_1.Text = "160";\r
1053                 drp_audsr_1.Text = "48";\r
1054             }\r
1055 \r
1056 \r
1057             if (drp_audenc_1.Text == "AAC")\r
1058             {\r
1059                 drp_audmix_1.Items.Clear();\r
1060                 drp_audmix_1.Items.Add("Mono");\r
1061                 drp_audmix_1.Items.Add("Stereo");\r
1062                 drp_audmix_1.Items.Add("Dolby Surround");\r
1063                 drp_audmix_1.Items.Add("Dolby Pro Logic II");\r
1064                 drp_audmix_1.Items.Add("6 Channel Discrete");\r
1065 \r
1066                 setBitrateSelections160(drp_audbit_1);\r
1067             }\r
1068             else\r
1069             {\r
1070                 drp_audmix_1.Items.Clear();\r
1071                 drp_audmix_1.Items.Add("Stereo");\r
1072                 drp_audmix_1.Items.Add("Dolby Surround");\r
1073                 drp_audmix_1.Items.Add("Dolby Pro Logic II");\r
1074 \r
1075                 setBitrateSelections320(drp_audbit_1);\r
1076             }\r
1077         }\r
1078         private void drp_audenc_2_SelectedIndexChanged(object sender, EventArgs e)\r
1079         {\r
1080             if (drp_audenc_2.Text == "AC3")\r
1081             {\r
1082                 drp_audmix_2.Enabled = false;\r
1083                 drp_audbit_2.Enabled = false;\r
1084                 drp_audsr_2.Enabled = false;\r
1085 \r
1086                 drp_audmix_2.Text = "Automatic";\r
1087                 drp_audbit_2.Text = "160";\r
1088                 drp_audsr_2.Text = "48";\r
1089             }\r
1090             else\r
1091             {\r
1092                 // Just make sure not to re-enable the following boxes if the track2 is none\r
1093                 if (drp_track2Audio.Text != "None")\r
1094                 {\r
1095                     drp_audmix_2.Enabled = true;\r
1096                     drp_audbit_2.Enabled = true;\r
1097                     drp_audsr_2.Enabled = true;\r
1098 \r
1099                     drp_audmix_2.Text = "Automatic";\r
1100                     drp_audbit_2.Text = "160";\r
1101                     drp_audsr_2.Text = "48";\r
1102                 }\r
1103             }\r
1104 \r
1105             if (drp_audenc_2.Text == "AAC")\r
1106             {\r
1107                 drp_audmix_2.Items.Clear();\r
1108                 drp_audmix_2.Items.Add("Mono");\r
1109                 drp_audmix_2.Items.Add("Stereo");\r
1110                 drp_audmix_2.Items.Add("Dolby Surround");\r
1111                 drp_audmix_2.Items.Add("Dolby Pro Logic II");\r
1112                 drp_audmix_2.Items.Add("6 Channel Discrete");\r
1113 \r
1114                 setBitrateSelections160(drp_audbit_2);\r
1115             }\r
1116             else\r
1117             {\r
1118                 drp_audmix_2.Items.Clear();\r
1119                 drp_audmix_2.Items.Add("Stereo");\r
1120                 drp_audmix_2.Items.Add("Dolby Surround");\r
1121                 drp_audmix_2.Items.Add("Dolby Pro Logic II");\r
1122 \r
1123                 setBitrateSelections320(drp_audbit_2);\r
1124             }\r
1125         }\r
1126         private void drp_audenc_3_SelectedIndexChanged(object sender, EventArgs e)\r
1127         {\r
1128             if (drp_audenc_3.Text == "AC3")\r
1129             {\r
1130                 drp_audmix_3.Enabled = false;\r
1131                 drp_audbit_3.Enabled = false;\r
1132                 drp_audsr_3.Enabled = false;\r
1133 \r
1134                 drp_audmix_3.Text = "Automatic";\r
1135                 drp_audbit_3.Text = "160";\r
1136                 drp_audsr_3.Text = "48";\r
1137             }\r
1138             else\r
1139             {\r
1140                 // Just make sure not to re-enable the following boxes if the track above is none\r
1141                 if (drp_track2Audio.Text != "None")\r
1142                 {\r
1143                     drp_audmix_3.Enabled = true;\r
1144                     drp_audbit_3.Enabled = true;\r
1145                     drp_audsr_3.Enabled = true;\r
1146 \r
1147                     drp_audmix_3.Text = "Automatic";\r
1148                     drp_audbit_3.Text = "160";\r
1149                     drp_audsr_3.Text = "48";\r
1150                 }\r
1151             }\r
1152 \r
1153 \r
1154             if (drp_audenc_3.Text == "AAC")\r
1155             {\r
1156                 drp_audmix_3.Items.Clear();\r
1157                 drp_audmix_3.Items.Add("Mono");\r
1158                 drp_audmix_3.Items.Add("Stereo");\r
1159                 drp_audmix_3.Items.Add("Dolby Surround");\r
1160                 drp_audmix_3.Items.Add("Dolby Pro Logic II");\r
1161                 drp_audmix_3.Items.Add("6 Channel Discrete");\r
1162 \r
1163                 setBitrateSelections160(drp_audbit_3);\r
1164             }\r
1165             else\r
1166             {\r
1167                 drp_audmix_3.Items.Clear();\r
1168                 drp_audmix_3.Items.Add("Stereo");\r
1169                 drp_audmix_3.Items.Add("Dolby Surround");\r
1170                 drp_audmix_3.Items.Add("Dolby Pro Logic II");\r
1171 \r
1172                 setBitrateSelections320(drp_audbit_3);\r
1173             }\r
1174         }\r
1175         private void drp_audenc_4_SelectedIndexChanged(object sender, EventArgs e)\r
1176         {\r
1177             if (drp_audenc_4.Text == "AC3")\r
1178             {\r
1179                 drp_audmix_4.Enabled = false;\r
1180                 drp_audbit_4.Enabled = false;\r
1181                 drp_audsr_4.Enabled = false;\r
1182 \r
1183                 drp_audmix_4.Text = "Automatic";\r
1184                 drp_audbit_4.Text = "160";\r
1185                 drp_audsr_4.Text = "48";\r
1186             }\r
1187             else\r
1188             {\r
1189                 // Just make sure not to re-enable the following boxes if the track above is none\r
1190                 if (drp_track2Audio.Text != "None")\r
1191                 {\r
1192                     drp_audmix_4.Enabled = true;\r
1193                     drp_audbit_4.Enabled = true;\r
1194                     drp_audsr_4.Enabled = true;\r
1195 \r
1196                     drp_audmix_4.Text = "Automatic";\r
1197                     drp_audbit_4.Text = "160";\r
1198                     drp_audsr_4.Text = "48";\r
1199                 }\r
1200             }\r
1201 \r
1202 \r
1203             if (drp_audenc_4.Text == "AAC")\r
1204             {\r
1205                 drp_audmix_4.Items.Clear();\r
1206                 drp_audmix_4.Items.Add("Mono");\r
1207                 drp_audmix_4.Items.Add("Stereo");\r
1208                 drp_audmix_4.Items.Add("Dolby Surround");\r
1209                 drp_audmix_4.Items.Add("Dolby Pro Logic II");\r
1210                 drp_audmix_4.Items.Add("6 Channel Discrete");\r
1211 \r
1212                 setBitrateSelections160(drp_audbit_4);\r
1213             }\r
1214             else\r
1215             {\r
1216                 drp_audmix_4.Items.Clear();\r
1217                 drp_audmix_4.Items.Add("Stereo");\r
1218                 drp_audmix_4.Items.Add("Dolby Surround");\r
1219                 drp_audmix_4.Items.Add("Dolby Pro Logic II");\r
1220 \r
1221                 setBitrateSelections320(drp_audbit_4);\r
1222             }\r
1223         }\r
1224 \r
1225         private void trackBar1_Scroll(object sender, EventArgs e)\r
1226         {\r
1227             double value = trackBar1.Value / 10.0;\r
1228             value++;\r
1229 \r
1230             lbl_drc1.Text = value.ToString();\r
1231         }\r
1232         private void trackBar2_Scroll(object sender, EventArgs e)\r
1233         {\r
1234             double value = trackBar2.Value / 10.0;\r
1235             value++;\r
1236 \r
1237             lbl_drc2.Text = value.ToString();\r
1238         }\r
1239         private void trackBar3_Scroll(object sender, EventArgs e)\r
1240         {\r
1241             double value = trackBar3.Value / 10.0;\r
1242             value++;\r
1243 \r
1244             lbl_drc3.Text = value.ToString();\r
1245         }\r
1246         private void trackBar4_Scroll(object sender, EventArgs e)\r
1247         {\r
1248             double value = trackBar4.Value / 10.0;\r
1249             value++;\r
1250 \r
1251             lbl_drc4.Text = value.ToString();\r
1252         }\r
1253 \r
1254         private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e)\r
1255         {\r
1256             if (drp_subtitle.Text.Contains("None"))\r
1257             {\r
1258                 check_forced.Enabled = false;\r
1259                 check_forced.Checked = false;\r
1260             }\r
1261             else\r
1262                 check_forced.Enabled = true;\r
1263         }\r
1264 \r
1265         // Chapter Marker Tab\r
1266         private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)\r
1267         {\r
1268             if (Check_ChapterMarkers.Checked)\r
1269             {\r
1270                 string destination = text_destination.Text;\r
1271                 destination = destination.Replace(".mp4", ".m4v");\r
1272                 text_destination.Text = destination;\r
1273                 data_chpt.Rows.Clear();\r
1274                 data_chpt.Enabled = true;\r
1275                 hb_common_func.chapterNaming(this);\r
1276             }\r
1277             else\r
1278             {\r
1279                 string destination = text_destination.Text;\r
1280                 destination = destination.Replace(".m4v", ".mp4");\r
1281                 text_destination.Text = destination;\r
1282                 data_chpt.Rows.Clear();\r
1283                 data_chpt.Enabled = false;\r
1284             }\r
1285         }\r
1286 \r
1287         // Advanced Tab\r
1288         private void drop_refFrames_SelectedIndexChanged(object sender, EventArgs e)\r
1289         {\r
1290             x264PanelFunctions.on_x264_WidgetChange("ref", this);\r
1291         }\r
1292         private void check_mixedReferences_CheckedChanged(object sender, EventArgs e)\r
1293         {\r
1294             x264PanelFunctions.on_x264_WidgetChange("mixed-refs", this);\r
1295         }\r
1296         private void drop_bFrames_SelectedIndexChanged(object sender, EventArgs e)\r
1297         {\r
1298             x264PanelFunctions.on_x264_WidgetChange("bframes", this);\r
1299         }\r
1300         private void drop_directPrediction_SelectedIndexChanged(object sender, EventArgs e)\r
1301         {\r
1302             x264PanelFunctions.on_x264_WidgetChange("direct", this);\r
1303         }\r
1304         private void check_weightedBFrames_CheckedChanged(object sender, EventArgs e)\r
1305         {\r
1306             x264PanelFunctions.on_x264_WidgetChange("weightb", this);\r
1307         }\r
1308         private void check_bFrameDistortion_CheckedChanged(object sender, EventArgs e)\r
1309         {\r
1310             x264PanelFunctions.on_x264_WidgetChange("brdo", this);\r
1311         }\r
1312         private void check_BidirectionalRefinement_CheckedChanged(object sender, EventArgs e)\r
1313         {\r
1314             x264PanelFunctions.on_x264_WidgetChange("bime", this);\r
1315         }\r
1316         private void check_pyrmidalBFrames_CheckedChanged(object sender, EventArgs e)\r
1317         {\r
1318             x264PanelFunctions.on_x264_WidgetChange("b-pyramid", this);\r
1319         }\r
1320         private void drop_MotionEstimationMethod_SelectedIndexChanged(object sender, EventArgs e)\r
1321         {\r
1322             x264PanelFunctions.on_x264_WidgetChange("me", this);\r
1323         }\r
1324         private void drop_MotionEstimationRange_SelectedIndexChanged(object sender, EventArgs e)\r
1325         {\r
1326             x264PanelFunctions.on_x264_WidgetChange("merange", this);\r
1327         }\r
1328         private void drop_subpixelMotionEstimation_SelectedIndexChanged(object sender, EventArgs e)\r
1329         {\r
1330             x264PanelFunctions.on_x264_WidgetChange("subq", this);\r
1331         }\r
1332         private void drop_analysis_SelectedIndexChanged(object sender, EventArgs e)\r
1333         {\r
1334             x264PanelFunctions.on_x264_WidgetChange("analyse", this);\r
1335         }\r
1336         private void check_8x8DCT_CheckedChanged(object sender, EventArgs e)\r
1337         {\r
1338             x264PanelFunctions.on_x264_WidgetChange("8x8dct", this);\r
1339         }\r
1340         private void drop_deblockAlpha_SelectedIndexChanged(object sender, EventArgs e)\r
1341         {\r
1342             x264PanelFunctions.on_x264_WidgetChange("deblock", this);\r
1343 \r
1344         }\r
1345         private void drop_deblockBeta_SelectedIndexChanged(object sender, EventArgs e)\r
1346         {\r
1347             x264PanelFunctions.on_x264_WidgetChange("deblock", this);\r
1348 \r
1349         }\r
1350         private void drop_trellis_SelectedIndexChanged(object sender, EventArgs e)\r
1351         {\r
1352             x264PanelFunctions.on_x264_WidgetChange("trellis", this);\r
1353         }\r
1354         private void check_noFastPSkip_CheckedChanged(object sender, EventArgs e)\r
1355         {\r
1356             x264PanelFunctions.on_x264_WidgetChange("no-fast-pskip", this);\r
1357         }\r
1358         private void check_noDCTDecimate_CheckedChanged(object sender, EventArgs e)\r
1359         {\r
1360             x264PanelFunctions.on_x264_WidgetChange("no-dct-decimate", this);\r
1361 \r
1362         }\r
1363         private void check_Cabac_CheckedChanged(object sender, EventArgs e)\r
1364         {\r
1365             x264PanelFunctions.on_x264_WidgetChange("cabac", this);\r
1366         }\r
1367 \r
1368         private void rtf_x264Query_TextChanged(object sender, EventArgs e)\r
1369         {\r
1370             if (rtf_x264Query.Text.EndsWith("\n"))\r
1371             {\r
1372                 rtf_x264Query.Text = rtf_x264Query.Text.Replace("\n", "");\r
1373                 x264PanelFunctions.X264_StandardizeOptString(this);\r
1374                 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);\r
1375 \r
1376                 if (rtf_x264Query.Text == "")\r
1377                     x264PanelFunctions.reset2Defaults(this);\r
1378             }\r
1379         }\r
1380         private void btn_reset_Click(object sender, EventArgs e)\r
1381         {\r
1382             rtf_x264Query.Text = "";\r
1383             x264PanelFunctions.reset2Defaults(this);\r
1384         }\r
1385 \r
1386         // Query Editor Tab\r
1387         private void btn_generate_Query_Click(object sender, EventArgs e)\r
1388         {\r
1389             rtf_query.Text = hb_common_func.GenerateTheQuery(this);\r
1390         }\r
1391         private void btn_clear_Click(object sender, EventArgs e)\r
1392         {\r
1393             rtf_query.Clear();\r
1394         }\r
1395         private void btn_copy2C_Click(object sender, EventArgs e)\r
1396         {\r
1397             if (rtf_query.Text != "")\r
1398                 Clipboard.SetText(rtf_query.Text, TextDataFormat.Text);\r
1399         }\r
1400 \r
1401         // Presets\r
1402         private void btn_addPreset_Click(object sender, EventArgs e)\r
1403         {\r
1404             Form preset = new frmAddPreset(this);\r
1405             preset.ShowDialog();\r
1406         }\r
1407         private void btn_removePreset_Click(object sender, EventArgs e)\r
1408         {\r
1409             ArrayList user_presets = new ArrayList();\r
1410             ArrayList modified_presets_list = new ArrayList();\r
1411             string selectedPreset = null;\r
1412             selectedPreset = treeView_presets.SelectedNode.Text;\r
1413 \r
1414             if (!selectedPreset.StartsWith("--"))\r
1415                 MessageBox.Show("Sorry, You can not remove any of the built in presets.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1416 \r
1417 \r
1418             // Scan through the users presets and dump them all in an arraylist\r
1419             string userPresets = Application.StartupPath.ToString() + "\\user_presets.dat";\r
1420             if (File.Exists(userPresets))\r
1421             {\r
1422                 StreamReader presetInput = new StreamReader(userPresets);\r
1423                 while (!presetInput.EndOfStream)\r
1424                 {\r
1425                     if ((char)presetInput.Peek() == '+')\r
1426                     {\r
1427                         string item = presetInput.ReadLine();\r
1428                         user_presets.Add(item);\r
1429                         modified_presets_list.Add(item);\r
1430                     }\r
1431                     else\r
1432                         presetInput.ReadLine();\r
1433                 }\r
1434 \r
1435                 presetInput.Close();\r
1436                 presetInput.Dispose();\r
1437             }\r
1438 \r
1439             // now lets scan through the arraylist and remove the preset with the\r
1440             // same name as the one selected.\r
1441             int c = 0;\r
1442             foreach (string item in user_presets)\r
1443             {\r
1444                 string preset_name = "+ " + selectedPreset.Replace("--", "").Trim() + ":";\r
1445                 if (item.Contains(preset_name))\r
1446                     modified_presets_list.RemoveAt(c);\r
1447                 c++;\r
1448             }\r
1449 \r
1450             // Now we need to rebuilt the user presets file.\r
1451             StreamWriter line = new StreamWriter(userPresets);\r
1452             foreach (string item in modified_presets_list)\r
1453             {\r
1454                 line.WriteLine(item);\r
1455             }\r
1456             line.Close();\r
1457             line.Dispose();\r
1458 \r
1459             // Now reload the preset panel\r
1460             loadPresetPanel();\r
1461         }\r
1462         private void btn_setDefault_Click(object sender, EventArgs e)\r
1463         {\r
1464             String query = hb_common_func.GenerateTheQuery(this);\r
1465             Properties.Settings.Default.defaultUserSettings = query;\r
1466             // Save the new default Settings\r
1467             Properties.Settings.Default.Save();\r
1468             MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
1469         }\r
1470         private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)\r
1471         {\r
1472             //When the user select a preset from the treeview, load it\r
1473             try\r
1474             {\r
1475                 // Scan through the built in presets\r
1476                 string builtInPresets = Application.StartupPath.ToString() + "\\presets.dat";\r
1477                 if (File.Exists(builtInPresets))\r
1478                 {\r
1479                     StreamReader presetInput = new StreamReader(builtInPresets);\r
1480                     while (!presetInput.EndOfStream)\r
1481                     {\r
1482                         if ((char)presetInput.Peek() == '+')\r
1483                         {\r
1484                             string preset = presetInput.ReadLine().Replace("+ ", "");\r
1485                             checkSelectedPreset(preset);\r
1486                         }\r
1487                         else\r
1488                             presetInput.ReadLine();\r
1489                     }\r
1490 \r
1491                     presetInput.Close();\r
1492                 }\r
1493 \r
1494                 // Scan through the users presets\r
1495                 string userPresets = Application.StartupPath.ToString() + "\\user_presets.dat";\r
1496                 if (File.Exists(userPresets))\r
1497                 {\r
1498                     StreamReader presetInput = new StreamReader(userPresets);\r
1499                     while (!presetInput.EndOfStream)\r
1500                     {\r
1501                         if ((char)presetInput.Peek() == '+')\r
1502                         {\r
1503                             string preset = presetInput.ReadLine().Replace("+ ", "");\r
1504                             checkSelectedPreset(preset);\r
1505                         }\r
1506                         else\r
1507                             presetInput.ReadLine();\r
1508                     }\r
1509 \r
1510                     presetInput.Close();\r
1511                     presetInput.Dispose();\r
1512                 }\r
1513             }\r
1514             catch (Exception exc)\r
1515             {\r
1516                 MessageBox.Show(exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
1517             }\r
1518         }\r
1519 \r
1520         #endregion\r
1521 \r
1522         #region Functions\r
1523         // DVD Parsing\r
1524         public void setStreamReader(Parsing.DVD dvd)\r
1525         {\r
1526             this.thisDVD = dvd;\r
1527         }\r
1528 \r
1529         // Audio system functions\r
1530         private void setAudioByContainer(String path)\r
1531         {\r
1532             string oldval = "";\r
1533 \r
1534             if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))\r
1535             {\r
1536                 oldval = drp_audenc_1.Text;\r
1537                 drp_audenc_1.Items.Clear();\r
1538                 drp_audenc_1.Items.Add("AAC");\r
1539                 drp_audenc_1.Items.Add("AC3");\r
1540                 if ((oldval != "AAC") && (oldval != "AC3"))\r
1541                     drp_audenc_1.SelectedIndex = 0;\r
1542 \r
1543                 oldval = drp_audenc_2.Text;\r
1544                 drp_audenc_2.Items.Clear();\r
1545                 drp_audenc_2.Items.Add("AAC");\r
1546                 drp_audenc_2.Items.Add("AC3");\r
1547                 if (drp_audenc_2.Enabled)\r
1548                 {\r
1549                     if ((oldval != "AAC") && (oldval != "AC3"))\r
1550                         drp_audenc_2.SelectedIndex = 0;\r
1551                 }\r
1552 \r
1553                 oldval = drp_audenc_3.Text;\r
1554                 drp_audenc_3.Items.Clear();\r
1555                 drp_audenc_3.Items.Add("AAC");\r
1556                 drp_audenc_3.Items.Add("AC3");\r
1557                 if (drp_audenc_3.Enabled)\r
1558                 {\r
1559                     if ((oldval != "AAC") && (oldval != "AC3"))\r
1560                         drp_audenc_3.SelectedIndex = 0;\r
1561                 }\r
1562 \r
1563                 oldval = drp_audenc_4.Text;\r
1564                 drp_audenc_4.Items.Clear();\r
1565                 drp_audenc_4.Items.Add("AAC");\r
1566                 drp_audenc_4.Items.Add("AC3");\r
1567                 if (drp_audenc_4.Enabled)\r
1568                 {\r
1569                     if ((oldval != "AAC") && (oldval != "AC3"))\r
1570                         drp_audenc_4.SelectedIndex = 0;\r
1571                 }\r
1572             }\r
1573             else if (path.EndsWith(".avi"))\r
1574             {\r
1575                 oldval = drp_audenc_1.Text;\r
1576                 drp_audenc_1.Items.Clear();\r
1577                 drp_audenc_1.Items.Add("MP3");\r
1578                 drp_audenc_1.Items.Add("AC3");\r
1579                 if ((oldval != "MP3") && (oldval != "AC3"))\r
1580                     drp_audenc_1.SelectedIndex = 0;\r
1581 \r
1582                 oldval = drp_audenc_2.Text;\r
1583                 drp_audenc_2.Items.Clear();\r
1584                 drp_audenc_2.Items.Add("MP3");\r
1585                 drp_audenc_2.Items.Add("AC3");\r
1586                 if (drp_audenc_2.Enabled)\r
1587                 {\r
1588                     if ((oldval != "MP3") && (oldval != "AC3"))\r
1589                         drp_audenc_2.SelectedIndex = 0;\r
1590                 }\r
1591 \r
1592 \r
1593                 oldval = drp_audenc_3.Text;\r
1594                 drp_audenc_3.Items.Clear();\r
1595                 drp_audenc_3.Items.Add("MP3");\r
1596                 drp_audenc_3.Items.Add("AC3");\r
1597                 if (drp_audenc_3.Enabled)\r
1598                 {\r
1599                     if ((oldval != "MP3") && (oldval != "AC3"))\r
1600                         drp_audenc_3.SelectedIndex = 0;\r
1601                 }\r
1602 \r
1603                 oldval = drp_audenc_4.Text;\r
1604                 drp_audenc_4.Items.Clear();\r
1605                 drp_audenc_4.Items.Add("MP3");\r
1606                 drp_audenc_4.Items.Add("AC3");\r
1607                 if (drp_audenc_4.Enabled)\r
1608                 {\r
1609                     if ((oldval != "MP3") && (oldval != "AC3"))\r
1610                         drp_audenc_4.SelectedIndex = 0;\r
1611                 }\r
1612             }\r
1613             else if (path.EndsWith(".ogm"))\r
1614             {\r
1615                 drp_audenc_1.Items.Clear();\r
1616                 drp_audenc_1.Items.Add("Vorbis");\r
1617                 drp_audenc_1.SelectedIndex = 0;\r
1618 \r
1619                 drp_audenc_2.Items.Clear();\r
1620                 drp_audenc_2.Items.Add("Vorbis");\r
1621                 if (drp_audenc_2.Enabled)\r
1622                     drp_audenc_2.SelectedIndex = 0;\r
1623 \r
1624                 drp_audenc_3.Items.Clear();\r
1625                 drp_audenc_3.Items.Add("Vorbis");\r
1626                 if (drp_audenc_3.Enabled)\r
1627                     drp_audenc_3.SelectedIndex = 0;\r
1628 \r
1629                 drp_audenc_4.Items.Clear();\r
1630                 drp_audenc_4.Items.Add("Vorbis");\r
1631                 if (drp_audenc_4.Enabled)\r
1632                     drp_audenc_4.SelectedIndex = 0;\r
1633             }\r
1634             else if (path.EndsWith(".mkv"))\r
1635             {\r
1636                 drp_audenc_1.Items.Clear();\r
1637                 drp_audenc_1.Items.Add("AAC");\r
1638                 drp_audenc_1.Items.Add("MP3");\r
1639                 drp_audenc_1.Items.Add("AC3");\r
1640                 drp_audenc_1.Items.Add("Vorbis");\r
1641                 if (drp_audenc_1.Text == "")\r
1642                     drp_audenc_1.SelectedIndex = 0;\r
1643 \r
1644 \r
1645                 drp_audenc_2.Items.Clear();\r
1646                 drp_audenc_2.Items.Add("AAC");\r
1647                 drp_audenc_2.Items.Add("MP3");\r
1648                 drp_audenc_2.Items.Add("AC3");\r
1649                 drp_audenc_2.Items.Add("Vorbis");\r
1650                 if (drp_audenc_2.Enabled)\r
1651                 {\r
1652                     if (drp_audenc_2.Text == "")\r
1653                         drp_audenc_2.SelectedIndex = 0;\r
1654                 }\r
1655 \r
1656                 drp_audenc_3.Items.Clear();\r
1657                 drp_audenc_3.Items.Add("AAC");\r
1658                 drp_audenc_3.Items.Add("MP3");\r
1659                 drp_audenc_3.Items.Add("AC3");\r
1660                 drp_audenc_3.Items.Add("Vorbis");\r
1661                 if (drp_audenc_3.Enabled)\r
1662                 {\r
1663                     if (drp_audenc_3.Text == "")\r
1664                         drp_audenc_3.SelectedIndex = 0;\r
1665                 }\r
1666 \r
1667                 drp_audenc_4.Items.Clear();\r
1668                 drp_audenc_4.Items.Add("AAC");\r
1669                 drp_audenc_4.Items.Add("MP3");\r
1670                 drp_audenc_4.Items.Add("AC3");\r
1671                 drp_audenc_4.Items.Add("Vorbis");\r
1672                 if (drp_audenc_4.Enabled)\r
1673                 {\r
1674                     if (drp_audenc_4.Text == "")\r
1675                         drp_audenc_4.SelectedIndex = 0;\r
1676                 }\r
1677             }\r
1678         }\r
1679         private void setVideoByContainer(String path)\r
1680         {\r
1681             string oldval = "";\r
1682 \r
1683             if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))\r
1684             {\r
1685                 oldval = drp_videoEncoder.Text;\r
1686                 drp_videoEncoder.Items.Clear();\r
1687                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1688                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1689                 drp_videoEncoder.Items.Add("H.264 (x264)");\r
1690                 if (oldval == "VP3 (Theora)")\r
1691                     drp_videoEncoder.SelectedIndex = 2;\r
1692                 else\r
1693                     drp_videoEncoder.Text = oldval;\r
1694 \r
1695             }\r
1696             else if (path.EndsWith(".avi"))\r
1697             {\r
1698                 oldval = drp_videoEncoder.Text;\r
1699                 drp_videoEncoder.Items.Clear();\r
1700                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1701                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1702                 drp_videoEncoder.Items.Add("H.264 (x264)");\r
1703                 if (oldval == "VP3 (Theora)")\r
1704                     drp_videoEncoder.SelectedIndex = 2;\r
1705                 else\r
1706                     drp_videoEncoder.Text = oldval;\r
1707             }\r
1708             else if (path.EndsWith(".ogm"))\r
1709             {\r
1710                 oldval = drp_videoEncoder.Text;\r
1711                 drp_videoEncoder.Items.Clear();\r
1712                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1713                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1714                 drp_videoEncoder.Items.Add("VP3 (Theora)");\r
1715                 if (oldval == "H.264 (x264)")\r
1716                     drp_videoEncoder.SelectedIndex = 2;\r
1717                 else\r
1718                     drp_videoEncoder.Text = oldval;\r
1719             }\r
1720             else if (path.EndsWith(".mkv"))\r
1721             {\r
1722                 oldval = drp_videoEncoder.Text;\r
1723                 drp_videoEncoder.Items.Clear();\r
1724                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1725                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1726                 drp_videoEncoder.Items.Add("H.264 (x264)");\r
1727                 drp_videoEncoder.Items.Add("VP3 (Theora)");\r
1728                 drp_videoEncoder.Text = oldval;\r
1729             }\r
1730         }\r
1731         private void setBitrateSelections384(ComboBox dropDown)\r
1732         {\r
1733             dropDown.Items.Clear();\r
1734             dropDown.Items.Add("32");\r
1735             dropDown.Items.Add("40");\r
1736             dropDown.Items.Add("48");\r
1737             dropDown.Items.Add("56");\r
1738             dropDown.Items.Add("64");\r
1739             dropDown.Items.Add("80");\r
1740             dropDown.Items.Add("86");\r
1741             dropDown.Items.Add("112");\r
1742             dropDown.Items.Add("128");\r
1743             dropDown.Items.Add("160");\r
1744             dropDown.Items.Add("192");\r
1745             dropDown.Items.Add("224");\r
1746             dropDown.Items.Add("256");\r
1747             dropDown.Items.Add("320");\r
1748             dropDown.Items.Add("384");\r
1749         }\r
1750         private void setBitrateSelections320(ComboBox dropDown)\r
1751         {\r
1752             dropDown.Items.Clear();\r
1753             dropDown.Items.Add("32");\r
1754             dropDown.Items.Add("40");\r
1755             dropDown.Items.Add("48");\r
1756             dropDown.Items.Add("56");\r
1757             dropDown.Items.Add("64");\r
1758             dropDown.Items.Add("80");\r
1759             dropDown.Items.Add("86");\r
1760             dropDown.Items.Add("112");\r
1761             dropDown.Items.Add("128");\r
1762             dropDown.Items.Add("160");\r
1763             dropDown.Items.Add("192");\r
1764             dropDown.Items.Add("224");\r
1765             dropDown.Items.Add("256");\r
1766             dropDown.Items.Add("320");\r
1767         }\r
1768         private void setBitrateSelections160(ComboBox dropDown)\r
1769         {\r
1770             dropDown.Items.Clear();\r
1771             dropDown.Items.Add("32");\r
1772             dropDown.Items.Add("40");\r
1773             dropDown.Items.Add("48");\r
1774             dropDown.Items.Add("56");\r
1775             dropDown.Items.Add("64");\r
1776             dropDown.Items.Add("80");\r
1777             dropDown.Items.Add("86");\r
1778             dropDown.Items.Add("112");\r
1779             dropDown.Items.Add("128");\r
1780             dropDown.Items.Add("160");\r
1781         }\r
1782 \r
1783         // Preset system functions\r
1784         private void addPresetToList(ArrayList presetNameList)\r
1785         {\r
1786             // Adds a new preset name to the preset list.\r
1787             TreeNode preset_treeview = new TreeNode();\r
1788             foreach (string[] preset in presetNameList)\r
1789             {\r
1790                 preset_treeview = new TreeNode(preset[0]);\r
1791 \r
1792                 // Now Fill Out List View with Items\r
1793                 treeView_presets.Nodes.Add(preset_treeview);\r
1794             }\r
1795         }\r
1796         private void grabCLIPresets()\r
1797         {\r
1798             // Gets the presets from the CLI and stores them in presets.dat\r
1799             string appPath = Application.StartupPath.ToString() + "\\";\r
1800             string strCmdLine = "cmd /c " + '"' + '"' + appPath + "HandBrakeCLI.exe" + '"' + " --preset-list >" + '"' + appPath + "presets.dat" + '"' + " 2>&1" + '"';\r
1801             Process hbproc = Process.Start("CMD.exe", strCmdLine);\r
1802             hbproc.WaitForExit();\r
1803             hbproc.Dispose();\r
1804             hbproc.Close();\r
1805         }\r
1806         private void loadNormalPreset()\r
1807         {\r
1808             //Loads the preset called "normal"\r
1809             try\r
1810             {\r
1811                 string appPath = Application.StartupPath.ToString() + "\\presets.dat";\r
1812                 if (File.Exists(appPath))\r
1813                 {\r
1814 \r
1815                     int normal = 0;\r
1816                     foreach (TreeNode treenode in treeView_presets.Nodes)\r
1817                     {\r
1818                         if (treenode.ToString().Equals("TreeNode: Normal"))\r
1819                             normal = treenode.Index;\r
1820                     }\r
1821 \r
1822                     TreeNode np = treeView_presets.Nodes[normal];\r
1823 \r
1824                     treeView_presets.SelectedNode = np;\r
1825                 }\r
1826             }\r
1827             catch (Exception)\r
1828             {\r
1829                 // Do nothing\r
1830             }\r
1831         }\r
1832         public void loadPresetPanel()\r
1833         {\r
1834             treeView_presets.Nodes.Clear();\r
1835             ArrayList presetNameList = new ArrayList();\r
1836 \r
1837             // Load in the built in presets from presets.dat\r
1838             string filePath = Application.StartupPath.ToString() + "\\presets.dat";\r
1839             if (File.Exists(filePath))\r
1840             {\r
1841                 StreamReader presetInput = new StreamReader(filePath);\r
1842                 while (!presetInput.EndOfStream)\r
1843                 {\r
1844                     if ((char)presetInput.Peek() == '+')\r
1845                     {\r
1846                         string preset = presetInput.ReadLine().Replace("+ ", "");\r
1847                         Regex r = new Regex("(:  )"); // Split on hyphens. \r
1848                         presetNameList.Add(r.Split(preset));\r
1849                     }\r
1850                     else\r
1851                         presetInput.ReadLine();\r
1852                 }\r
1853 \r
1854                 presetInput.Close();\r
1855                 presetInput.Dispose();\r
1856             }\r
1857             addPresetToList(presetNameList);\r
1858             presetNameList.Clear();\r
1859 \r
1860             // Load in the users presets from user_presets.dat\r
1861             filePath = Application.StartupPath.ToString() + "\\user_presets.dat";\r
1862             if (File.Exists(filePath))\r
1863             {\r
1864                 StreamReader presetInput = new StreamReader(filePath);\r
1865                 while (!presetInput.EndOfStream)\r
1866                 {\r
1867                     if ((char)presetInput.Peek() == '+')\r
1868                     {\r
1869                         string preset = "--" + presetInput.ReadLine().Replace("+ ", "");\r
1870                         Regex r = new Regex("(:  )"); // Split on hyphens. \r
1871                         presetNameList.Add(r.Split(preset));\r
1872                     }\r
1873                     else\r
1874                         presetInput.ReadLine();\r
1875                 }\r
1876 \r
1877                 presetInput.Close();\r
1878                 presetInput.Dispose();\r
1879             }\r
1880             addPresetToList(presetNameList);\r
1881         }\r
1882         private void checkSelectedPreset(string preset)\r
1883         {\r
1884             string selectedPreset = null;\r
1885             selectedPreset = treeView_presets.SelectedNode.Text;\r
1886 \r
1887             Regex r = new Regex("(:  )"); // Split on hyphens. \r
1888             string[] presetName = r.Split(preset);\r
1889 \r
1890             if ((selectedPreset == (presetName[0])) || (selectedPreset == ("--" + presetName[0])))\r
1891             {\r
1892                 //Ok, Reset all the H264 widgets before changing the preset\r
1893                 x264PanelFunctions.reset2Defaults(this);\r
1894 \r
1895                 // Send the query from the file to the Query Parser class\r
1896                 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(preset);\r
1897 \r
1898                 // Now load the preset\r
1899                 hb_common_func.presetLoader(this, presetQuery, selectedPreset);\r
1900 \r
1901                 // The x264 widgets will need updated, so do this now:\r
1902                 x264PanelFunctions.X264_StandardizeOptString(this);\r
1903                 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);\r
1904             }\r
1905         }\r
1906 \r
1907         // Queue system functions\r
1908         private void showQueue()\r
1909         {\r
1910             queueWindow.Show();\r
1911         }\r
1912         #endregion\r
1913 \r
1914         #region Encoding and Queue\r
1915 \r
1916         // Declarations\r
1917         Functions.CLI process = new Functions.CLI();\r
1918         private delegate void UpdateUIHandler();\r
1919         [DllImport("user32.dll")]\r
1920         public static extern void LockWorkStation();\r
1921         [DllImport("user32.dll")]\r
1922         public static extern int ExitWindowsEx(int uFlags, int dwReason);\r
1923 \r
1924         // Encoding Functions\r
1925         private void procMonitor(object state)\r
1926         {\r
1927             // Make sure we are not already encoding and if we are then display an error.\r
1928             if (hbProc != null)\r
1929                 MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1930             else\r
1931             {\r
1932                 hbProc = process.runCli(this, (string)state, false, false, false, false);\r
1933                 hbProc.WaitForExit();\r
1934 \r
1935                 setEncodeLabelFinished();\r
1936                 hbProc = null;\r
1937 \r
1938                 // Do something whent he encode ends.\r
1939                 switch (Properties.Settings.Default.CompletionOption)\r
1940                 {\r
1941                     case "Shutdown":\r
1942                         System.Diagnostics.Process.Start("Shutdown", "-s -t 60");\r
1943                         break;\r
1944                     case "Log Off":\r
1945                         ExitWindowsEx(0, 0);\r
1946                         break;\r
1947                     case "Suspend":\r
1948                         Application.SetSuspendState(PowerState.Suspend, true, true);\r
1949                         break;\r
1950                     case "Hibernate":\r
1951                         Application.SetSuspendState(PowerState.Hibernate, true, true);\r
1952                         break;\r
1953                     case "Lock System":\r
1954                         LockWorkStation();\r
1955                         break;\r
1956                     case "Quit HandBrake":\r
1957                         Application.Exit();\r
1958                         break;\r
1959                     default:\r
1960                         break;\r
1961                 }\r
1962             }\r
1963         }\r
1964         private void setEncodeLabelFinished()\r
1965         {\r
1966             if (this.InvokeRequired)\r
1967             {\r
1968                 this.BeginInvoke(new UpdateUIHandler(setEncodeLabelFinished));\r
1969                 return;\r
1970             }\r
1971             lbl_encode.Text = "Encoding Finished";\r
1972         }\r
1973 \r
1974         #endregion\r
1975 \r
1976  \r
1977 \r
1978 \r
1979         // This is the END of the road ------------------------------------------------------------------------------\r
1980     }\r
1981 }