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