OSDN Git Service

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