OSDN Git Service

WinGui:
[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)\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_iPodAtom.Enabled = true;\r
652                 check_optimiseMP4.Enabled = true;\r
653                 check_largeFile.Visible = true;\r
654                 check_iPodAtom.Visible = true;\r
655                 check_optimiseMP4.Visible = true;\r
656             }\r
657             else\r
658             {\r
659                 check_largeFile.Checked = false;\r
660                 check_iPodAtom.Checked = false;\r
661                 check_optimiseMP4.Checked = false;\r
662                 check_largeFile.Visible = false;\r
663                 check_iPodAtom.Visible = false;\r
664                 check_optimiseMP4.Visible = false;\r
665             }\r
666 \r
667 \r
668             //Turn off some options which are H.264 only when the user selects a non h.264 encoder\r
669             if (!drp_videoEncoder.Text.Contains("H.264"))\r
670             {\r
671                 check_turbo.CheckState = CheckState.Unchecked;\r
672                 check_turbo.Enabled = false;\r
673                 h264Tab.Enabled = false;\r
674                 rtf_x264Query.Text = "";\r
675                 check_iPodAtom.Enabled = false;\r
676                 check_iPodAtom.Checked = false;\r
677                 check_optimiseMP4.Enabled = false;\r
678                 if (drp_anamorphic.Items.Count == 3)\r
679                     drp_anamorphic.Items.RemoveAt(2);\r
680             }\r
681             else\r
682             {\r
683                 if (check_2PassEncode.CheckState == CheckState.Checked)\r
684                     check_turbo.Enabled = true;\r
685 \r
686                 h264Tab.Enabled = true;\r
687                 check_iPodAtom.Enabled = true;\r
688                 check_optimiseMP4.Enabled = true;\r
689                 if (!drp_anamorphic.Items.Contains("Loose"))\r
690                     drp_anamorphic.Items.Add("Loose");\r
691             }\r
692 \r
693         }\r
694 \r
695         //Video Tab\r
696         private void text_bitrate_TextChanged(object sender, EventArgs e)\r
697         {\r
698             text_filesize.Text = "";\r
699             slider_videoQuality.Value = 0;\r
700             SliderValue.Text = "0%";\r
701         }\r
702         private void text_filesize_TextChanged(object sender, EventArgs e)\r
703         {\r
704             text_bitrate.Text = "";\r
705             slider_videoQuality.Value = 0;\r
706             SliderValue.Text = "0%";\r
707         }\r
708         private void slider_videoQuality_Scroll(object sender, EventArgs e)\r
709         {\r
710             SliderValue.Text = slider_videoQuality.Value.ToString() + "%";\r
711             text_bitrate.Text = "";\r
712             text_filesize.Text = "";\r
713         }\r
714         private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)\r
715         {\r
716             if (check_2PassEncode.CheckState.ToString() == "Checked")\r
717             {\r
718                 if (drp_videoEncoder.Text.Contains("H.264"))\r
719                     check_turbo.Enabled = true;\r
720             }\r
721             else\r
722             {\r
723                 check_turbo.Enabled = false;\r
724                 check_turbo.CheckState = CheckState.Unchecked;\r
725             }\r
726         }\r
727 \r
728         //Picture Tab\r
729         private void text_width_TextChanged(object sender, EventArgs e)\r
730         {\r
731             try\r
732             {\r
733                 if ((int.Parse(text_width.Text) % 16) != 0)\r
734                     text_width.BackColor = Color.LightCoral;\r
735                 else\r
736                     text_width.BackColor = Color.LightGreen;\r
737 \r
738 \r
739                 if ((lbl_Aspect.Text != "Select a Title") && (drp_crop.SelectedIndex == 2))\r
740                 {\r
741                     double height = int.Parse(text_width.Text) / double.Parse(lbl_Aspect.Text);\r
742                     double mod16 = height % 16;\r
743                     height = height - mod16;\r
744 \r
745                     if (text_width.Text == "")\r
746                     {\r
747                         text_height.Text = "";\r
748                         text_width.BackColor = Color.White;\r
749                     }\r
750                     else\r
751                         text_height.Text = height.ToString();\r
752                 }\r
753             }\r
754             catch (Exception)\r
755             {\r
756                 // No need to throw an error here.\r
757             }\r
758         }\r
759         private void text_height_TextChanged(object sender, EventArgs e)\r
760         {\r
761             try\r
762             {\r
763                 if ((int.Parse(text_height.Text) % 16) != 0)\r
764                     text_height.BackColor = Color.LightCoral;\r
765                 else\r
766                     text_height.BackColor = Color.LightGreen;\r
767             }\r
768             catch (Exception)\r
769             {\r
770                 // No need to alert the user.\r
771             }\r
772         }\r
773         private void drp_crop_SelectedIndexChanged(object sender, EventArgs e)\r
774         {\r
775             if ((string)drp_crop.SelectedItem == "Custom")\r
776             {\r
777                 text_left.Enabled = true;\r
778                 text_right.Enabled = true;\r
779                 text_top.Enabled = true;\r
780                 text_bottom.Enabled = true;\r
781                 text_left.Text = "0";\r
782                 text_right.Text = "0";\r
783                 text_top.Text = "0";\r
784                 text_bottom.Text = "0";\r
785             }\r
786 \r
787             if ((string)drp_crop.SelectedItem == "Automatic")\r
788             {\r
789                 text_left.Enabled = false;\r
790                 text_right.Enabled = false;\r
791                 text_top.Enabled = false;\r
792                 text_bottom.Enabled = false;\r
793 \r
794                 if (lbl_RecomendedCrop.Text != "Select a Title")\r
795                 {\r
796                     string[] temp = new string[4];\r
797                     temp = lbl_RecomendedCrop.Text.Split('/');\r
798                     text_left.Text = temp[2];\r
799                     text_right.Text = temp[3];\r
800                     text_top.Text = temp[0];\r
801                     text_bottom.Text = temp[1];\r
802                 }\r
803                 else\r
804                 {\r
805                     text_left.Text = "";\r
806                     text_right.Text = "";\r
807                     text_top.Text = "";\r
808                     text_bottom.Text = "";\r
809                 }\r
810             }\r
811 \r
812             if ((string)drp_crop.SelectedItem == "No Crop")\r
813             {\r
814                 text_left.Enabled = false;\r
815                 text_right.Enabled = false;\r
816                 text_top.Enabled = false;\r
817                 text_bottom.Enabled = false;\r
818                 text_left.Text = "0";\r
819                 text_right.Text = "0";\r
820                 text_top.Text = "0";\r
821                 text_bottom.Text = "0";\r
822             }\r
823         }\r
824         private void check_vfr_CheckedChanged(object sender, EventArgs e)\r
825         {\r
826             if (check_vfr.CheckState == CheckState.Checked)\r
827             {\r
828                 check_detelecine.Enabled = false;\r
829                 check_detelecine.CheckState = CheckState.Checked;\r
830                 drp_videoFramerate.Enabled = false;\r
831                 drp_videoFramerate.SelectedItem = "29.97";\r
832                 lbl_vfr.Visible = true;\r
833             }\r
834             else\r
835             {\r
836                 check_detelecine.Enabled = true;\r
837                 drp_videoFramerate.Enabled = true;\r
838                 drp_videoFramerate.SelectedItem = "Automatic";\r
839                 lbl_vfr.Visible = false;\r
840             }\r
841         }\r
842         private void drp_anamorphic_SelectedIndexChanged(object sender, EventArgs e)\r
843         {\r
844             if (drp_anamorphic.SelectedIndex == 1)\r
845             {\r
846                 text_height.BackColor = Color.LightGray;\r
847                 text_width.BackColor = Color.LightGray;\r
848                 text_height.Text = "";\r
849                 text_width.Text = "";\r
850                 text_height.Enabled = false;\r
851                 text_width.Enabled = false;\r
852             }\r
853 \r
854             if (drp_anamorphic.SelectedIndex == 2)\r
855             {\r
856                 text_height.Text = "";\r
857                 text_height.Enabled = false;\r
858                 text_height.BackColor = Color.LightGray;\r
859 \r
860                 text_width.Enabled = true;\r
861                 text_width.BackColor = Color.White;\r
862             }\r
863 \r
864             if (drp_anamorphic.SelectedIndex == 0)\r
865             {\r
866                 text_height.BackColor = Color.White;\r
867                 text_width.BackColor = Color.White;\r
868                 text_height.Enabled = true;\r
869                 text_width.Enabled = true;\r
870             }\r
871         }\r
872 \r
873         // Audio Tab\r
874         private void drp_track1Audio_SelectedIndexChanged(object sender, EventArgs e)\r
875         {\r
876             if (drp_track1Audio.SelectedItem.Equals("None"))\r
877             {\r
878                 drp_audbit_1.Enabled = false;\r
879                 drp_audenc_1.Enabled = false;\r
880                 drp_audsr_1.Enabled = false;\r
881                 drp_audmix_1.Enabled = false;\r
882                 trackBar1.Enabled = false;\r
883                 drp_audbit_1.Text = "";\r
884                 drp_audenc_1.Text = "";\r
885                 drp_audsr_1.Text = "";\r
886                 drp_audmix_1.Text = "";\r
887                 trackBar1.Value = 0;\r
888             }\r
889             else\r
890             {\r
891                 drp_audbit_1.Enabled = true;\r
892                 drp_audenc_1.Enabled = true;\r
893                 drp_audsr_1.Enabled = true;\r
894                 drp_audmix_1.Enabled = true;\r
895                 trackBar1.Enabled = true;\r
896                 drp_audbit_1.Text = "160";\r
897                 drp_audenc_1.Text = "AAC";\r
898                 drp_audsr_1.Text = "48";\r
899                 drp_audmix_1.Text = "Automatic";\r
900             }\r
901         }\r
902         private void drp_track2Audio_SelectedIndexChanged(object sender, EventArgs e)\r
903         {\r
904             if (drp_track2Audio.SelectedItem.Equals("None"))\r
905             {\r
906                 drp_audbit_2.Enabled = false;\r
907                 drp_audenc_2.Enabled = false;\r
908                 drp_audsr_2.Enabled = false;\r
909                 drp_audmix_2.Enabled = false;\r
910                 trackBar2.Enabled = false;\r
911                 drp_audbit_2.Text = "";\r
912                 drp_audenc_2.Text = "";\r
913                 drp_audsr_2.Text = "";\r
914                 drp_audmix_2.Text = "";\r
915                 trackBar2.Value = 0;\r
916 \r
917                 // Disable the 3rd Track.\r
918                 drp_track3Audio.Visible = false;\r
919                 drp_audbit_3.Visible = false;\r
920                 drp_audenc_3.Visible = false;\r
921                 drp_audsr_3.Visible = false;\r
922                 drp_audmix_3.Visible = false;\r
923                 trackBar3.Visible = false;\r
924                 lbl_drc3.Visible = false;\r
925                 drp_audbit_3.Text = "";\r
926                 drp_audenc_3.Text = "";\r
927                 drp_audsr_3.Text = "";\r
928                 drp_audmix_3.Text = "Automatic";\r
929                 trackBar3.Value = 0;\r
930             }\r
931             else\r
932             {\r
933                 drp_audbit_2.Enabled = true;\r
934                 drp_audenc_2.Enabled = true;\r
935                 drp_audsr_2.Enabled = true;\r
936                 drp_audmix_2.Enabled = true;\r
937                 trackBar2.Enabled = true;\r
938                 drp_audbit_2.Text = "160";\r
939                 drp_audenc_2.Text = "AAC";\r
940                 drp_audsr_2.Text = "48";\r
941                 drp_audmix_2.Text = "Automatic";\r
942 \r
943                 // Enable the 3rd Track.\r
944                 drp_track3Audio.Visible = true;\r
945                 drp_audbit_3.Visible = true;\r
946                 drp_audenc_3.Visible = true;\r
947                 drp_audsr_3.Visible = true;\r
948                 drp_audmix_3.Visible = true;\r
949                 trackBar3.Visible = true;\r
950                 lbl_drc3.Visible = true;\r
951                 drp_audbit_3.Text = "";\r
952                 drp_audenc_3.Text = "";\r
953                 drp_audsr_3.Text = "";\r
954                 drp_audmix_3.Text = "";\r
955             }\r
956         }\r
957         private void drp_track3Audio_SelectedIndexChanged(object sender, EventArgs e)\r
958         {\r
959             if (drp_track3Audio.SelectedItem.Equals("None"))\r
960             {\r
961                 drp_audbit_3.Enabled = false;\r
962                 drp_audenc_3.Enabled = false;\r
963                 drp_audsr_3.Enabled = false;\r
964                 drp_audmix_3.Enabled = false;\r
965                 trackBar3.Enabled = false;\r
966                 drp_audbit_3.Text = "";\r
967                 drp_audenc_3.Text = "";\r
968                 drp_audsr_3.Text = "";\r
969                 drp_audmix_3.Text = "";\r
970                 trackBar3.Value = 0;\r
971 \r
972                 // Disable the 4th Track.\r
973                 drp_track4Audio.Visible = false;\r
974                 drp_audbit_4.Visible = false;\r
975                 drp_audenc_4.Visible = false;\r
976                 drp_audsr_4.Visible = false;\r
977                 drp_audmix_4.Visible = false;\r
978                 trackBar4.Visible = false;\r
979                 lbl_drc4.Visible = false;\r
980                 drp_audbit_4.Text = "";\r
981                 drp_audenc_4.Text = "";\r
982                 drp_audsr_4.Text = "";\r
983                 drp_audmix_4.Text = "Automatic";\r
984                 \r
985             }\r
986             else\r
987             {\r
988                 drp_audbit_3.Enabled = true;\r
989                 drp_audenc_3.Enabled = true;\r
990                 drp_audsr_3.Enabled = true;\r
991                 drp_audmix_3.Enabled = true;\r
992                 trackBar3.Enabled = true;\r
993                 drp_audbit_3.Text = "160";\r
994                 drp_audenc_3.Text = "AAC";\r
995                 drp_audsr_3.Text = "48";\r
996                 drp_audmix_3.Text = "Automatic";\r
997 \r
998                 // Enable the 4th Track.\r
999                 drp_track4Audio.Visible = true;\r
1000                 drp_audbit_4.Visible = true;\r
1001                 drp_audenc_4.Visible = true;\r
1002                 drp_audsr_4.Visible = true;\r
1003                 drp_audmix_4.Visible = true;\r
1004                 trackBar4.Visible = true;\r
1005                 lbl_drc4.Visible = true;\r
1006                 drp_audbit_4.Text = "";\r
1007                 drp_audenc_4.Text = "";\r
1008                 drp_audsr_4.Text = "";\r
1009                 drp_audmix_4.Text = "";\r
1010             }\r
1011             \r
1012         }\r
1013         private void drp_track4Audio_SelectedIndexChanged(object sender, EventArgs e)\r
1014         {\r
1015             if (drp_track4Audio.SelectedItem.Equals("None"))\r
1016             {\r
1017                 drp_audbit_4.Enabled = false;\r
1018                 drp_audenc_4.Enabled = false;\r
1019                 drp_audsr_4.Enabled = false;\r
1020                 drp_audmix_4.Enabled = false;\r
1021                 trackBar4.Enabled = false;\r
1022                 drp_audbit_4.Text = "";\r
1023                 drp_audenc_4.Text = "";\r
1024                 drp_audsr_4.Text = "";\r
1025                 drp_audmix_4.Text = "";\r
1026                 trackBar4.Value = 0;\r
1027             }\r
1028             else\r
1029             {\r
1030                 drp_audbit_4.Enabled = true;\r
1031                 drp_audenc_4.Enabled = true;\r
1032                 drp_audsr_4.Enabled = true;\r
1033                 drp_audmix_4.Enabled = true;\r
1034                 trackBar4.Enabled = true;\r
1035                 drp_audbit_4.Text = "160";\r
1036                 drp_audenc_4.Text = "AAC";\r
1037                 drp_audsr_4.Text = "48";\r
1038                 drp_audmix_4.Text = "Automatic";\r
1039             }\r
1040         }\r
1041 \r
1042         private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e)\r
1043         {\r
1044             if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))\r
1045             {\r
1046                 drp_audbit_1.Items.Clear();\r
1047                 drp_audbit_1.Items.Add("32");\r
1048                 drp_audbit_1.Items.Add("40");\r
1049                 drp_audbit_1.Items.Add("48");\r
1050                 drp_audbit_1.Items.Add("56");\r
1051                 drp_audbit_1.Items.Add("64");\r
1052                 drp_audbit_1.Items.Add("80");\r
1053                 drp_audbit_1.Items.Add("86");\r
1054                 drp_audbit_1.Items.Add("112");\r
1055                 drp_audbit_1.Items.Add("128");\r
1056                 drp_audbit_1.Items.Add("160");\r
1057                 drp_audbit_1.Items.Add("192");\r
1058                 drp_audbit_1.Items.Add("224");\r
1059                 drp_audbit_1.Items.Add("256");\r
1060                 drp_audbit_1.Items.Add("320");\r
1061                 drp_audbit_1.Items.Add("384");\r
1062             }\r
1063             else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete"))\r
1064             {\r
1065                 drp_audbit_1.Items.Clear();\r
1066                 drp_audbit_1.Items.Add("32");\r
1067                 drp_audbit_1.Items.Add("40");\r
1068                 drp_audbit_1.Items.Add("48");\r
1069                 drp_audbit_1.Items.Add("56");\r
1070                 drp_audbit_1.Items.Add("64");\r
1071                 drp_audbit_1.Items.Add("80");\r
1072                 drp_audbit_1.Items.Add("86");\r
1073                 drp_audbit_1.Items.Add("112");\r
1074                 drp_audbit_1.Items.Add("128");\r
1075                 drp_audbit_1.Items.Add("160");\r
1076                 drp_audbit_1.Text = "160";\r
1077             }\r
1078         }\r
1079         private void drp_audmix_2_SelectedIndexChanged(object sender, EventArgs e)\r
1080         {\r
1081             if (drp_audmix_1.Text == "Automatic")\r
1082                 MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1083 \r
1084             if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text == "6 Channel Discrete"))\r
1085             {\r
1086                 drp_audbit_2.Items.Clear();\r
1087                 drp_audbit_2.Items.Add("32");\r
1088                 drp_audbit_2.Items.Add("40");\r
1089                 drp_audbit_2.Items.Add("48");\r
1090                 drp_audbit_2.Items.Add("56");\r
1091                 drp_audbit_2.Items.Add("64");\r
1092                 drp_audbit_2.Items.Add("80");\r
1093                 drp_audbit_2.Items.Add("86");\r
1094                 drp_audbit_2.Items.Add("112");\r
1095                 drp_audbit_2.Items.Add("128");\r
1096                 drp_audbit_2.Items.Add("160");\r
1097                 drp_audbit_2.Items.Add("192");\r
1098                 drp_audbit_2.Items.Add("224");\r
1099                 drp_audbit_2.Items.Add("256");\r
1100                 drp_audbit_2.Items.Add("320");\r
1101                 drp_audbit_2.Items.Add("384");\r
1102             }\r
1103             else if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text != "6 Channel Discrete"))\r
1104             {\r
1105                 drp_audbit_2.Items.Clear();\r
1106                 drp_audbit_2.Items.Add("32");\r
1107                 drp_audbit_2.Items.Add("40");\r
1108                 drp_audbit_2.Items.Add("48");\r
1109                 drp_audbit_2.Items.Add("56");\r
1110                 drp_audbit_2.Items.Add("64");\r
1111                 drp_audbit_2.Items.Add("80");\r
1112                 drp_audbit_2.Items.Add("86");\r
1113                 drp_audbit_2.Items.Add("112");\r
1114                 drp_audbit_2.Items.Add("128");\r
1115                 drp_audbit_2.Items.Add("160");\r
1116                 drp_audbit_2.Text = "160";\r
1117             }\r
1118         }\r
1119         private void drp_audmix_3_SelectedIndexChanged(object sender, EventArgs e)\r
1120         {\r
1121             if (drp_audmix_2.Text == "Automatic")\r
1122                 MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1123 \r
1124             if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text == "6 Channel Discrete"))\r
1125             {\r
1126                 drp_audbit_3.Items.Clear();\r
1127                 drp_audbit_3.Items.Add("32");\r
1128                 drp_audbit_3.Items.Add("40");\r
1129                 drp_audbit_3.Items.Add("48");\r
1130                 drp_audbit_3.Items.Add("56");\r
1131                 drp_audbit_3.Items.Add("64");\r
1132                 drp_audbit_3.Items.Add("80");\r
1133                 drp_audbit_3.Items.Add("86");\r
1134                 drp_audbit_3.Items.Add("112");\r
1135                 drp_audbit_3.Items.Add("128");\r
1136                 drp_audbit_3.Items.Add("160");\r
1137                 drp_audbit_3.Items.Add("192");\r
1138                 drp_audbit_3.Items.Add("224");\r
1139                 drp_audbit_3.Items.Add("256");\r
1140                 drp_audbit_3.Items.Add("320");\r
1141                 drp_audbit_3.Items.Add("384");\r
1142             }\r
1143             else if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text != "6 Channel Discrete"))\r
1144             {\r
1145                 drp_audbit_3.Items.Clear();\r
1146                 drp_audbit_3.Items.Add("32");\r
1147                 drp_audbit_3.Items.Add("40");\r
1148                 drp_audbit_3.Items.Add("48");\r
1149                 drp_audbit_3.Items.Add("56");\r
1150                 drp_audbit_3.Items.Add("64");\r
1151                 drp_audbit_3.Items.Add("80");\r
1152                 drp_audbit_3.Items.Add("86");\r
1153                 drp_audbit_3.Items.Add("112");\r
1154                 drp_audbit_3.Items.Add("128");\r
1155                 drp_audbit_3.Items.Add("160");\r
1156                 drp_audbit_3.Text = "160";\r
1157             }\r
1158         }\r
1159         private void drp_audmix_4_SelectedIndexChanged(object sender, EventArgs e)\r
1160         {\r
1161             if (drp_audmix_3.Text == "Automatic")\r
1162                 MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1163 \r
1164             if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text == "6 Channel Discrete"))\r
1165             {\r
1166                 drp_audbit_4.Items.Clear();\r
1167                 drp_audbit_4.Items.Add("32");\r
1168                 drp_audbit_4.Items.Add("40");\r
1169                 drp_audbit_4.Items.Add("48");\r
1170                 drp_audbit_4.Items.Add("56");\r
1171                 drp_audbit_4.Items.Add("64");\r
1172                 drp_audbit_4.Items.Add("80");\r
1173                 drp_audbit_4.Items.Add("86");\r
1174                 drp_audbit_4.Items.Add("112");\r
1175                 drp_audbit_4.Items.Add("128");\r
1176                 drp_audbit_4.Items.Add("160");\r
1177                 drp_audbit_4.Items.Add("192");\r
1178                 drp_audbit_4.Items.Add("224");\r
1179                 drp_audbit_4.Items.Add("256");\r
1180                 drp_audbit_4.Items.Add("320");\r
1181                 drp_audbit_4.Items.Add("384");\r
1182             }\r
1183             else if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text != "6 Channel Discrete"))\r
1184             {\r
1185                 drp_audbit_4.Items.Clear();\r
1186                 drp_audbit_4.Items.Add("32");\r
1187                 drp_audbit_4.Items.Add("40");\r
1188                 drp_audbit_4.Items.Add("48");\r
1189                 drp_audbit_4.Items.Add("56");\r
1190                 drp_audbit_4.Items.Add("64");\r
1191                 drp_audbit_4.Items.Add("80");\r
1192                 drp_audbit_4.Items.Add("86");\r
1193                 drp_audbit_4.Items.Add("112");\r
1194                 drp_audbit_4.Items.Add("128");\r
1195                 drp_audbit_4.Items.Add("160");\r
1196                 drp_audbit_4.Text = "160";\r
1197             }\r
1198         }\r
1199 \r
1200         private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)\r
1201         {\r
1202             if (drp_audenc_1.Text == "AC3")\r
1203             {\r
1204                 drp_audmix_1.Enabled = false;\r
1205                 drp_audbit_1.Enabled = false;\r
1206                 drp_audsr_1.Enabled = false;\r
1207             }\r
1208             else\r
1209             {\r
1210                 drp_audmix_1.Enabled = true;\r
1211                 drp_audbit_1.Enabled = true;\r
1212                 drp_audsr_1.Enabled = true;\r
1213 \r
1214                 drp_audmix_1.Text = "Automatic";\r
1215                 drp_audbit_1.Text = "160";\r
1216                 drp_audsr_1.Text = "48";\r
1217             }\r
1218 \r
1219 \r
1220             if (drp_audenc_1.Text == "AAC")\r
1221             {\r
1222                 drp_audmix_1.Items.Clear();\r
1223                 drp_audmix_1.Items.Add("Mono");\r
1224                 drp_audmix_1.Items.Add("Stereo");\r
1225                 drp_audmix_1.Items.Add("Dolby Surround");\r
1226                 drp_audmix_1.Items.Add("Dolby Pro Logic II");\r
1227                 drp_audmix_1.Items.Add("6 Channel Discrete");\r
1228 \r
1229                 drp_audbit_1.Items.Clear();\r
1230                 drp_audbit_1.Items.Add("32");\r
1231                 drp_audbit_1.Items.Add("40");\r
1232                 drp_audbit_1.Items.Add("48");\r
1233                 drp_audbit_1.Items.Add("56");\r
1234                 drp_audbit_1.Items.Add("64");\r
1235                 drp_audbit_1.Items.Add("80");\r
1236                 drp_audbit_1.Items.Add("86");\r
1237                 drp_audbit_1.Items.Add("112");\r
1238                 drp_audbit_1.Items.Add("128");\r
1239                 drp_audbit_1.Items.Add("160");\r
1240 \r
1241             }\r
1242             else\r
1243             {\r
1244                 drp_audmix_1.Items.Clear();\r
1245                 drp_audmix_1.Items.Add("Stereo");\r
1246                 drp_audmix_1.Items.Add("Dolby Surround");\r
1247                 drp_audmix_1.Items.Add("Dolby Pro Logic II");\r
1248 \r
1249                 drp_audbit_1.Items.Clear();\r
1250                 drp_audbit_1.Items.Add("32");\r
1251                 drp_audbit_1.Items.Add("40");\r
1252                 drp_audbit_1.Items.Add("48");\r
1253                 drp_audbit_1.Items.Add("56");\r
1254                 drp_audbit_1.Items.Add("64");\r
1255                 drp_audbit_1.Items.Add("80");\r
1256                 drp_audbit_1.Items.Add("86");\r
1257                 drp_audbit_1.Items.Add("112");\r
1258                 drp_audbit_1.Items.Add("128");\r
1259                 drp_audbit_1.Items.Add("160");\r
1260                 drp_audbit_1.Items.Add("192");\r
1261                 drp_audbit_1.Items.Add("224");\r
1262                 drp_audbit_1.Items.Add("256");\r
1263                 drp_audbit_1.Items.Add("320");\r
1264             }\r
1265         }\r
1266         private void drp_audenc_2_SelectedIndexChanged(object sender, EventArgs e)\r
1267         {\r
1268             if (drp_audenc_2.Text == "AC3")\r
1269             {\r
1270                 drp_audmix_2.Enabled = false;\r
1271                 drp_audbit_2.Enabled = false;\r
1272                 drp_audsr_2.Enabled = false;\r
1273 \r
1274                 drp_audmix_2.Text = "Automatic";\r
1275                 drp_audbit_2.Text = "160";\r
1276                 drp_audsr_2.Text = "48";\r
1277             }\r
1278             else\r
1279             {\r
1280                 // Just make sure not to re-enable the following boxes if the track2 is none\r
1281                 if (drp_track2Audio.Text != "None")\r
1282                 {\r
1283                     drp_audmix_2.Enabled = true;\r
1284                     drp_audbit_2.Enabled = true;\r
1285                     drp_audsr_2.Enabled = true;\r
1286 \r
1287                     drp_audmix_2.Text = "Automatic";\r
1288                     drp_audbit_2.Text = "160";\r
1289                     drp_audsr_2.Text = "48";\r
1290                 }\r
1291             }\r
1292 \r
1293             if (drp_audenc_2.Text == "AAC")\r
1294             {\r
1295                 drp_audmix_2.Items.Clear();\r
1296                 drp_audmix_2.Items.Add("Mono");\r
1297                 drp_audmix_2.Items.Add("Stereo");\r
1298                 drp_audmix_2.Items.Add("Dolby Surround");\r
1299                 drp_audmix_2.Items.Add("Dolby Pro Logic II");\r
1300                 drp_audmix_2.Items.Add("6 Channel Discrete");\r
1301 \r
1302                 drp_audbit_2.Items.Clear();\r
1303                 drp_audbit_2.Items.Add("32");\r
1304                 drp_audbit_2.Items.Add("40");\r
1305                 drp_audbit_2.Items.Add("48");\r
1306                 drp_audbit_2.Items.Add("56");\r
1307                 drp_audbit_2.Items.Add("64");\r
1308                 drp_audbit_2.Items.Add("80");\r
1309                 drp_audbit_2.Items.Add("86");\r
1310                 drp_audbit_2.Items.Add("112");\r
1311                 drp_audbit_2.Items.Add("128");\r
1312                 drp_audbit_2.Items.Add("160");\r
1313 \r
1314             }\r
1315             else\r
1316             {\r
1317                 drp_audmix_2.Items.Clear();\r
1318                 drp_audmix_2.Items.Add("Stereo");\r
1319                 drp_audmix_2.Items.Add("Dolby Surround");\r
1320                 drp_audmix_2.Items.Add("Dolby Pro Logic II");\r
1321 \r
1322                 drp_audbit_2.Items.Clear();\r
1323                 drp_audbit_2.Items.Add("32");\r
1324                 drp_audbit_2.Items.Add("40");\r
1325                 drp_audbit_2.Items.Add("48");\r
1326                 drp_audbit_2.Items.Add("56");\r
1327                 drp_audbit_2.Items.Add("64");\r
1328                 drp_audbit_2.Items.Add("80");\r
1329                 drp_audbit_2.Items.Add("86");\r
1330                 drp_audbit_2.Items.Add("112");\r
1331                 drp_audbit_2.Items.Add("128");\r
1332                 drp_audbit_2.Items.Add("160");\r
1333                 drp_audbit_2.Items.Add("192");\r
1334                 drp_audbit_2.Items.Add("224");\r
1335                 drp_audbit_2.Items.Add("256");\r
1336                 drp_audbit_2.Items.Add("320");\r
1337             }\r
1338         }\r
1339         private void drp_audenc_3_SelectedIndexChanged(object sender, EventArgs e)\r
1340         {\r
1341             if (drp_audenc_3.Text == "AC3")\r
1342             {\r
1343                 drp_audmix_3.Enabled = false;\r
1344                 drp_audbit_3.Enabled = false;\r
1345                 drp_audsr_3.Enabled = false;\r
1346 \r
1347                 drp_audmix_3.Text = "Automatic";\r
1348                 drp_audbit_3.Text = "160";\r
1349                 drp_audsr_3.Text = "48";\r
1350             }\r
1351             else\r
1352             {\r
1353                 // Just make sure not to re-enable the following boxes if the track above is none\r
1354                 if (drp_track2Audio.Text != "None")\r
1355                 {\r
1356                     drp_audmix_3.Enabled = true;\r
1357                     drp_audbit_3.Enabled = true;\r
1358                     drp_audsr_3.Enabled = true;\r
1359 \r
1360                     drp_audmix_3.Text = "Automatic";\r
1361                     drp_audbit_3.Text = "160";\r
1362                     drp_audsr_3.Text = "48";\r
1363                 }\r
1364             }\r
1365 \r
1366 \r
1367             if (drp_audenc_3.Text == "AAC")\r
1368             {\r
1369                 drp_audmix_3.Items.Clear();\r
1370                 drp_audmix_3.Items.Add("Mono");\r
1371                 drp_audmix_3.Items.Add("Stereo");\r
1372                 drp_audmix_3.Items.Add("Dolby Surround");\r
1373                 drp_audmix_3.Items.Add("Dolby Pro Logic II");\r
1374                 drp_audmix_3.Items.Add("6 Channel Discrete");\r
1375 \r
1376                 drp_audbit_3.Items.Clear();\r
1377                 drp_audbit_3.Items.Add("32");\r
1378                 drp_audbit_3.Items.Add("40");\r
1379                 drp_audbit_3.Items.Add("48");\r
1380                 drp_audbit_3.Items.Add("56");\r
1381                 drp_audbit_3.Items.Add("64");\r
1382                 drp_audbit_3.Items.Add("80");\r
1383                 drp_audbit_3.Items.Add("86");\r
1384                 drp_audbit_3.Items.Add("112");\r
1385                 drp_audbit_3.Items.Add("128");\r
1386                 drp_audbit_3.Items.Add("160");\r
1387 \r
1388             }\r
1389             else\r
1390             {\r
1391                 drp_audmix_3.Items.Clear();\r
1392                 drp_audmix_3.Items.Add("Stereo");\r
1393                 drp_audmix_3.Items.Add("Dolby Surround");\r
1394                 drp_audmix_3.Items.Add("Dolby Pro Logic II");\r
1395 \r
1396                 drp_audbit_3.Items.Clear();\r
1397                 drp_audbit_3.Items.Add("32");\r
1398                 drp_audbit_3.Items.Add("40");\r
1399                 drp_audbit_3.Items.Add("48");\r
1400                 drp_audbit_3.Items.Add("56");\r
1401                 drp_audbit_3.Items.Add("64");\r
1402                 drp_audbit_3.Items.Add("80");\r
1403                 drp_audbit_3.Items.Add("86");\r
1404                 drp_audbit_3.Items.Add("112");\r
1405                 drp_audbit_3.Items.Add("128");\r
1406                 drp_audbit_3.Items.Add("160");\r
1407                 drp_audbit_3.Items.Add("192");\r
1408                 drp_audbit_3.Items.Add("224");\r
1409                 drp_audbit_3.Items.Add("256");\r
1410                 drp_audbit_3.Items.Add("320");\r
1411             }\r
1412         }\r
1413         private void drp_audenc_4_SelectedIndexChanged(object sender, EventArgs e)\r
1414         {\r
1415             if (drp_audenc_4.Text == "AC3")\r
1416             {\r
1417                 drp_audmix_4.Enabled = false;\r
1418                 drp_audbit_4.Enabled = false;\r
1419                 drp_audsr_4.Enabled = false;\r
1420 \r
1421                 drp_audmix_4.Text = "Automatic";\r
1422                 drp_audbit_4.Text = "160";\r
1423                 drp_audsr_4.Text = "48";\r
1424             }\r
1425             else\r
1426             {\r
1427                 // Just make sure not to re-enable the following boxes if the track above is none\r
1428                 if (drp_track2Audio.Text != "None")\r
1429                 {\r
1430                     drp_audmix_4.Enabled = true;\r
1431                     drp_audbit_4.Enabled = true;\r
1432                     drp_audsr_4.Enabled = true;\r
1433 \r
1434                     drp_audmix_4.Text = "Automatic";\r
1435                     drp_audbit_4.Text = "160";\r
1436                     drp_audsr_4.Text = "48";\r
1437                 }\r
1438             }\r
1439 \r
1440 \r
1441             if (drp_audenc_4.Text == "AAC")\r
1442             {\r
1443                 drp_audmix_4.Items.Clear();\r
1444                 drp_audmix_4.Items.Add("Mono");\r
1445                 drp_audmix_4.Items.Add("Stereo");\r
1446                 drp_audmix_4.Items.Add("Dolby Surround");\r
1447                 drp_audmix_4.Items.Add("Dolby Pro Logic II");\r
1448                 drp_audmix_4.Items.Add("6 Channel Discrete");\r
1449 \r
1450                 drp_audbit_4.Items.Clear();\r
1451                 drp_audbit_4.Items.Add("32");\r
1452                 drp_audbit_4.Items.Add("40");\r
1453                 drp_audbit_4.Items.Add("48");\r
1454                 drp_audbit_4.Items.Add("56");\r
1455                 drp_audbit_4.Items.Add("64");\r
1456                 drp_audbit_4.Items.Add("80");\r
1457                 drp_audbit_4.Items.Add("86");\r
1458                 drp_audbit_4.Items.Add("112");\r
1459                 drp_audbit_4.Items.Add("128");\r
1460                 drp_audbit_4.Items.Add("160");\r
1461 \r
1462             }\r
1463             else\r
1464             {\r
1465                 drp_audmix_4.Items.Clear();\r
1466                 drp_audmix_4.Items.Add("Stereo");\r
1467                 drp_audmix_4.Items.Add("Dolby Surround");\r
1468                 drp_audmix_4.Items.Add("Dolby Pro Logic II");\r
1469 \r
1470                 drp_audbit_4.Items.Clear();\r
1471                 drp_audbit_4.Items.Add("32");\r
1472                 drp_audbit_4.Items.Add("40");\r
1473                 drp_audbit_4.Items.Add("48");\r
1474                 drp_audbit_4.Items.Add("56");\r
1475                 drp_audbit_4.Items.Add("64");\r
1476                 drp_audbit_4.Items.Add("80");\r
1477                 drp_audbit_4.Items.Add("86");\r
1478                 drp_audbit_4.Items.Add("112");\r
1479                 drp_audbit_4.Items.Add("128");\r
1480                 drp_audbit_4.Items.Add("160");\r
1481                 drp_audbit_4.Items.Add("192");\r
1482                 drp_audbit_4.Items.Add("224");\r
1483                 drp_audbit_4.Items.Add("256");\r
1484                 drp_audbit_4.Items.Add("320");\r
1485             }\r
1486         }\r
1487 \r
1488         private void trackBar1_Scroll(object sender, EventArgs e)\r
1489         {\r
1490             double value = trackBar1.Value / 10.0;\r
1491             value++;\r
1492 \r
1493             lbl_drc1.Text = value.ToString();\r
1494         }\r
1495         private void trackBar2_Scroll(object sender, EventArgs e)\r
1496         {\r
1497             double value = trackBar2.Value / 10.0;\r
1498             value++;\r
1499 \r
1500             lbl_drc2.Text = value.ToString();\r
1501         }\r
1502         private void trackBar3_Scroll(object sender, EventArgs e)\r
1503         {\r
1504             double value = trackBar3.Value / 10.0;\r
1505             value++;\r
1506 \r
1507             lbl_drc3.Text = value.ToString();\r
1508         }\r
1509         private void trackBar4_Scroll(object sender, EventArgs e)\r
1510         {\r
1511             double value = trackBar4.Value / 10.0;\r
1512             value++;\r
1513 \r
1514             lbl_drc4.Text = value.ToString();\r
1515         }\r
1516 \r
1517         private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e)\r
1518         {\r
1519             if (drp_subtitle.Text.Contains("None"))\r
1520             {\r
1521                 check_forced.Enabled = false;\r
1522                 check_forced.Checked = false;\r
1523             }\r
1524             else\r
1525                 check_forced.Enabled = true;\r
1526         }\r
1527 \r
1528         // Chapter Marker Tab\r
1529         private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)\r
1530         {\r
1531             if (Check_ChapterMarkers.Checked)\r
1532             {\r
1533                 string destination = text_destination.Text;\r
1534                 destination = destination.Replace(".mp4", ".m4v");\r
1535                 text_destination.Text = destination;\r
1536                 data_chpt.Rows.Clear();\r
1537                 data_chpt.Enabled = true;\r
1538                 hb_common_func.chapterNaming(this);\r
1539             }\r
1540             else\r
1541             {\r
1542                 string destination = text_destination.Text;\r
1543                 destination = destination.Replace(".m4v", ".mp4");\r
1544                 text_destination.Text = destination;\r
1545                 data_chpt.Rows.Clear();\r
1546                 data_chpt.Enabled = false;\r
1547             }\r
1548         }\r
1549 \r
1550         // Advanced Tab\r
1551         private void drop_refFrames_SelectedIndexChanged(object sender, EventArgs e)\r
1552         {\r
1553             x264PanelFunctions.on_x264_WidgetChange("ref", this);\r
1554         }\r
1555         private void check_mixedReferences_CheckedChanged(object sender, EventArgs e)\r
1556         {\r
1557             x264PanelFunctions.on_x264_WidgetChange("mixed-refs", this);\r
1558         }\r
1559         private void drop_bFrames_SelectedIndexChanged(object sender, EventArgs e)\r
1560         {\r
1561             x264PanelFunctions.on_x264_WidgetChange("bframes", this);\r
1562         }\r
1563         private void drop_directPrediction_SelectedIndexChanged(object sender, EventArgs e)\r
1564         {\r
1565             x264PanelFunctions.on_x264_WidgetChange("direct", this);\r
1566         }\r
1567         private void check_weightedBFrames_CheckedChanged(object sender, EventArgs e)\r
1568         {\r
1569             x264PanelFunctions.on_x264_WidgetChange("weightb", this);\r
1570         }\r
1571         private void check_bFrameDistortion_CheckedChanged(object sender, EventArgs e)\r
1572         {\r
1573             x264PanelFunctions.on_x264_WidgetChange("brdo", this);\r
1574         }\r
1575         private void check_BidirectionalRefinement_CheckedChanged(object sender, EventArgs e)\r
1576         {\r
1577             x264PanelFunctions.on_x264_WidgetChange("bime", this);\r
1578         }\r
1579         private void check_pyrmidalBFrames_CheckedChanged(object sender, EventArgs e)\r
1580         {\r
1581             x264PanelFunctions.on_x264_WidgetChange("b-pyramid", this);\r
1582         }\r
1583         private void drop_MotionEstimationMethod_SelectedIndexChanged(object sender, EventArgs e)\r
1584         {\r
1585             x264PanelFunctions.on_x264_WidgetChange("me", this);\r
1586         }\r
1587         private void drop_MotionEstimationRange_SelectedIndexChanged(object sender, EventArgs e)\r
1588         {\r
1589             x264PanelFunctions.on_x264_WidgetChange("merange", this);\r
1590         }\r
1591         private void drop_subpixelMotionEstimation_SelectedIndexChanged(object sender, EventArgs e)\r
1592         {\r
1593             x264PanelFunctions.on_x264_WidgetChange("subq", this);\r
1594         }\r
1595         private void drop_analysis_SelectedIndexChanged(object sender, EventArgs e)\r
1596         {\r
1597             x264PanelFunctions.on_x264_WidgetChange("analyse", this);\r
1598         }\r
1599         private void check_8x8DCT_CheckedChanged(object sender, EventArgs e)\r
1600         {\r
1601             x264PanelFunctions.on_x264_WidgetChange("8x8dct", this);\r
1602         }\r
1603         private void drop_deblockAlpha_SelectedIndexChanged(object sender, EventArgs e)\r
1604         {\r
1605             x264PanelFunctions.on_x264_WidgetChange("deblock", this);\r
1606 \r
1607         }\r
1608         private void drop_deblockBeta_SelectedIndexChanged(object sender, EventArgs e)\r
1609         {\r
1610             x264PanelFunctions.on_x264_WidgetChange("deblock", this);\r
1611 \r
1612         }\r
1613         private void drop_trellis_SelectedIndexChanged(object sender, EventArgs e)\r
1614         {\r
1615             x264PanelFunctions.on_x264_WidgetChange("trellis", this);\r
1616         }\r
1617         private void check_noFastPSkip_CheckedChanged(object sender, EventArgs e)\r
1618         {\r
1619             x264PanelFunctions.on_x264_WidgetChange("no-fast-pskip", this);\r
1620         }\r
1621         private void check_noDCTDecimate_CheckedChanged(object sender, EventArgs e)\r
1622         {\r
1623             x264PanelFunctions.on_x264_WidgetChange("no-dct-decimate", this);\r
1624 \r
1625         }\r
1626         private void check_Cabac_CheckedChanged(object sender, EventArgs e)\r
1627         {\r
1628             x264PanelFunctions.on_x264_WidgetChange("cabac", this);\r
1629         }\r
1630 \r
1631         private void rtf_x264Query_TextChanged(object sender, EventArgs e)\r
1632         {\r
1633             if (rtf_x264Query.Text.EndsWith("\n"))\r
1634             {\r
1635                 rtf_x264Query.Text = rtf_x264Query.Text.Replace("\n", "");\r
1636                 x264PanelFunctions.X264_StandardizeOptString(this);\r
1637                 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);\r
1638 \r
1639                 if (rtf_x264Query.Text == "")\r
1640                     x264PanelFunctions.reset2Defaults(this);\r
1641             }\r
1642         }\r
1643         private void btn_reset_Click(object sender, EventArgs e)\r
1644         {\r
1645             rtf_x264Query.Text = "";\r
1646             x264PanelFunctions.reset2Defaults(this);\r
1647         }\r
1648 \r
1649         // Query Editor Tab\r
1650         private void btn_generate_Query_Click(object sender, EventArgs e)\r
1651         {\r
1652             rtf_query.Text = hb_common_func.GenerateTheQuery(this);\r
1653         }\r
1654         private void btn_clear_Click(object sender, EventArgs e)\r
1655         {\r
1656             rtf_query.Clear();\r
1657         }\r
1658         private void btn_copy2C_Click(object sender, EventArgs e)\r
1659         {\r
1660             if (rtf_query.Text != "")\r
1661                 Clipboard.SetText(rtf_query.Text, TextDataFormat.Text);\r
1662         }\r
1663 \r
1664         // Presets\r
1665         private void btn_addPreset_Click(object sender, EventArgs e)\r
1666         {\r
1667             Form preset = new frmAddPreset(this);\r
1668             preset.ShowDialog();\r
1669         }\r
1670         private void btn_removePreset_Click(object sender, EventArgs e)\r
1671         {\r
1672             ArrayList user_presets = new ArrayList();\r
1673             ArrayList modified_presets_list = new ArrayList();\r
1674             string selectedPreset = null;\r
1675             selectedPreset = treeView_presets.SelectedNode.Text;\r
1676 \r
1677             if (!selectedPreset.StartsWith("--"))\r
1678                 MessageBox.Show("Sorry, You can not remove any of the built in presets.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1679 \r
1680 \r
1681             // Scan through the users presets and dump them all in an arraylist\r
1682             string userPresets = Application.StartupPath.ToString() + "\\user_presets.dat";\r
1683             if (File.Exists(userPresets))\r
1684             {\r
1685                 StreamReader presetInput = new StreamReader(userPresets);\r
1686                 while (!presetInput.EndOfStream)\r
1687                 {\r
1688                     if ((char)presetInput.Peek() == '+')\r
1689                     {\r
1690                         string item = presetInput.ReadLine();\r
1691                         user_presets.Add(item);\r
1692                         modified_presets_list.Add(item);\r
1693                     }\r
1694                     else\r
1695                         presetInput.ReadLine();\r
1696                 }\r
1697 \r
1698                 presetInput.Close();\r
1699                 presetInput.Dispose();\r
1700             }\r
1701 \r
1702             // now lets scan through the arraylist and remove the preset with the\r
1703             // same name as the one selected.\r
1704             int c = 0;\r
1705             foreach (string item in user_presets)\r
1706             {\r
1707                 string preset_name = selectedPreset.Replace("--", "");\r
1708                 if (item.Contains(preset_name))\r
1709                     modified_presets_list.RemoveAt(c);\r
1710                 c++;\r
1711             }\r
1712 \r
1713             // Now we need to rebuilt the user presets file.\r
1714             StreamWriter line = new StreamWriter(userPresets);\r
1715             foreach (string item in modified_presets_list)\r
1716             {\r
1717                 line.WriteLine(item);\r
1718             }\r
1719             line.Close();\r
1720             line.Dispose();\r
1721 \r
1722             // Now reload the preset panel\r
1723             loadPresetPanel();\r
1724         }\r
1725         private void btn_setDefault_Click(object sender, EventArgs e)\r
1726         {\r
1727             String query = hb_common_func.GenerateTheQuery(this);\r
1728             Properties.Settings.Default.defaultUserSettings = query;\r
1729             // Save the new default Settings\r
1730             Properties.Settings.Default.Save();\r
1731             MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
1732         }\r
1733         private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)\r
1734         {\r
1735             //When the user select a preset from the treeview, load it\r
1736             try\r
1737             {\r
1738                 // Scan through the built in presets\r
1739                 string builtInPresets = Application.StartupPath.ToString() + "\\presets.dat";\r
1740                 if (File.Exists(builtInPresets))\r
1741                 {\r
1742                     StreamReader presetInput = new StreamReader(builtInPresets);\r
1743                     while (!presetInput.EndOfStream)\r
1744                     {\r
1745                         if ((char)presetInput.Peek() == '+')\r
1746                         {\r
1747                             string preset = presetInput.ReadLine().Replace("+ ", "");\r
1748                             checkSelectedPreset(preset);\r
1749                         }\r
1750                         else\r
1751                             presetInput.ReadLine();\r
1752                     }\r
1753 \r
1754                     presetInput.Close();\r
1755                 }\r
1756 \r
1757                 // Scan through the users presets\r
1758                 string userPresets = Application.StartupPath.ToString() + "\\user_presets.dat";\r
1759                 if (File.Exists(userPresets))\r
1760                 {\r
1761                     StreamReader presetInput = new StreamReader(userPresets);\r
1762                     while (!presetInput.EndOfStream)\r
1763                     {\r
1764                         if ((char)presetInput.Peek() == '+')\r
1765                         {\r
1766                             string preset = presetInput.ReadLine().Replace("+ ", "");\r
1767                             checkSelectedPreset(preset);\r
1768                         }\r
1769                         else\r
1770                             presetInput.ReadLine();\r
1771                     }\r
1772 \r
1773                     presetInput.Close();\r
1774                     presetInput.Dispose();\r
1775                 }\r
1776             }\r
1777             catch (Exception exc)\r
1778             {\r
1779                 MessageBox.Show(exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
1780             }\r
1781         }\r
1782 \r
1783         #endregion\r
1784 \r
1785         #region Functions\r
1786         // DVD Parsing\r
1787         public void setStreamReader(Parsing.DVD dvd)\r
1788         {\r
1789             this.thisDVD = dvd;\r
1790         }\r
1791 \r
1792         // Audio system functions\r
1793         private void setAudioByContainer(String path)\r
1794         {\r
1795             string oldval = "";\r
1796 \r
1797             if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))\r
1798             {\r
1799                 oldval = drp_audenc_1.Text;\r
1800                 drp_audenc_1.Items.Clear();\r
1801                 drp_audenc_1.Items.Add("AAC");\r
1802                 drp_audenc_1.Items.Add("AC3");\r
1803                 if ((oldval != "AAC") && (oldval != "AC3"))\r
1804                     drp_audenc_1.SelectedIndex = 0;\r
1805 \r
1806                 oldval = drp_audenc_2.Text;\r
1807                 drp_audenc_2.Items.Clear();\r
1808                 drp_audenc_2.Items.Add("AAC");\r
1809                 drp_audenc_2.Items.Add("AC3");\r
1810                 if (drp_audenc_2.Enabled)\r
1811                 {\r
1812                     if ((oldval != "AAC") && (oldval != "AC3"))\r
1813                         drp_audenc_2.SelectedIndex = 0;\r
1814                 }\r
1815 \r
1816                 oldval = drp_audenc_3.Text;\r
1817                 drp_audenc_3.Items.Clear();\r
1818                 drp_audenc_3.Items.Add("AAC");\r
1819                 drp_audenc_3.Items.Add("AC3");\r
1820                 if (drp_audenc_3.Enabled)\r
1821                 {\r
1822                     if ((oldval != "AAC") && (oldval != "AC3"))\r
1823                         drp_audenc_3.SelectedIndex = 0;\r
1824                 }\r
1825 \r
1826                 oldval = drp_audenc_4.Text;\r
1827                 drp_audenc_4.Items.Clear();\r
1828                 drp_audenc_4.Items.Add("AAC");\r
1829                 drp_audenc_4.Items.Add("AC3");\r
1830                 if (drp_audenc_4.Enabled)\r
1831                 {\r
1832                     if ((oldval != "AAC") && (oldval != "AC3"))\r
1833                         drp_audenc_4.SelectedIndex = 0;\r
1834                 }\r
1835             }\r
1836             else if (path.EndsWith(".avi"))\r
1837             {\r
1838                 oldval = drp_audenc_1.Text;\r
1839                 drp_audenc_1.Items.Clear();\r
1840                 drp_audenc_1.Items.Add("MP3");\r
1841                 drp_audenc_1.Items.Add("AC3");\r
1842                 if ((oldval != "MP3") && (oldval != "AC3"))\r
1843                     drp_audenc_1.SelectedIndex = 0;\r
1844 \r
1845                 oldval = drp_audenc_2.Text;\r
1846                 drp_audenc_2.Items.Clear();\r
1847                 drp_audenc_2.Items.Add("MP3");\r
1848                 drp_audenc_2.Items.Add("AC3");\r
1849                 if (drp_audenc_2.Enabled)\r
1850                 {\r
1851                     if ((oldval != "MP3") && (oldval != "AC3"))\r
1852                         drp_audenc_2.SelectedIndex = 0;\r
1853                 }\r
1854 \r
1855 \r
1856                 oldval = drp_audenc_3.Text;\r
1857                 drp_audenc_3.Items.Clear();\r
1858                 drp_audenc_3.Items.Add("MP3");\r
1859                 drp_audenc_3.Items.Add("AC3");\r
1860                 if (drp_audenc_3.Enabled)\r
1861                 {\r
1862                     if ((oldval != "MP3") && (oldval != "AC3"))\r
1863                         drp_audenc_3.SelectedIndex = 0;\r
1864                 }\r
1865 \r
1866                 oldval = drp_audenc_4.Text;\r
1867                 drp_audenc_4.Items.Clear();\r
1868                 drp_audenc_4.Items.Add("MP3");\r
1869                 drp_audenc_4.Items.Add("AC3");\r
1870                 if (drp_audenc_4.Enabled)\r
1871                 {\r
1872                     if ((oldval != "MP3") && (oldval != "AC3"))\r
1873                         drp_audenc_4.SelectedIndex = 0;\r
1874                 }\r
1875             }\r
1876             else if (path.EndsWith(".ogm"))\r
1877             {\r
1878                 drp_audenc_1.Items.Clear();\r
1879                 drp_audenc_1.Items.Add("Vorbis");\r
1880                 drp_audenc_1.SelectedIndex = 0;\r
1881 \r
1882                 drp_audenc_2.Items.Clear();\r
1883                 drp_audenc_2.Items.Add("Vorbis");\r
1884                 if (drp_audenc_2.Enabled)\r
1885                     drp_audenc_2.SelectedIndex = 0;\r
1886 \r
1887                 drp_audenc_3.Items.Clear();\r
1888                 drp_audenc_3.Items.Add("Vorbis");\r
1889                 if (drp_audenc_3.Enabled)\r
1890                     drp_audenc_3.SelectedIndex = 0;\r
1891 \r
1892                 drp_audenc_4.Items.Clear();\r
1893                 drp_audenc_4.Items.Add("Vorbis");\r
1894                 if (drp_audenc_4.Enabled)\r
1895                     drp_audenc_4.SelectedIndex = 0;\r
1896             }\r
1897             else if (path.EndsWith(".mkv"))\r
1898             {\r
1899                 drp_audenc_1.Items.Clear();\r
1900                 drp_audenc_1.Items.Add("AAC");\r
1901                 drp_audenc_1.Items.Add("MP3");\r
1902                 drp_audenc_1.Items.Add("AC3");\r
1903                 drp_audenc_1.Items.Add("Vorbis");\r
1904                 if (drp_audenc_1.Text == "")\r
1905                     drp_audenc_1.SelectedIndex = 0;\r
1906 \r
1907 \r
1908                 drp_audenc_2.Items.Clear();\r
1909                 drp_audenc_2.Items.Add("AAC");\r
1910                 drp_audenc_2.Items.Add("MP3");\r
1911                 drp_audenc_2.Items.Add("AC3");\r
1912                 drp_audenc_2.Items.Add("Vorbis");\r
1913                 if (drp_audenc_2.Enabled)\r
1914                 {\r
1915                     if (drp_audenc_2.Text == "")\r
1916                         drp_audenc_2.SelectedIndex = 0;\r
1917                 }\r
1918 \r
1919                 drp_audenc_3.Items.Clear();\r
1920                 drp_audenc_3.Items.Add("AAC");\r
1921                 drp_audenc_3.Items.Add("MP3");\r
1922                 drp_audenc_3.Items.Add("AC3");\r
1923                 drp_audenc_3.Items.Add("Vorbis");\r
1924                 if (drp_audenc_3.Enabled)\r
1925                 {\r
1926                     if (drp_audenc_3.Text == "")\r
1927                         drp_audenc_3.SelectedIndex = 0;\r
1928                 }\r
1929 \r
1930                 drp_audenc_4.Items.Clear();\r
1931                 drp_audenc_4.Items.Add("AAC");\r
1932                 drp_audenc_4.Items.Add("MP3");\r
1933                 drp_audenc_4.Items.Add("AC3");\r
1934                 drp_audenc_4.Items.Add("Vorbis");\r
1935                 if (drp_audenc_4.Enabled)\r
1936                 {\r
1937                     if (drp_audenc_4.Text == "")\r
1938                         drp_audenc_4.SelectedIndex = 0;\r
1939                 }\r
1940             }\r
1941         }\r
1942         private void setVideoByContainer(String path)\r
1943         {\r
1944             string oldval = "";\r
1945 \r
1946             if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))\r
1947             {\r
1948                 oldval = drp_videoEncoder.Text;\r
1949                 drp_videoEncoder.Items.Clear();\r
1950                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1951                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1952                 drp_videoEncoder.Items.Add("H.264 (x264)");\r
1953                 if (oldval == "VP3 (Theora)")\r
1954                     drp_videoEncoder.SelectedIndex = 2;\r
1955                 else\r
1956                     drp_videoEncoder.Text = oldval;\r
1957 \r
1958             }\r
1959             else if (path.EndsWith(".avi"))\r
1960             {\r
1961                 oldval = drp_videoEncoder.Text;\r
1962                 drp_videoEncoder.Items.Clear();\r
1963                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1964                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1965                 drp_videoEncoder.Items.Add("H.264 (x264)");\r
1966                 if (oldval == "VP3 (Theora)")\r
1967                     drp_videoEncoder.SelectedIndex = 2;\r
1968                 else\r
1969                     drp_videoEncoder.Text = oldval;\r
1970             }\r
1971             else if (path.EndsWith(".ogm"))\r
1972             {\r
1973                 oldval = drp_videoEncoder.Text;\r
1974                 drp_videoEncoder.Items.Clear();\r
1975                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1976                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1977                 drp_videoEncoder.Items.Add("VP3 (Theora)");\r
1978                 if (oldval == "H.264 (x264)")\r
1979                     drp_videoEncoder.SelectedIndex = 2;\r
1980                 else\r
1981                     drp_videoEncoder.Text = oldval;\r
1982             }\r
1983             else if (path.EndsWith(".mkv"))\r
1984             {\r
1985                 oldval = drp_videoEncoder.Text;\r
1986                 drp_videoEncoder.Items.Clear();\r
1987                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1988                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1989                 drp_videoEncoder.Items.Add("H.264 (x264)");\r
1990                 drp_videoEncoder.Items.Add("VP3 (Theora)");\r
1991                 drp_videoEncoder.Text = oldval;\r
1992             }\r
1993         }\r
1994 \r
1995         // Preset system functions\r
1996         private void addPresetToList(ArrayList presetNameList)\r
1997         {\r
1998             // Adds a new preset name to the preset list.\r
1999             TreeNode preset_treeview = new TreeNode();\r
2000             foreach (string[] preset in presetNameList)\r
2001             {\r
2002                 preset_treeview = new TreeNode(preset[0]);\r
2003 \r
2004                 // Now Fill Out List View with Items\r
2005                 treeView_presets.Nodes.Add(preset_treeview);\r
2006             }\r
2007         }\r
2008         private void grabCLIPresets()\r
2009         {\r
2010             // Gets the presets from the CLI and stores them in presets.dat\r
2011             string appPath = Application.StartupPath.ToString() + "\\";\r
2012             string strCmdLine = "cmd /c " + '"' + '"' + appPath + "HandBrakeCLI.exe" + '"' + " --preset-list >" + '"' + appPath + "presets.dat" + '"' + " 2>&1" + '"';\r
2013             Process hbproc = Process.Start("CMD.exe", strCmdLine);\r
2014             hbproc.WaitForExit();\r
2015             hbproc.Dispose();\r
2016             hbproc.Close();\r
2017         }\r
2018         private void loadNormalPreset()\r
2019         {\r
2020             //Loads the preset called "normal"\r
2021             try\r
2022             {\r
2023                 string appPath = Application.StartupPath.ToString() + "\\presets.dat";\r
2024                 if (File.Exists(appPath))\r
2025                 {\r
2026 \r
2027                     int normal = 0;\r
2028                     foreach (TreeNode treenode in treeView_presets.Nodes)\r
2029                     {\r
2030                         if (treenode.ToString().Equals("TreeNode: Normal"))\r
2031                             normal = treenode.Index;\r
2032                     }\r
2033 \r
2034                     TreeNode np = treeView_presets.Nodes[normal];\r
2035 \r
2036                     treeView_presets.SelectedNode = np;\r
2037                 }\r
2038             }\r
2039             catch (Exception)\r
2040             {\r
2041                 // Do nothing\r
2042             }\r
2043         }\r
2044         public void loadPresetPanel()\r
2045         {\r
2046             treeView_presets.Nodes.Clear();\r
2047             ArrayList presetNameList = new ArrayList();\r
2048 \r
2049             // Load in the built in presets from presets.dat\r
2050             string filePath = Application.StartupPath.ToString() + "\\presets.dat";\r
2051             if (File.Exists(filePath))\r
2052             {\r
2053                 StreamReader presetInput = new StreamReader(filePath);\r
2054                 while (!presetInput.EndOfStream)\r
2055                 {\r
2056                     if ((char)presetInput.Peek() == '+')\r
2057                     {\r
2058                         string preset = presetInput.ReadLine().Replace("+ ", "");\r
2059                         Regex r = new Regex("(:  )"); // Split on hyphens. \r
2060                         presetNameList.Add(r.Split(preset));\r
2061                     }\r
2062                     else\r
2063                         presetInput.ReadLine();\r
2064                 }\r
2065 \r
2066                 presetInput.Close();\r
2067                 presetInput.Dispose();\r
2068             }\r
2069             addPresetToList(presetNameList);\r
2070             presetNameList.Clear();\r
2071 \r
2072             // Load in the users presets from user_presets.dat\r
2073             filePath = Application.StartupPath.ToString() + "\\user_presets.dat";\r
2074             if (File.Exists(filePath))\r
2075             {\r
2076                 StreamReader presetInput = new StreamReader(filePath);\r
2077                 while (!presetInput.EndOfStream)\r
2078                 {\r
2079                     if ((char)presetInput.Peek() == '+')\r
2080                     {\r
2081                         string preset = "--" + presetInput.ReadLine().Replace("+ ", "");\r
2082                         Regex r = new Regex("(:  )"); // Split on hyphens. \r
2083                         presetNameList.Add(r.Split(preset));\r
2084                     }\r
2085                     else\r
2086                         presetInput.ReadLine();\r
2087                 }\r
2088 \r
2089                 presetInput.Close();\r
2090                 presetInput.Dispose();\r
2091             }\r
2092             addPresetToList(presetNameList);\r
2093         }\r
2094         private void checkSelectedPreset(string preset)\r
2095         {\r
2096             string selectedPreset = null;\r
2097             selectedPreset = treeView_presets.SelectedNode.Text;\r
2098 \r
2099             Regex r = new Regex("(:  )"); // Split on hyphens. \r
2100             string[] presetName = r.Split(preset);\r
2101 \r
2102             if ((selectedPreset == (presetName[0])) || (selectedPreset == ("--" + presetName[0])))\r
2103             {\r
2104                 //Ok, Reset all the H264 widgets before changing the preset\r
2105                 x264PanelFunctions.reset2Defaults(this);\r
2106 \r
2107                 // Send the query from the file to the Query Parser class\r
2108                 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(preset);\r
2109 \r
2110                 // Now load the preset\r
2111                 hb_common_func.presetLoader(this, presetQuery, selectedPreset);\r
2112 \r
2113                 // The x264 widgets will need updated, so do this now:\r
2114                 x264PanelFunctions.X264_StandardizeOptString(this);\r
2115                 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);\r
2116             }\r
2117         }\r
2118 \r
2119         // Queue system functions\r
2120         private void showQueue()\r
2121         {\r
2122             queueWindow.Show();\r
2123         }\r
2124         #endregion\r
2125 \r
2126         #region Encoding and Queue\r
2127 \r
2128         // Declarations\r
2129         Functions.CLI process = new Functions.CLI();\r
2130         private delegate void UpdateUIHandler();\r
2131         [DllImport("user32.dll")]\r
2132         public static extern void LockWorkStation();\r
2133         [DllImport("user32.dll")]\r
2134         public static extern int ExitWindowsEx(int uFlags, int dwReason);\r
2135 \r
2136         // Encoding Functions\r
2137         private void procMonitor(object state)\r
2138         {\r
2139             // Make sure we are not already encoding and if we are then display an error.\r
2140             if (hbProc != null)\r
2141                 MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
2142             else\r
2143             {\r
2144                 hbProc = process.runCli(this, (string)state, false, false, false, false);\r
2145                 hbProc.WaitForExit();\r
2146 \r
2147                 setEncodeLabelFinished();\r
2148                 hbProc = null;\r
2149 \r
2150                 // Do something whent he encode ends.\r
2151                 switch (Properties.Settings.Default.CompletionOption)\r
2152                 {\r
2153                     case "Shutdown":\r
2154                         System.Diagnostics.Process.Start("Shutdown", "-s -t 60");\r
2155                         break;\r
2156                     case "Log Off":\r
2157                         ExitWindowsEx(0, 0);\r
2158                         break;\r
2159                     case "Suspend":\r
2160                         Application.SetSuspendState(PowerState.Suspend, true, true);\r
2161                         break;\r
2162                     case "Hibernate":\r
2163                         Application.SetSuspendState(PowerState.Hibernate, true, true);\r
2164                         break;\r
2165                     case "Lock System":\r
2166                         LockWorkStation();\r
2167                         break;\r
2168                     case "Quit HandBrake":\r
2169                         Application.Exit();\r
2170                         break;\r
2171                     default:\r
2172                         break;\r
2173                 }\r
2174             }\r
2175         }\r
2176         private void setEncodeLabelFinished()\r
2177         {\r
2178             if (this.InvokeRequired)\r
2179             {\r
2180                 this.BeginInvoke(new UpdateUIHandler(setEncodeLabelFinished));\r
2181                 return;\r
2182             }\r
2183             lbl_encode.Text = "Encoding Finished";\r
2184         }\r
2185 \r
2186         #endregion\r
2187 \r
2188 \r
2189         // This is the END of the road ------------------------------------------------------------------------------\r
2190     }\r
2191 }