OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Collections.Specialized;\r
4 using System.ComponentModel;\r
5 using System.Data;\r
6 using System.Drawing;\r
7 using System.Text;\r
8 using System.Windows.Forms;\r
9 using System.Net;\r
10 using System.IO;\r
11 using System.Diagnostics;\r
12 using System.Threading;\r
13 using System.Runtime.InteropServices;\r
14 using System.Globalization;\r
15 using System.Text.RegularExpressions;\r
16 \r
17 \r
18 namespace Handbrake\r
19 {\r
20     public partial class frmMain : Form\r
21     {\r
22         // -------------------------------------------------------------- \r
23         // Applicaiton Startup Stuff\r
24         // --------------------------------------------------------------\r
25 \r
26         #region Application Startup\r
27 \r
28         // Some stuff that needs to be Initialized. \r
29         private Process hbProc;\r
30         private Parsing.DVD thisDVD;\r
31         private frmQueue queueWindow = new frmQueue();\r
32 \r
33         // The main window beings here...\r
34         public frmMain()\r
35         {\r
36             // Load the splash screen in this thread\r
37             Form splash = new frmSplashScreen();\r
38             splash.Show();\r
39 \r
40             //Create a label that can be updated from the parent thread.\r
41             Label lblStatus = new Label();\r
42 \r
43             //Size the label\r
44             lblStatus.Size = new Size(250, 20);\r
45 \r
46             //Position the label\r
47             lblStatus.Location = new Point(10, 280);\r
48 \r
49             //Put the label on the splash form\r
50             splash.Controls.Add(lblStatus);\r
51 \r
52             //Fire a thread to wait for 2 seconds.  The splash screen will exit when the time expires\r
53             Thread timer = new Thread(splashTimer);\r
54             timer.Start();\r
55 \r
56             InitializeComponent();\r
57 \r
58             // show the form, but leave disabled until preloading is complete\r
59             this.Enabled = false;\r
60 \r
61             // Show the main form\r
62             this.Show();\r
63 \r
64             // Forces frmMain to draw\r
65             Application.DoEvents();\r
66 \r
67             // Set the Version number lable to the corect version.\r
68             Version.Text = "Version " + Properties.Settings.Default.CliVersion;\r
69 \r
70             // update the status\r
71             if (Properties.Settings.Default.updateStatus == "Checked")\r
72             {\r
73                 lblStatus.Text = "Checking for updates ...";\r
74                 // redraw the splash screen\r
75                 Application.DoEvents();\r
76                 // Run the update checker.\r
77                 updateCheck();\r
78                 Thread.Sleep(200);\r
79             }\r
80 \r
81             // Update the presets\r
82             if (Properties.Settings.Default.updatePresets == "Checked")\r
83             {\r
84                 lblStatus.Text = "Updaing Presets ...";\r
85                 Application.DoEvents();\r
86                 grabCLIPresets();\r
87                 Thread.Sleep(200);\r
88             }\r
89 \r
90             // Load the presets for the preset box\r
91             updatePresets();\r
92 \r
93             // Now load the users default if required. (Will overide the above setting)\r
94             if (Properties.Settings.Default.defaultSettings == "Checked")\r
95             {\r
96                 lblStatus.Text = "Loading User Default Settings...";\r
97                 Application.DoEvents();\r
98                 loadUserDefaults();\r
99                 Thread.Sleep(100);\r
100             }\r
101             else\r
102             {\r
103                 loadNormalPreset();\r
104             }\r
105 \r
106             // Enable or disable tooltips\r
107             if (Properties.Settings.Default.tooltipEnable == "Checked")\r
108             {\r
109                 lblStatus.Text = "Loading Tooltips ...";\r
110                 Application.DoEvents();\r
111                 ToolTip.Active = true;\r
112                 Thread.Sleep(100);\r
113             }\r
114 \r
115             // Hide the preset bar if required.\r
116             if (Properties.Settings.Default.hidePresets == "Checked")\r
117             {\r
118                 mnu_showPresets.Visible = true;\r
119                 this.Width = 591;\r
120             }\r
121 \r
122             //Finished Loading\r
123             lblStatus.Text = "Loading Complete!";\r
124             Application.DoEvents();\r
125             Thread.Sleep(200);\r
126 \r
127             // Wait until splash screen is done\r
128             while (timer.IsAlive)\r
129             { Thread.Sleep(100); }\r
130 \r
131             //Close the splash screen\r
132             splash.Close();\r
133             splash.Dispose();\r
134 \r
135             // Turn the interface back to the user\r
136             this.Enabled = true;\r
137         }\r
138 \r
139         private void splashTimer(object sender)\r
140         {\r
141             Thread.Sleep(1000);  //sit for 1 seconds then exit\r
142         }\r
143 \r
144         private void showSplash(object sender)\r
145         {\r
146             // Display splash screen for 1.5 Seconds\r
147             Form splash = new frmSplashScreen();\r
148             splash.Show();\r
149             Thread.Sleep(1500);\r
150             splash.Close(); // Then close.\r
151         }\r
152 \r
153         private void loadUserDefaults()\r
154         {\r
155             string userDefaults = Properties.Settings.Default.defaultUserSettings;\r
156             try\r
157             {\r
158                 // Some things that need to be done to reset some gui components:\r
159                 CheckPixelRatio.CheckState = CheckState.Unchecked;\r
160 \r
161                 // Send the query from the file to the Query Parser class\r
162                 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(userDefaults);\r
163 \r
164                 // Now load the preset\r
165                 presetLoader(presetQuery, "User Defaults ");\r
166             }\r
167             catch (Exception exc)\r
168             {\r
169                 MessageBox.Show("Unable to load user Default Settings. \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
170             }\r
171         }\r
172 \r
173         #endregion\r
174 \r
175         // -------------------------------------------------------------- \r
176         // The main Menu bar.\r
177         // -------------------------------------------------------------- \r
178 \r
179         #region File Menu\r
180         private void mnu_open_Click(object sender, EventArgs e)\r
181         {\r
182             string filename;\r
183             File_Open.ShowDialog();\r
184             filename = File_Open.FileName;\r
185 \r
186             if (filename != "")\r
187             {\r
188                 try\r
189                 {\r
190                     // Some things that need to be done to reset some gui components:\r
191                     CheckPixelRatio.CheckState = CheckState.Unchecked;\r
192 \r
193                     //---------------------------\r
194                     // Get the Preset\r
195                     // ---------------------------\r
196 \r
197                     // Create StreamReader & open file\r
198                     StreamReader line = new StreamReader(filename);\r
199 \r
200                     // Send the query from the file to the Query Parser class\r
201                     Functions.QueryParser presetQuery = Functions.QueryParser.Parse(line.ReadLine());\r
202 \r
203                     // Now load the preset\r
204                     presetLoader(presetQuery, filename);\r
205 \r
206                     // Close the stream\r
207                     line.Close();\r
208                 }\r
209                 catch (Exception exc)\r
210                 {\r
211                     MessageBox.Show("Unable to load profile.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
212                     MessageBox.Show(exc.ToString());\r
213                 }\r
214             }\r
215         }\r
216 \r
217         private void mnu_save_Click(object sender, EventArgs e)\r
218         {\r
219             string filename;\r
220             File_Save.ShowDialog();\r
221             filename = File_Save.FileName;\r
222             if (filename != "")\r
223             {\r
224                 try\r
225                 {\r
226                     // Create a StreamWriter and open the file\r
227                     StreamWriter line = new StreamWriter(filename);\r
228 \r
229                     // Generate and write the query string to the file\r
230                     String query = GenerateTheQuery();\r
231                     line.WriteLine(query);\r
232 \r
233                     // close the stream\r
234                     line.Close();\r
235                     MessageBox.Show("Your profile has been sucessfully saved.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
236                 }\r
237                 catch (Exception)\r
238                 {\r
239                     MessageBox.Show("Unable to write to the file. Please make sure the location has the correct permissions for file writing.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
240                 }\r
241 \r
242             }\r
243         }\r
244 \r
245         private void mnu_exit_Click(object sender, EventArgs e)\r
246         {\r
247             Application.Exit();\r
248         }\r
249 \r
250         #endregion\r
251 \r
252         #region Tools Menu\r
253 \r
254         private void mnu_encode_Click(object sender, EventArgs e)\r
255         {\r
256             showQueue();\r
257         }\r
258 \r
259         private void mnu_viewDVDdata_Click(object sender, EventArgs e)\r
260         {\r
261             frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
262             dvdInfoWindow.Show();\r
263         }\r
264 \r
265         private void mnu_options_Click(object sender, EventArgs e)\r
266         {\r
267             Form Options = new frmOptions();\r
268             Options.ShowDialog();\r
269         }\r
270 \r
271         #endregion\r
272 \r
273         #region Presets Menu\r
274         Boolean presetStatus;\r
275 \r
276         private void mnu_showPresets_Click(object sender, EventArgs e)\r
277         {\r
278             if (presetStatus == false)\r
279             {\r
280                 this.Width = 881;\r
281                 presetStatus = true;\r
282                 mnu_showPresets.Text = "Hide Presets";\r
283             }\r
284             else\r
285             {\r
286                 this.Width = 590;\r
287                 presetStatus = false;\r
288                 mnu_showPresets.Text = "Show Presets";\r
289             }\r
290         }\r
291 \r
292         private void mnu_presetReset_Click(object sender, EventArgs e)\r
293         {\r
294             listview_presets.Items.Clear();\r
295             grabCLIPresets();\r
296             updatePresets();\r
297             MessageBox.Show("Presets have been updated", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
298         }\r
299 \r
300         private void mnu_SelectDefault_Click(object sender, EventArgs e)\r
301         {\r
302             loadNormalPreset();\r
303         }\r
304 \r
305         #endregion\r
306 \r
307         #region Help Menu\r
308 \r
309 \r
310         private void mnu_quickStart_Click(object sender, EventArgs e)\r
311         {\r
312             Form QuickStart = new frmQuickStart();\r
313             QuickStart.ShowDialog();\r
314         }\r
315 \r
316         private void mnu_wiki_Click(object sender, EventArgs e)\r
317         {\r
318             Process.Start("http://handbrake.m0k.org/trac");\r
319         }\r
320 \r
321         private void mnu_faq_Click(object sender, EventArgs e)\r
322         {\r
323             Process.Start("http://handbrake.m0k.org/trac/wiki/WindowsGuiFaq");\r
324         }\r
325 \r
326         private void mnu_onlineDocs_Click(object sender, EventArgs e)\r
327         {\r
328             Process.Start("http://handbrake.m0k.org/?page_id=11");\r
329         }\r
330 \r
331         private void mnu_homepage_Click(object sender, EventArgs e)\r
332         {\r
333             Process.Start("http://handbrake.m0k.org");\r
334         }\r
335 \r
336         private void mnu_forum_Click(object sender, EventArgs e)\r
337         {\r
338             Process.Start("http://handbrake.m0k.org/forum");\r
339         }\r
340 \r
341         private void mnu_UpdateCheck_Click(object sender, EventArgs e)\r
342         {\r
343             Boolean update = updateCheck();\r
344             if (update == true)\r
345             {\r
346                 frmUpdater updateWindow = new frmUpdater();\r
347                 updateWindow.Show();\r
348             }\r
349             else\r
350             {\r
351                 MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
352             }\r
353         }\r
354 \r
355         private void mnu_about_Click(object sender, EventArgs e)\r
356         {\r
357             Form About = new frmAbout();\r
358             About.ShowDialog();\r
359         }\r
360 \r
361         #endregion\r
362 \r
363         // -------------------------------------------------------------- \r
364         // Buttons on the main Window and items that require actions\r
365         // --------------------------------------------------------------\r
366 \r
367         #region Buttons\r
368 \r
369         private void btn_Browse_Click(object sender, EventArgs e)\r
370         {\r
371             String filename = "";\r
372             text_source.Text = "";\r
373             frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
374 \r
375             if (RadioDVD.Checked)\r
376             {\r
377                 DVD_Open.ShowDialog();\r
378                 filename = DVD_Open.SelectedPath;\r
379             }\r
380             else\r
381             {\r
382                 ISO_Open.ShowDialog();\r
383                 filename = ISO_Open.FileName;\r
384             }\r
385 \r
386             if (filename != "")\r
387             {\r
388                 Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow);\r
389                 text_source.Text = filename;\r
390                 frmRD.ShowDialog();\r
391             }\r
392             else\r
393                 text_source.Text = "Click 'Browse' to continue";\r
394 \r
395             // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.\r
396             if (drp_dvdtitle.Items.Count == 0)\r
397             {\r
398                 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
399             }\r
400         }\r
401 \r
402         private void btn_destBrowse_Click(object sender, EventArgs e)\r
403         {\r
404             // This removes the file extension from the filename box on the save file dialog.\r
405             // It's daft but some users don't realise that typing an extension overrides the dropdown extension selected.\r
406             // Should be a nicer way to do this.\r
407             DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", "");\r
408 \r
409             // Show the dialog and set the main form file path\r
410             DVD_Save.ShowDialog();\r
411             text_destination.Text = DVD_Save.FileName;\r
412 \r
413             // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)\r
414             if (Check_ChapterMarkers.Checked)\r
415             {\r
416                 string destination = text_destination.Text;\r
417                 destination = destination.Replace(".mp4", ".m4v");\r
418                 text_destination.Text = destination;\r
419             }\r
420         }\r
421 \r
422         private void btn_h264Clear_Click(object sender, EventArgs e)\r
423         {\r
424             rtf_h264advanced.Text = "";\r
425         }\r
426 \r
427         private void GenerateQuery_Click(object sender, EventArgs e)\r
428         {\r
429             String query = GenerateTheQuery();\r
430             QueryEditorText.Text = query;\r
431         }\r
432 \r
433         private void btn_ClearQuery_Click(object sender, EventArgs e)\r
434         {\r
435             QueryEditorText.Text = "";\r
436         }\r
437 \r
438         private void btn_copy_Click(object sender, EventArgs e)\r
439         {\r
440             if (QueryEditorText.Text != "")\r
441                 Clipboard.SetText(QueryEditorText.Text, TextDataFormat.Text);\r
442         }\r
443 \r
444         #endregion\r
445 \r
446         #region frmMain Actions\r
447 \r
448         private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)\r
449         {\r
450             // Reset some values on the form\r
451             lbl_Aspect.Text = "Select a Title";\r
452             lbl_RecomendedCrop.Text = "Select a Title";\r
453             drop_chapterStart.Items.Clear();\r
454             drop_chapterFinish.Items.Clear();\r
455             QueryEditorText.Text = "";\r
456 \r
457             // If the dropdown is set to automatic nothing else needs to be done.\r
458             // Otheriwse if its not, title data has to be loased from parsing.\r
459             if (drp_dvdtitle.Text != "Automatic")\r
460             {\r
461                 Parsing.Title selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;\r
462 \r
463                 // Set the Aspect Ratio\r
464                 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();\r
465 \r
466                 // Set the Recommended Cropping values\r
467                 lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]);\r
468 \r
469                 // Populate the Start chapter Dropdown\r
470                 drop_chapterStart.Items.Clear();\r
471                 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());\r
472                 if (drop_chapterStart.Items.Count > 0)\r
473                 {\r
474                     drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();\r
475                 }\r
476 \r
477                 // Populate the Final Chapter Dropdown\r
478                 drop_chapterFinish.Items.Clear();\r
479                 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());\r
480                 if (drop_chapterFinish.Items.Count > 0)\r
481                 {\r
482                     drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();\r
483                 }\r
484 \r
485                 // Populate the Audio Channels Dropdown\r
486                 drp_audioChannels.Items.Clear();\r
487                 drp_audioChannels.Items.Add("Automatic");\r
488                 drp_audioChannels.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
489                 if (drp_audioChannels.Items.Count > 0)\r
490                 {\r
491                     drp_audioChannels.Text = drp_audioChannels.Items[0].ToString();\r
492                 }\r
493 \r
494                 // Populate the Subtitles dropdown\r
495                 drp_subtitle.Items.Clear();\r
496                 drp_subtitle.Items.Add("None");\r
497                 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());\r
498                 if (drp_subtitle.Items.Count > 0)\r
499                 {\r
500                     drp_subtitle.Text = drp_subtitle.Items[0].ToString();\r
501                 }\r
502             }\r
503         }\r
504 \r
505         private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)\r
506         {\r
507             drop_chapterStart.BackColor = Color.White;\r
508             QueryEditorText.Text = "";\r
509             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
510             {\r
511                 try\r
512                 {\r
513                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
514                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
515 \r
516                     if (chapterFinish < chapterStart)\r
517                     {\r
518                         drop_chapterStart.BackColor = Color.LightCoral;\r
519                     }\r
520                 }\r
521                 catch (Exception)\r
522                 {\r
523                     drop_chapterStart.BackColor = Color.LightCoral;\r
524                 }\r
525             }\r
526 \r
527 \r
528         }\r
529 \r
530         private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)\r
531         {\r
532             drop_chapterFinish.BackColor = Color.White;\r
533             QueryEditorText.Text = "";\r
534             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
535             {\r
536                 try\r
537                 {\r
538                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
539                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
540 \r
541                     if (chapterFinish < chapterStart)\r
542                     {\r
543                         drop_chapterFinish.BackColor = Color.LightCoral;\r
544                     }\r
545                 }\r
546                 catch (Exception)\r
547                 {\r
548                     drop_chapterFinish.BackColor = Color.LightCoral;\r
549                 }\r
550             }\r
551         }\r
552 \r
553         private void text_bitrate_TextChanged(object sender, EventArgs e)\r
554         {\r
555             text_filesize.Text = "";\r
556             slider_videoQuality.Value = 0;\r
557             SliderValue.Text = "0%";\r
558             CheckCRF.CheckState = CheckState.Unchecked;\r
559             CheckCRF.Enabled = false;\r
560         }\r
561 \r
562         private void text_filesize_TextChanged(object sender, EventArgs e)\r
563         {\r
564             text_bitrate.Text = "";\r
565             slider_videoQuality.Value = 0;\r
566             SliderValue.Text = "0%";\r
567             CheckCRF.CheckState = CheckState.Unchecked;\r
568             CheckCRF.Enabled = false;\r
569         }\r
570 \r
571         private void slider_videoQuality_Scroll(object sender, EventArgs e)\r
572         {\r
573             SliderValue.Text = slider_videoQuality.Value.ToString() + "%";\r
574             text_bitrate.Text = "";\r
575             text_filesize.Text = "";\r
576             CheckCRF.Enabled = true;\r
577         }\r
578 \r
579         private void label_h264_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\r
580         {\r
581             Process.Start("http://handbrake.m0k.org/trac/wiki/x264Options");\r
582         }\r
583 \r
584         private void text_width_TextChanged(object sender, EventArgs e)\r
585         {\r
586             try\r
587             {\r
588                 if (CheckPixelRatio.Checked)\r
589                 {\r
590                     text_width.Text = "";\r
591                     text_width.BackColor = Color.LightCoral;\r
592                     CheckPixelRatio.BackColor = Color.LightCoral;\r
593                 }\r
594                 else\r
595                 {\r
596                     if ((int.Parse(text_width.Text) % 16) != 0)\r
597                     {\r
598                         text_width.BackColor = Color.LightCoral;\r
599                     }\r
600                     else\r
601                     {\r
602                         text_width.BackColor = Color.LightGreen;\r
603                     }\r
604                 }\r
605 \r
606                 if (lbl_Aspect.Text != "Select a Title")\r
607                 {\r
608                     double height = int.Parse(text_width.Text) / double.Parse(lbl_Aspect.Text);\r
609                     double mod16 = height % 16;\r
610                     height = height - mod16;\r
611 \r
612                     if (text_width.Text == "")\r
613                     {\r
614                         text_height.Text = "";\r
615                         text_width.BackColor = Color.White;\r
616                     }\r
617                     else\r
618                     {\r
619                         text_height.Text = height.ToString();\r
620                         text_width.BackColor = Color.LightGreen;\r
621                     }\r
622                 }\r
623             }\r
624             catch (Exception)\r
625             {\r
626                 // No need to throw an error here.\r
627                 // Note on non english systems, this will throw an error because of double.Parse(lbl_Aspect.Text); not working.\r
628             }\r
629 \r
630 \r
631         }\r
632 \r
633         private void text_height_TextChanged(object sender, EventArgs e)\r
634         {\r
635             try\r
636             {\r
637                 if (CheckPixelRatio.Checked)\r
638                 {\r
639                     text_height.Text = "";\r
640                     text_height.BackColor = Color.LightCoral;\r
641                     CheckPixelRatio.BackColor = Color.LightCoral;\r
642                 }\r
643                 else\r
644                 {\r
645                     if ((int.Parse(text_height.Text) % 16) != 0)\r
646                     {\r
647                         text_height.BackColor = Color.LightCoral;\r
648                     }\r
649                     else\r
650                     {\r
651                         text_height.BackColor = Color.LightGreen;\r
652                     }\r
653                 }\r
654 \r
655             }\r
656             catch (Exception)\r
657             {\r
658                 // No need to alert the user.\r
659             }\r
660         }\r
661 \r
662         private void drp_crop_SelectedIndexChanged(object sender, EventArgs e)\r
663         {\r
664             if ((string)drp_crop.SelectedItem == "Manual")\r
665             {\r
666                 text_left.Enabled = true;\r
667                 text_right.Enabled = true;\r
668                 text_top.Enabled = true;\r
669                 text_bottom.Enabled = true;\r
670             }\r
671 \r
672             if ((string)drp_crop.SelectedItem == "Auto Crop")\r
673             {\r
674                 text_left.Enabled = false;\r
675                 text_right.Enabled = false;\r
676                 text_top.Enabled = false;\r
677                 text_bottom.Enabled = false;\r
678 \r
679 \r
680                 if (lbl_RecomendedCrop.Text != "Select a Title")\r
681                 {\r
682                     string[] temp = new string[4];\r
683                     temp = lbl_RecomendedCrop.Text.Split('/');\r
684                     text_left.Text = temp[2];\r
685                     text_right.Text = temp[3];\r
686                     text_top.Text = temp[0];\r
687                     text_bottom.Text = temp[1];\r
688                 }\r
689                 else\r
690                 {\r
691                     text_left.Text = "";\r
692                     text_right.Text = "";\r
693                     text_top.Text = "";\r
694                     text_bottom.Text = "";\r
695                 }\r
696             }\r
697 \r
698             if ((string)drp_crop.SelectedItem == "No Crop")\r
699             {\r
700                 text_left.Enabled = false;\r
701                 text_right.Enabled = false;\r
702                 text_top.Enabled = false;\r
703                 text_bottom.Enabled = false;\r
704                 text_left.Text = "0";\r
705                 text_right.Text = "0";\r
706                 text_top.Text = "0";\r
707                 text_bottom.Text = "0";\r
708 \r
709             }\r
710         }\r
711 \r
712         private void CheckPixelRatio_CheckedChanged(object sender, EventArgs e)\r
713         {\r
714             text_width.Text = "";\r
715             text_height.Text = "";\r
716             text_width.BackColor = Color.White;\r
717             text_height.BackColor = Color.White;\r
718             CheckPixelRatio.BackColor = TabPage1.BackColor;\r
719         }\r
720 \r
721         private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)\r
722         {\r
723             if (check_2PassEncode.CheckState.ToString() == "Checked")\r
724             {\r
725                 if (drp_videoEncoder.Text.Contains("H.264"))\r
726                 {\r
727                     check_turbo.Enabled = true;\r
728                 }\r
729             }\r
730             else\r
731             {\r
732                 check_turbo.Enabled = false;\r
733                 check_turbo.CheckState = CheckState.Unchecked;\r
734             }\r
735         }\r
736 \r
737         private void check_largeFile_CheckedChanged(object sender, EventArgs e)\r
738         {\r
739             if (!text_destination.Text.Contains(".mp4"))\r
740             {\r
741                 lbl_largeMp4Warning.Text = "Warning: Only mp4 files are supported";\r
742                 lbl_largeMp4Warning.ForeColor = Color.Red;\r
743                 check_largeFile.CheckState = CheckState.Unchecked;\r
744             }\r
745             else\r
746             {\r
747                 lbl_largeMp4Warning.Text = "Warning: Breaks iPod, @TV, PS3 compatibility.";\r
748                 lbl_largeMp4Warning.ForeColor = Color.Black;\r
749             }\r
750         }\r
751 \r
752         private void drp_dvdtitle_Click(object sender, EventArgs e)\r
753         {\r
754             if (drp_dvdtitle.Items.Count == 0)\r
755             {\r
756                 MessageBox.Show("There are no titles to select. Please scan the DVD by clicking the 'browse' button above before trying to select a title.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
757             }\r
758         }\r
759 \r
760         private void drp_audioCodec_SelectedIndexChanged(object sender, EventArgs e)\r
761         {\r
762             if (drp_audioCodec.Text == "AAC")\r
763             {\r
764                 drp_audioMixDown.Items.Clear();\r
765                 drp_audioMixDown.Items.Add("Mono");\r
766                 drp_audioMixDown.Items.Add("Stereo");\r
767                 drp_audioMixDown.Items.Add("Dolby Surround");\r
768                 drp_audioMixDown.Items.Add("Dolby Pro Logic II");\r
769                 drp_audioMixDown.Items.Add("6 Channel Discrete");\r
770 \r
771                 drp_audioBitrate.Items.Clear();\r
772                 drp_audioBitrate.Items.Add("32");\r
773                 drp_audioBitrate.Items.Add("40");\r
774                 drp_audioBitrate.Items.Add("48");\r
775                 drp_audioBitrate.Items.Add("56");\r
776                 drp_audioBitrate.Items.Add("64");\r
777                 drp_audioBitrate.Items.Add("80");\r
778                 drp_audioBitrate.Items.Add("86");\r
779                 drp_audioBitrate.Items.Add("112");\r
780                 drp_audioBitrate.Items.Add("128");\r
781                 drp_audioBitrate.Items.Add("160");\r
782 \r
783             }\r
784             else\r
785             {\r
786                 drp_audioMixDown.Items.Clear();\r
787                 drp_audioMixDown.Items.Add("Stereo");\r
788                 drp_audioMixDown.Items.Add("Dolby Surround");\r
789                 drp_audioMixDown.Items.Add("Dolby Pro Logic II");\r
790 \r
791                 drp_audioBitrate.Items.Clear();\r
792                 drp_audioBitrate.Items.Add("32");\r
793                 drp_audioBitrate.Items.Add("40");\r
794                 drp_audioBitrate.Items.Add("48");\r
795                 drp_audioBitrate.Items.Add("56");\r
796                 drp_audioBitrate.Items.Add("64");\r
797                 drp_audioBitrate.Items.Add("80");\r
798                 drp_audioBitrate.Items.Add("86");\r
799                 drp_audioBitrate.Items.Add("112");\r
800                 drp_audioBitrate.Items.Add("128");\r
801                 drp_audioBitrate.Items.Add("160");\r
802                 drp_audioBitrate.Items.Add("192");\r
803                 drp_audioBitrate.Items.Add("224");\r
804                 drp_audioBitrate.Items.Add("256");\r
805                 drp_audioBitrate.Items.Add("320");\r
806             }\r
807         }\r
808 \r
809         private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e)\r
810         {\r
811             if ((drp_audioCodec.Text == "AAC") && (drp_audioMixDown.Text == "6 Channel Discrete"))\r
812             {\r
813                     drp_audioBitrate.Items.Clear();\r
814                     drp_audioBitrate.Items.Add("32");\r
815                     drp_audioBitrate.Items.Add("40");\r
816                     drp_audioBitrate.Items.Add("48");\r
817                     drp_audioBitrate.Items.Add("56");\r
818                     drp_audioBitrate.Items.Add("64");\r
819                     drp_audioBitrate.Items.Add("80");\r
820                     drp_audioBitrate.Items.Add("86");\r
821                     drp_audioBitrate.Items.Add("112");\r
822                     drp_audioBitrate.Items.Add("128");\r
823                     drp_audioBitrate.Items.Add("160");\r
824                     drp_audioBitrate.Items.Add("192");\r
825                     drp_audioBitrate.Items.Add("224");\r
826                     drp_audioBitrate.Items.Add("256");\r
827                     drp_audioBitrate.Items.Add("320");\r
828                     drp_audioBitrate.Items.Add("384");\r
829             }\r
830         }\r
831 \r
832         private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)\r
833         {\r
834             if (Check_ChapterMarkers.Checked)\r
835             {\r
836                 string destination = text_destination.Text;\r
837                 destination = destination.Replace(".mp4", ".m4v");\r
838                 text_destination.Text = destination;\r
839             }\r
840             else\r
841             {\r
842                 string destination = text_destination.Text;\r
843                 destination = destination.Replace(".m4v", ".mp4");\r
844                 text_destination.Text = destination;\r
845             }\r
846         }\r
847 \r
848         private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)\r
849         {\r
850             //Turn off some options which are H.264 only when the user selects a non h.264 encoder\r
851             if (!drp_videoEncoder.Text.Contains("H.264"))\r
852             {\r
853                 check_turbo.CheckState = CheckState.Unchecked;\r
854                 CheckCRF.CheckState = CheckState.Unchecked;\r
855                 CheckCRF.Enabled = false;\r
856                 check_turbo.Enabled = false;\r
857                 h264Tab.Enabled = false;\r
858                 rtf_h264advanced.Text = "";\r
859             }\r
860             else\r
861             {\r
862                 CheckCRF.Enabled = true;\r
863                 if (check_2PassEncode.CheckState == CheckState.Checked)\r
864                 {\r
865                     check_turbo.Enabled = true;\r
866                 }\r
867                 h264Tab.Enabled = true;\r
868             }\r
869 \r
870         }\r
871 \r
872         #endregion\r
873 \r
874         // -------------------------------------------------------------- \r
875         // Main Window Preset System\r
876         // --------------------------------------------------------------\r
877 \r
878         #region Preset System\r
879 \r
880         // Import Current Presets\r
881         private void updatePresets()\r
882         {\r
883             string[] presets = new string[17];\r
884             presets[0] = "Animation";\r
885             presets[1] = "AppleTV";\r
886             presets[2] = "Bedlam";\r
887             presets[3] = "Blind";\r
888             presets[4] = "Broke";\r
889             presets[5] = "Classic";\r
890             presets[6] = "Constant Quality Rate";\r
891             presets[7] = "Deux Six Quatre";\r
892             presets[8] = "Film";\r
893             presets[9] = "iPhone / iPod Touch";\r
894             presets[10] = "iPod High-Rez";\r
895             presets[11] = "iPod Low-Rez";\r
896             presets[12] = "Normal";\r
897             presets[13] = "PS3";\r
898             presets[14] = "PSP";\r
899             presets[15] = "QuickTime";\r
900             presets[16] = "Television";\r
901 \r
902             ListViewItem preset_listview = new ListViewItem();\r
903             string[] presetList = new string[1];\r
904 \r
905             foreach (string preset in presets)\r
906             {\r
907                 presetList[0] = preset;\r
908                 preset_listview = new ListViewItem(presetList);\r
909 \r
910                 // Now Fill Out List View with Items\r
911                 listview_presets.Items.Add(preset_listview);\r
912             }\r
913         }\r
914 \r
915         private void grabCLIPresets()\r
916         {\r
917             string appPath = Application.StartupPath.ToString() + "\\";\r
918             string strCmdLine = "cmd /c " + '"' + '"' + appPath + "HandBrakeCLI.exe" + '"' + " --preset-list >" + '"' + appPath + "presets.dat" + '"' + " 2>&1" + '"';\r
919             Process hbproc = Process.Start("CMD.exe", strCmdLine);\r
920             hbproc.WaitForExit();\r
921             hbproc.Dispose();\r
922             hbproc.Close();\r
923         }\r
924 \r
925         // Function to select the default preset.\r
926         private void loadNormalPreset()\r
927         {\r
928             ListViewItem item = listview_presets.FindItemWithText("Normal");\r
929             \r
930             if (item != null)\r
931             {\r
932                 item.Selected = true;\r
933             }\r
934         }\r
935 \r
936         // Buttons\r
937         private void btn_setDefault_Click(object sender, EventArgs e)\r
938         {\r
939             String query = GenerateTheQuery();\r
940             Properties.Settings.Default.defaultUserSettings = query;\r
941             // Save the new default Settings\r
942             Properties.Settings.Default.Save();\r
943             MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
944         }\r
945 \r
946         // Preset Selection\r
947         private void listview_presets_SelectedIndexChanged(object sender, EventArgs e)\r
948         {\r
949 \r
950             string selectedPreset = null;\r
951             ListView.SelectedListViewItemCollection name = null;\r
952             name = listview_presets.SelectedItems;\r
953 \r
954             if (listview_presets.SelectedItems.Count != 0)\r
955                 selectedPreset = name[0].SubItems[0].Text;\r
956 \r
957             try\r
958             {\r
959                 string appPath = Application.StartupPath.ToString() + "\\";\r
960                 StreamReader presetInput = new StreamReader(appPath + "presets.dat");\r
961 \r
962                 while (!presetInput.EndOfStream)\r
963                 {\r
964                     if ((char)presetInput.Peek() == '+')\r
965                     {\r
966                         string preset = presetInput.ReadLine().Replace("+ ", "");\r
967                         Regex r = new Regex("(:  )"); // Split on hyphens. \r
968                         string[] presetName = r.Split(preset);\r
969 \r
970                         if (selectedPreset == presetName[0])\r
971                         {\r
972                             // Need to disable anamorphic now, otherwise it may overide the width / height values later.\r
973                             CheckPixelRatio.CheckState = CheckState.Unchecked;\r
974 \r
975                             // Send the query from the file to the Query Parser class\r
976                             Functions.QueryParser presetQuery = Functions.QueryParser.Parse(preset);\r
977 \r
978                             // Now load the preset\r
979                             presetLoader(presetQuery, selectedPreset);\r
980                         }\r
981 \r
982                     }\r
983                     else\r
984                     {\r
985                         presetInput.ReadLine();\r
986                     }\r
987                 }\r
988             }\r
989             catch (Exception exc)\r
990             {\r
991                 MessageBox.Show(exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
992             }\r
993         }\r
994 \r
995         #endregion\r
996 \r
997         //---------------------------------------------------\r
998         // Encode / Cancel Buttons\r
999         // Encode Progress Text Handler\r
1000         //---------------------------------------------------\r
1001 \r
1002         #region Encodeing and Queue\r
1003 \r
1004         Functions.CLI process = new Functions.CLI();\r
1005         private delegate void UpdateUIHandler();\r
1006 \r
1007         [DllImport("user32.dll")]\r
1008         public static extern void LockWorkStation();\r
1009         [DllImport("user32.dll")]\r
1010         public static extern int ExitWindowsEx(int uFlags, int dwReason);\r
1011 \r
1012         private void btn_queue_Click(object sender, EventArgs e)\r
1013         {\r
1014 \r
1015             if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
1016                 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1017             else\r
1018             {\r
1019                 string query;\r
1020                 if (QueryEditorText.Text == "")\r
1021                 {\r
1022                     query = GenerateTheQuery();\r
1023                 }\r
1024                 else\r
1025                 {\r
1026                     query = QueryEditorText.Text;\r
1027                 }\r
1028                 queueWindow.list_queue.Items.Add(query);\r
1029                 queueWindow.Show();\r
1030             }\r
1031         }\r
1032 \r
1033         private void showQueue()\r
1034         {\r
1035             queueWindow.Show();\r
1036         }\r
1037 \r
1038         private void btn_encode_Click(object sender, EventArgs e)\r
1039         {\r
1040             if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
1041                 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1042             else\r
1043             {\r
1044                 btn_eCancel.Enabled = true;\r
1045                 String query = "";\r
1046                 if (QueryEditorText.Text == "")\r
1047                 {\r
1048                     query = GenerateTheQuery();\r
1049                 }\r
1050                 else\r
1051                 {\r
1052                     query = QueryEditorText.Text;\r
1053                 }\r
1054 \r
1055                 ThreadPool.QueueUserWorkItem(procMonitor, query);\r
1056                 lbl_encode.Visible = true;\r
1057                 lbl_encode.Text = "Encoding in Progress";\r
1058             }\r
1059         }\r
1060 \r
1061         private void btn_eCancel_Click(object sender, EventArgs e)\r
1062         {\r
1063             process.killCLI();\r
1064             process.setNull();\r
1065             lbl_encode.Text = "Encoding Canceled";\r
1066         }\r
1067 \r
1068         private void procMonitor(object state)\r
1069         {\r
1070             // Make sure we are not already encoding and if we are then display an error.\r
1071             if (hbProc != null)\r
1072             {\r
1073                 MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1074             }\r
1075             else\r
1076             {\r
1077                 hbProc = process.runCli(this, (string)state, false, false, false, false);\r
1078                 hbProc.WaitForExit();\r
1079 \r
1080                 try\r
1081                 {\r
1082                     /*\r
1083                     //*****************************************************************************************\r
1084                     // BUG!\r
1085                     // When the below code is used and standard error is set to true, hbcli is outputing a\r
1086                     // video stream which has mild corruption issues every few seconds.\r
1087                     // Maybe an issue with the Parser cauing the CLI to hickup/pause?\r
1088                     //*****************************************************************************************\r
1089 \r
1090                     \r
1091                     Parsing.Parser encode = new Parsing.Parser(hbProc.StandardOutput.BaseStream);\r
1092                     encode.OnEncodeProgress += encode_OnEncodeProgress;\r
1093                     while (!encode.EndOfStream)\r
1094                     {\r
1095                         encode.ReadLine();\r
1096                     }\r
1097 \r
1098                     hbProc.WaitForExit();\r
1099                     process.closeCLI();\r
1100                      */\r
1101 \r
1102                 }\r
1103                 catch (Exception exc)\r
1104                 {\r
1105                     // Do nothing\r
1106                     MessageBox.Show(exc.ToString());\r
1107                 }\r
1108 \r
1109 \r
1110                 setEncodeLabel();\r
1111                 hbProc = null;\r
1112 \r
1113                 // Do something whent he encode ends.\r
1114                 switch (Properties.Settings.Default.CompletionOption)\r
1115                 {\r
1116                     case "Shutdown":\r
1117                         System.Diagnostics.Process.Start("Shutdown", "-s -t 60");\r
1118                         break;\r
1119                     case "Log Off":\r
1120                         ExitWindowsEx(0, 0);\r
1121                         break;\r
1122                     case "Suspend":\r
1123                         Application.SetSuspendState(PowerState.Suspend, true, true);\r
1124                         break;\r
1125                     case "Hibernate":\r
1126                         Application.SetSuspendState(PowerState.Hibernate, true, true);\r
1127                         break;\r
1128                     case "Lock System":\r
1129                         LockWorkStation();\r
1130                         break;\r
1131                     case "Quit HandBrake":\r
1132                         Application.Exit();\r
1133                         break;\r
1134                     default:\r
1135                         break;\r
1136                 }\r
1137             }\r
1138         }   \r
1139 \r
1140         private void setEncodeLabel()\r
1141         {\r
1142             if (this.InvokeRequired)\r
1143             {\r
1144                 this.BeginInvoke(new UpdateUIHandler(setEncodeLabel));\r
1145                 return;\r
1146             }\r
1147             lbl_encode.Text = "Encoding Finished";\r
1148         }\r
1149 \r
1150         private void encode_OnEncodeProgress(object Sender, int CurrentTask, int TaskCount, float PercentComplete, float CurrentFps, float AverageFps, TimeSpan TimeRemaining)\r
1151         {\r
1152 \r
1153             if (this.InvokeRequired)\r
1154             {\r
1155                 this.BeginInvoke(new Parsing.EncodeProgressEventHandler(encode_OnEncodeProgress),\r
1156                     new object[] { Sender, CurrentTask, TaskCount, PercentComplete, CurrentFps, AverageFps, TimeRemaining });\r
1157                 return;\r
1158             }\r
1159             lbl_encode.Text = string.Format("Encode Progress: {0}%,       FPS: {1},       Avg FPS: {2},       Time Remaining: {3} ", PercentComplete, CurrentFps, AverageFps, TimeRemaining);\r
1160         }\r
1161 \r
1162         #endregion\r
1163 \r
1164 \r
1165         //---------------------------------------------------\r
1166         //  Some Functions\r
1167         //  - Query Generation\r
1168         //---------------------------------------------------\r
1169 \r
1170         #region Program Functions\r
1171 \r
1172         public string GenerateTheQuery()\r
1173         {\r
1174             // Source tab\r
1175             #region source\r
1176             string source = text_source.Text;\r
1177             string dvdTitle = drp_dvdtitle.Text;\r
1178             string chapterStart = drop_chapterStart.Text;\r
1179             string chapterFinish = drop_chapterFinish.Text;\r
1180             int totalChapters = drop_chapterFinish.Items.Count - 1;\r
1181             string dvdChapter = "";\r
1182 \r
1183             source = " -i " + '"' + source + '"';\r
1184 \r
1185             if (dvdTitle == "Automatic")\r
1186                 dvdTitle = "";\r
1187             else\r
1188             {\r
1189                 string[] titleInfo = dvdTitle.Split(' ');\r
1190                 dvdTitle = " -t " + titleInfo[0];\r
1191             }\r
1192 \r
1193             if (chapterFinish.Equals("Auto") && chapterStart.Equals("Auto"))\r
1194                 dvdChapter = "";\r
1195             else if (chapterFinish == chapterStart)\r
1196                 dvdChapter = " -c " + chapterStart;\r
1197             else\r
1198                 dvdChapter = " -c " + chapterStart + "-" + chapterFinish;\r
1199 \r
1200             string querySource = source + dvdTitle + dvdChapter;\r
1201             #endregion\r
1202 \r
1203             // Destination tab\r
1204             #region Destination\r
1205 \r
1206             string destination = text_destination.Text;\r
1207             string videoEncoder = drp_videoEncoder.Text;\r
1208             string audioEncoder = drp_audioCodec.Text;\r
1209             string width = text_width.Text;\r
1210             string height = text_height.Text;\r
1211 \r
1212             if (destination == "")\r
1213                 MessageBox.Show("No destination has been selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1214             else\r
1215                 destination = " -o " + '"' + destination + '"'; //'"'+ \r
1216 \r
1217 \r
1218             switch (videoEncoder)\r
1219             {\r
1220                 case "Mpeg 4":\r
1221                     videoEncoder = " -e ffmpeg";\r
1222                     break;\r
1223                 case "Xvid":\r
1224                     videoEncoder = " -e xvid";\r
1225                     break;\r
1226                 case "H.264":\r
1227                     videoEncoder = " -e x264";\r
1228                     break;\r
1229                 case "H.264 (iPod)":\r
1230                     videoEncoder = " -e x264b30";\r
1231                     break;\r
1232                 default:\r
1233                     videoEncoder = " -e x264";\r
1234                     break;\r
1235             }\r
1236 \r
1237             switch (audioEncoder)\r
1238             {\r
1239                 case "AAC":\r
1240                     audioEncoder = " -E faac";\r
1241                     break;\r
1242                 case "MP3":\r
1243                     audioEncoder = " -E lame";\r
1244                     break;\r
1245                 case "Vorbis":\r
1246                     audioEncoder = " -E vorbis";\r
1247                     break;\r
1248                 case "AC3":\r
1249                     audioEncoder = " -E ac3";\r
1250                     break;\r
1251                 default:\r
1252                     audioEncoder = " -E faac";\r
1253                     break;\r
1254             }\r
1255 \r
1256             if (width != "")\r
1257                 width = " -w " + width;\r
1258 \r
1259 \r
1260             if (height == "Auto")\r
1261             {\r
1262                 height = "";\r
1263             }\r
1264             else if (height != "")\r
1265             {\r
1266                 height = " -l " + height;\r
1267             }\r
1268 \r
1269 \r
1270             string queryDestination = destination + videoEncoder + audioEncoder + width + height;\r
1271             #endregion\r
1272 \r
1273             // Picture Settings Tab\r
1274             #region Picture Settings Tab\r
1275 \r
1276             string cropSetting = drp_crop.Text;\r
1277             string cropTop = text_top.Text;\r
1278             string cropBottom = text_bottom.Text;\r
1279             string cropLeft = text_left.Text;\r
1280             string cropRight = text_right.Text;\r
1281             string subtitles = drp_subtitle.Text;\r
1282             string cropOut = "";\r
1283             string deInterlace_Option = drp_deInterlace_option.Text;\r
1284             string deinterlace = "";\r
1285             string grayscale = "";\r
1286             string pixelRatio = "";\r
1287             string ChapterMarkers = "";\r
1288             // Returns Crop Query\r
1289 \r
1290             if (cropSetting == "Auto Crop")\r
1291                 cropOut = "";\r
1292             else if (cropSetting == "No Crop")\r
1293                 cropOut = " --crop 0:0:0:0 ";\r
1294             else\r
1295             {\r
1296                 if (text_top.Text == "")\r
1297                     cropTop = "0";\r
1298                 if (text_bottom.Text == "")\r
1299                     cropBottom = "0";\r
1300                 if (text_left.Text == "")\r
1301                     cropLeft = "0";\r
1302                 if (text_right.Text == "")\r
1303                     cropRight = "0";\r
1304 \r
1305                 cropOut = " --crop " + cropTop + ":" + cropBottom + ":" + cropLeft + ":" + cropRight;\r
1306             }\r
1307 \r
1308             if (subtitles == "None")\r
1309                 subtitles = "";\r
1310             else if (subtitles == "")\r
1311                 subtitles = "";\r
1312             else\r
1313             {\r
1314                 string[] tempSub;\r
1315                 tempSub = subtitles.Split(' ');\r
1316                 subtitles = " -s " + tempSub[0];\r
1317             }\r
1318 \r
1319             switch (deInterlace_Option)\r
1320             {\r
1321                 case "None":\r
1322                     deinterlace = "";\r
1323                     break;\r
1324                 case "Original (Fast)":\r
1325                     deinterlace = " --deinterlace=fast";\r
1326                     break;\r
1327                 case "yadif (Slow)":\r
1328                     deinterlace = " --deinterlace=slow";\r
1329                     break;\r
1330                 case "yadif + mcdeint (Slower)":\r
1331                     deinterlace = " --deinterlace=slower";\r
1332                     break;\r
1333                 case "yadif + mcdeint (Slowest)":\r
1334                     deinterlace = " --deinterlace=slowest";\r
1335                     break;\r
1336                 default:\r
1337                     deinterlace = "";\r
1338                     break;\r
1339             }\r
1340 \r
1341             if (check_grayscale.Checked)\r
1342                 grayscale = " -g ";\r
1343 \r
1344             if (CheckPixelRatio.Checked)\r
1345                 pixelRatio = " -p ";\r
1346 \r
1347             if (Check_ChapterMarkers.Checked)\r
1348                 ChapterMarkers = " -m ";\r
1349 \r
1350             string queryPictureSettings = cropOut + subtitles + deinterlace + grayscale + pixelRatio + ChapterMarkers;\r
1351             #endregion\r
1352 \r
1353             // Video Settings Tab\r
1354             #region Video Settings Tab\r
1355 \r
1356             string videoBitrate = text_bitrate.Text;\r
1357             string videoFilesize = text_filesize.Text;\r
1358             double videoQuality = slider_videoQuality.Value;\r
1359             string vidQSetting = "";\r
1360             string twoPassEncoding = "";\r
1361             string videoFramerate = drp_videoFramerate.Text;\r
1362             string turboH264 = "";\r
1363             string largeFile = "";\r
1364             string deblock = "";\r
1365             string detelecine = "";\r
1366             string denoise = "";\r
1367             string CRF = CheckCRF.CheckState.ToString();\r
1368 \r
1369             if (CRF == "Checked")\r
1370                 CRF = " -Q ";\r
1371             else\r
1372                 CRF = "";\r
1373 \r
1374             if (videoBitrate != "")\r
1375                 videoBitrate = " -b " + videoBitrate;\r
1376 \r
1377             if (videoFilesize != "")\r
1378                 videoFilesize = " -S " + videoFilesize;\r
1379 \r
1380             // Video Quality Setting\r
1381 \r
1382             if ((videoQuality == 0))\r
1383                 vidQSetting = "";\r
1384             else\r
1385             {\r
1386                 videoQuality = videoQuality / 100;\r
1387                 if (videoQuality == 1)\r
1388                 {\r
1389                     vidQSetting = "1.0";\r
1390                 }\r
1391                 vidQSetting = " -q " + videoQuality.ToString(new CultureInfo("en-US"));\r
1392             }\r
1393 \r
1394             if (check_2PassEncode.Checked)\r
1395                 twoPassEncoding = " -2 ";\r
1396 \r
1397             if (videoFramerate == "Automatic")\r
1398                 videoFramerate = "";\r
1399             else\r
1400                 videoFramerate = " -r " + videoFramerate;\r
1401 \r
1402             if (check_turbo.Checked)\r
1403                 turboH264 = " -T ";\r
1404 \r
1405             if (check_largeFile.Checked)\r
1406                 largeFile = " -4 ";\r
1407 \r
1408             if (check_deblock.Checked)\r
1409                 deblock = " --deblock";\r
1410 \r
1411             if (check_detelecine.Checked)\r
1412                 detelecine = " --detelecine";\r
1413 \r
1414             switch (drp_deNoise.Text)\r
1415             {\r
1416                 case "None":\r
1417                     denoise = "";\r
1418                     break;\r
1419                 case "Weak":\r
1420                     denoise = " --denoise=weak";\r
1421                     break;\r
1422                 case "Medium":\r
1423                     denoise = " --denoise=medium";\r
1424                     break;\r
1425                 case "Strong":\r
1426                     denoise = " --denoise=strong";\r
1427                     break;\r
1428                 default:\r
1429                     denoise = "";\r
1430                     break;\r
1431             }\r
1432 \r
1433             string queryVideoSettings = videoBitrate + videoFilesize + vidQSetting + CRF + twoPassEncoding + videoFramerate + turboH264 + largeFile + deblock + detelecine + denoise;\r
1434             #endregion\r
1435 \r
1436             // Audio Settings Tab\r
1437             #region Audio Settings Tab\r
1438 \r
1439             string audioBitrate = drp_audioBitrate.Text;\r
1440             string audioSampleRate = drp_audioSampleRate.Text;\r
1441             string audioChannels = drp_audioChannels.Text;\r
1442             string Mixdown = drp_audioMixDown.Text;\r
1443             string SixChannelAudio = "";\r
1444 \r
1445             if (audioBitrate != "")\r
1446                 audioBitrate = " -B " + audioBitrate;\r
1447 \r
1448             if (audioSampleRate != "")\r
1449                 audioSampleRate = " -R " + audioSampleRate;\r
1450 \r
1451             if (audioChannels == "Automatic")\r
1452                 audioChannels = "";\r
1453             else if (audioChannels == "")\r
1454                 audioChannels = "";\r
1455             else\r
1456             {\r
1457                 string[] tempSub;\r
1458                 tempSub = audioChannels.Split(' ');\r
1459                 audioChannels = " -a " + tempSub[0];\r
1460             }\r
1461 \r
1462             switch (Mixdown)\r
1463             {\r
1464                 case "Automatic":\r
1465                     Mixdown = "";\r
1466                     break;\r
1467                 case "Mono":\r
1468                     Mixdown = "mono";\r
1469                     break;\r
1470                 case "Stereo":\r
1471                     Mixdown = "stereo";\r
1472                     break;\r
1473                 case "Dolby Surround":\r
1474                     Mixdown = "dpl1";\r
1475                     break;\r
1476                 case "Dolby Pro Logic II":\r
1477                     Mixdown = "dpl2";\r
1478                     break;\r
1479                 case "6 Channel Discrete":\r
1480                     Mixdown = "6ch";\r
1481                     break;\r
1482                 default:\r
1483                     Mixdown = "";\r
1484                     break;\r
1485             }\r
1486 \r
1487             if (Mixdown != "")\r
1488                 SixChannelAudio = " -6 " + Mixdown;\r
1489             else\r
1490                 SixChannelAudio = "";\r
1491 \r
1492             string queryAudioSettings = audioBitrate + audioSampleRate + audioChannels + SixChannelAudio;\r
1493             #endregion\r
1494 \r
1495             // H264 Tab\r
1496             #region  H264 Tab\r
1497 \r
1498             string h264Advanced = rtf_h264advanced.Text;\r
1499 \r
1500             if ((h264Advanced == ""))\r
1501                 h264Advanced = "";\r
1502             else\r
1503                 h264Advanced = " -x " + h264Advanced;\r
1504 \r
1505 \r
1506             string h264Settings = h264Advanced;\r
1507             #endregion\r
1508 \r
1509             // Other\r
1510             #region Processors / Other\r
1511 \r
1512             string processors = Properties.Settings.Default.Processors;\r
1513             //  Number of Processors Handler\r
1514 \r
1515             if (processors == "Automatic")\r
1516                 processors = "";\r
1517             else\r
1518                 processors = " -C " + processors + " ";\r
1519 \r
1520 \r
1521             string queryAdvancedSettings = processors;\r
1522 \r
1523             string verbose = "";\r
1524             if (Properties.Settings.Default.verbose == "Checked")\r
1525                 verbose = " -v ";\r
1526             #endregion\r
1527 \r
1528             return querySource + queryDestination + queryPictureSettings + queryVideoSettings + h264Settings + queryAudioSettings + queryAdvancedSettings + verbose;\r
1529         }\r
1530 \r
1531         private void presetLoader(Functions.QueryParser presetQuery, string name)\r
1532         {\r
1533             // ---------------------------\r
1534             // Setup the GUI\r
1535             // ---------------------------\r
1536 \r
1537             // Source tab\r
1538             #region source\r
1539             if (presetQuery.Source != "")\r
1540                 text_source.Text = presetQuery.Source;\r
1541 \r
1542             if (presetQuery.DVDTitle != 0)\r
1543                 drp_dvdtitle.Text = presetQuery.DVDTitle.ToString();\r
1544 \r
1545             if (presetQuery.DVDChapterStart != 0)\r
1546                 drop_chapterStart.Text = presetQuery.DVDChapterStart.ToString();\r
1547 \r
1548             if (presetQuery.DVDChapterFinish != 0)\r
1549                 drop_chapterFinish.Text = presetQuery.DVDChapterFinish.ToString();\r
1550 \r
1551             if (presetQuery.Format != "")\r
1552             {\r
1553                 string destination = text_destination.Text;\r
1554                 destination = destination.Replace(".mp4", "." + presetQuery.Format);\r
1555                 destination = destination.Replace(".m4v", "." + presetQuery.Format);\r
1556                 destination = destination.Replace(".avi", "." + presetQuery.Format);\r
1557                 destination = destination.Replace(".mkv", "." + presetQuery.Format);\r
1558                 destination = destination.Replace(".ogm", "." + presetQuery.Format);\r
1559                 text_destination.Text = destination;\r
1560             }\r
1561 \r
1562             #endregion\r
1563 \r
1564             // Destination tab\r
1565             #region destination\r
1566 \r
1567             if (presetQuery.Destination != "")\r
1568                 text_destination.Text = presetQuery.Destination;\r
1569 \r
1570             drp_videoEncoder.Text = presetQuery.VideoEncoder;\r
1571             drp_audioCodec.Text = presetQuery.AudioEncoder;\r
1572             if (presetQuery.Width != 0)\r
1573             {\r
1574                 text_width.Text = presetQuery.Width.ToString();\r
1575 \r
1576             }\r
1577             else\r
1578             {\r
1579                 text_width.Text = "";\r
1580                 text_width.BackColor = Color.White;\r
1581             }\r
1582 \r
1583             if (presetQuery.Height != 0)\r
1584             {\r
1585                 text_height.Text = presetQuery.Height.ToString();\r
1586             }\r
1587             else\r
1588             {\r
1589                 text_height.Text = "";\r
1590                 text_height.BackColor = Color.White;\r
1591             }\r
1592             #endregion\r
1593 \r
1594             // Picture Settings Tab\r
1595             #region Picture\r
1596             drp_crop.Text = "Manual";\r
1597             text_top.Text = presetQuery.CropTop;\r
1598             text_bottom.Text = presetQuery.CropBottom;\r
1599             text_left.Text = presetQuery.CropLeft;\r
1600             text_right.Text = presetQuery.CropRight;\r
1601 \r
1602             drp_deInterlace_option.Text = presetQuery.DeInterlace;\r
1603             drp_deNoise.Text = presetQuery.DeNoise;\r
1604 \r
1605             if (presetQuery.DeTelecine == true)\r
1606             {\r
1607                 check_detelecine.CheckState = CheckState.Checked;\r
1608             }\r
1609             else\r
1610             {\r
1611                 check_detelecine.CheckState = CheckState.Unchecked;\r
1612             }\r
1613 \r
1614 \r
1615             if (presetQuery.DeBlock == true)\r
1616             {\r
1617                 check_deblock.CheckState = CheckState.Checked;\r
1618             }\r
1619             else\r
1620             {\r
1621                 check_deblock.CheckState = CheckState.Unchecked;\r
1622             }\r
1623 \r
1624             if (presetQuery.ChapterMarkers == true)\r
1625             {\r
1626                 Check_ChapterMarkers.CheckState = CheckState.Checked;\r
1627             }\r
1628             else\r
1629             {\r
1630                 Check_ChapterMarkers.CheckState = CheckState.Unchecked;\r
1631             }\r
1632 \r
1633             if (presetQuery.Anamorphic == true)\r
1634             {\r
1635                 CheckPixelRatio.CheckState = CheckState.Checked;\r
1636             }\r
1637             else\r
1638             {\r
1639                 CheckPixelRatio.CheckState = CheckState.Unchecked;\r
1640             }\r
1641             #endregion\r
1642 \r
1643             // Video Settings Tab\r
1644             #region video\r
1645             text_bitrate.Text = presetQuery.AverageVideoBitrate;\r
1646             text_filesize.Text = presetQuery.VideoTargetSize;\r
1647             slider_videoQuality.Value = presetQuery.VideoQuality;\r
1648             if (slider_videoQuality.Value != 0)\r
1649             {\r
1650                 CheckCRF.Enabled = true;\r
1651                 int ql = presetQuery.VideoQuality;\r
1652                 SliderValue.Text = ql.ToString() + "%";\r
1653             }\r
1654 \r
1655             if (presetQuery.TwoPass == true)\r
1656             {\r
1657                 check_2PassEncode.CheckState = CheckState.Checked;\r
1658             }\r
1659             else\r
1660             {\r
1661                 check_2PassEncode.CheckState = CheckState.Unchecked;\r
1662             }\r
1663 \r
1664             if (presetQuery.Grayscale == true)\r
1665             {\r
1666                 check_grayscale.CheckState = CheckState.Checked;\r
1667             }\r
1668             else\r
1669             {\r
1670                 check_grayscale.CheckState = CheckState.Unchecked;\r
1671             }\r
1672 \r
1673             drp_videoFramerate.Text = presetQuery.VideoFramerate;\r
1674 \r
1675             if (presetQuery.TurboFirstPass == true)\r
1676             {\r
1677                 check_turbo.CheckState = CheckState.Checked;\r
1678             }\r
1679             else\r
1680             {\r
1681                 check_turbo.CheckState = CheckState.Unchecked;\r
1682             }\r
1683 \r
1684             if (presetQuery.LargeMP4 == true)\r
1685             {\r
1686                 check_largeFile.CheckState = CheckState.Checked;\r
1687             }\r
1688             else\r
1689             {\r
1690                 check_largeFile.CheckState = CheckState.Unchecked;\r
1691             }\r
1692             if (presetQuery.CRF == true)\r
1693             {\r
1694                 CheckCRF.CheckState = CheckState.Checked;\r
1695             }\r
1696             else\r
1697             {\r
1698                 CheckCRF.CheckState = CheckState.Unchecked;\r
1699             }\r
1700             #endregion\r
1701 \r
1702             // Audio Settings Tab\r
1703             #region audio\r
1704             drp_audioBitrate.Text = presetQuery.AudioBitrate;\r
1705             drp_audioSampleRate.Text = presetQuery.AudioSampleBitrate;\r
1706             drp_audioChannels.Text = presetQuery.AudioTrack1;\r
1707             drp_audioMixDown.Text = presetQuery.AudioTrackMix;\r
1708             drp_subtitle.Text = presetQuery.Subtitles;\r
1709             #endregion\r
1710 \r
1711             // H264 Tab & Preset Name\r
1712             #region other\r
1713             rtf_h264advanced.Text = presetQuery.H264Query;\r
1714 \r
1715             // Set the preset name\r
1716             groupBox_output.Text = "Output Settings (Preset: " + name + ")";\r
1717             #endregion\r
1718         }\r
1719 \r
1720         private Boolean updateCheck()\r
1721         {\r
1722             try\r
1723             {\r
1724                 Functions.RssReader rssRead = new Functions.RssReader();\r
1725                 string build = rssRead.build();\r
1726 \r
1727                 int latest = int.Parse(build);\r
1728                 int current = Properties.Settings.Default.build;\r
1729                 int skip = Properties.Settings.Default.skipversion;\r
1730 \r
1731                 if (latest == skip)\r
1732                 {\r
1733                     return false;\r
1734                 }\r
1735                 else\r
1736                 {\r
1737                     Boolean update = (latest > current);\r
1738                     if (update == true)\r
1739                         lbl_update.Visible = true;\r
1740                     return update;\r
1741                 }\r
1742             }\r
1743             catch (Exception exc)\r
1744             {\r
1745                 MessageBox.Show(exc.ToString());\r
1746                 return false;\r
1747             }\r
1748         }\r
1749 \r
1750         public void setStreamReader(Parsing.DVD dvd)\r
1751         {\r
1752             this.thisDVD = dvd;\r
1753         }\r
1754 \r
1755         #endregion\r
1756 \r
1757 \r
1758         // This is the END of the road ------------------------------------------------------------------------------\r
1759     }\r
1760 }