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