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