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