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