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
8 using System.Collections;
\r
9 using System.Collections.Generic;
\r
10 using System.Drawing;
\r
12 using System.Windows.Forms;
\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
22 public partial class frmMain : Form
\r
24 // Declarations *******************************************************
\r
25 // Objects which may be used by one or more other objects
\r
26 Functions.Main hb_common_func = new Functions.Main();
\r
27 Functions.Encode cliObj = new Functions.Encode();
\r
28 Functions.Queue encodeQueue = new Functions.Queue();
\r
29 Presets.PresetsHandler presetHandler = new Presets.PresetsHandler();
\r
30 Parsing.Title selectedTitle;
\r
32 // Objects belonging to this window only
\r
33 PresetLoader presetLoader = new PresetLoader();
\r
34 x264Panel x264PanelFunctions = new x264Panel();
\r
35 QueryGenerator queryGen = new QueryGenerator();
\r
37 internal Process hbProc;
\r
38 private Parsing.DVD thisDVD;
\r
39 private frmQueue queueWindow;
\r
40 private delegate void updateStatusChanger();
\r
41 private string lastAction = null;
\r
42 public int maxWidth = 0;
\r
43 public int maxHeight = 0;
\r
45 // Applicaiton Startup ************************************************
\r
47 #region Application Startup
\r
51 // Load the splash screen in this thread
\r
52 Form splash = new frmSplashScreen();
\r
55 // Initialize the queue window.
\r
56 queueWindow = new frmQueue(this);
\r
57 //Create a label that can be updated from the parent thread.
\r
58 Label lblStatus = new Label();
\r
59 lblStatus.Size = new Size(250, 20);
\r
60 lblStatus.Location = new Point(10, 280);
\r
61 splash.Controls.Add(lblStatus);
\r
63 InitializeComponent();
\r
65 // Update the users config file with the CLI version data.
\r
66 lblStatus.Text = "Setting Version Data ...";
\r
67 Application.DoEvents();
\r
68 ArrayList x = hb_common_func.getCliVersionData();
\r
73 Properties.Settings.Default.hb_build = int.Parse(x[1].ToString());
\r
74 Properties.Settings.Default.hb_version = x[0].ToString();
\r
78 Properties.Settings.Default.hb_build = 0;
\r
79 Properties.Settings.Default.hb_version = "0";
\r
83 // show the form, but leave disabled until preloading is complete then show the main form
\r
84 this.Enabled = false;
\r
86 Application.DoEvents(); // Forces frmMain to draw
\r
88 // update the status
\r
89 if (Properties.Settings.Default.updateStatus == "Checked")
\r
91 lblStatus.Text = "Checking for updates ...";
\r
92 Application.DoEvents();
\r
93 Thread updateCheckThread = new Thread(startupUpdateCheck);
\r
94 updateCheckThread.Start();
\r
97 // Setup the GUI components
\r
98 lblStatus.Text = "Setting up the GUI ...";
\r
99 Application.DoEvents();
\r
100 setupH264Panel(); // Initalize the H.264 Panel
\r
101 loadPresetPanel(); // Load the Preset Panel
\r
102 // Load the user's default settings or Normal Preset
\r
103 if (Properties.Settings.Default.defaultSettings == "Checked")
\r
104 loadUserDefaults();
\r
106 loadNormalPreset();
\r
107 // Expand the preset Nodes
\r
108 treeView_presets.ExpandAll();
\r
109 // Enabled GUI tooltip's if Required
\r
110 if (Properties.Settings.Default.tooltipEnable == "Checked")
\r
111 ToolTip.Active = true;
\r
112 lbl_encode.Text = "";
\r
115 lblStatus.Text = "Loading Complete!";
\r
116 Application.DoEvents();
\r
118 //Close the splash screen
\r
122 // Turn the interface back to the user
\r
123 this.Enabled = true;
\r
125 // Some event Handlers. Used for minimize to taskbar
\r
126 this.Resize += new EventHandler(frmMain_Resize);
\r
132 // Startup Functions
\r
133 private void startupUpdateCheck()
\r
137 if (this.InvokeRequired)
\r
139 this.BeginInvoke(new updateStatusChanger(startupUpdateCheck));
\r
143 Boolean update = hb_common_func.updateCheck(false);
\r
144 if (update == true)
\r
146 frmUpdater updateWindow = new frmUpdater();
\r
147 updateWindow.Show();
\r
150 catch (Exception) { /* Do Nothing*/ }
\r
152 private void setupH264Panel()
\r
154 // Set the default settings of the x264 panel
\r
155 drop_bFrames.Text = "Default (0)";
\r
156 drop_refFrames.Text = "Default (1)";
\r
157 drop_subpixelMotionEstimation.Text = "Default (4)";
\r
158 drop_trellis.Text = "Default (0)";
\r
159 drop_MotionEstimationMethod.Text = "Default (Hexagon)";
\r
160 drop_MotionEstimationRange.Text = "Default (16)";
\r
161 drop_directPrediction.Text = "Default (Spatial)";
\r
162 drop_deblockAlpha.Text = "Default (0)";
\r
163 drop_deblockBeta.Text = "Default (0)";
\r
164 drop_analysis.Text = "Default (some)";
\r
165 rtf_x264Query.Text = "";
\r
167 private void loadUserDefaults()
\r
169 // Try to load the users default settings.
\r
170 string userDefaults = Properties.Settings.Default.defaultUserSettings;
\r
172 if (userDefaults == "")
\r
173 loadNormalPreset();
\r
176 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(userDefaults);
\r
177 presetLoader.presetLoader(this, presetQuery, "User Defaults ");
\r
180 private void queueRecovery()
\r
182 if (hb_common_func.check_queue_recovery() == true)
\r
184 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
186 if (result == DialogResult.Yes)
\r
187 encodeQueue.recoverQueue("hb_queue_recovery.dat"); // Start Recovery
\r
190 // Remove the Queue recovery file if the user doesn't want to recovery the last queue.
\r
191 string queuePath = Path.Combine(Path.GetTempPath(), "hb_queue_recovery.dat");
\r
192 if (File.Exists(queuePath))
\r
193 File.Delete(queuePath);
\r
200 // The Applications Main Menu and Menus *******************************
\r
203 private void mnu_exit_Click(object sender, EventArgs e)
\r
205 Application.Exit();
\r
210 private void mnu_encode_Click(object sender, EventArgs e)
\r
212 queueWindow.setQueue(encodeQueue);
\r
213 queueWindow.Show();
\r
215 private void mnu_encodeLog_Click(object sender, EventArgs e)
\r
217 String file = String.Empty;
\r
218 if (lastAction == "scan")
\r
219 file = "dvdinfo.dat";
\r
221 file = "hb_encode_log.dat";
\r
223 frmActivityWindow dvdInfoWindow = new frmActivityWindow(file, this, queueWindow);
\r
224 dvdInfoWindow.Show();
\r
226 private void mnu_options_Click(object sender, EventArgs e)
\r
228 Form Options = new frmOptions(this);
\r
229 Options.ShowDialog();
\r
233 #region Presets Menu
\r
234 private void mnu_presetReset_Click(object sender, EventArgs e)
\r
236 presetHandler.updateBuiltInPresets();
\r
238 if (treeView_presets.Nodes.Count == 0)
\r
239 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
241 MessageBox.Show("Presets have been updated!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
243 treeView_presets.ExpandAll();
\r
245 private void mnu_delete_preset_Click(object sender, EventArgs e)
\r
247 // Empty the preset file
\r
248 string presetsFile = Application.StartupPath.ToString() + "\\presets.dat";
\r
249 if (File.Exists(presetsFile))
\r
250 File.Delete(presetsFile);
\r
254 FileStream strm = new FileStream(presetsFile, FileMode.Create, FileAccess.Write);
\r
258 catch (Exception exc)
\r
260 MessageBox.Show("An error has occured during the preset removal process.\n If you are using Windows Vista, you may need to run under Administrator Mode to complete this task. \n" + exc.ToString());
\r
263 // Reload the preset panel
\r
266 private void mnu_SelectDefault_Click(object sender, EventArgs e)
\r
268 loadNormalPreset();
\r
270 private void btn_new_preset_Click(object sender, EventArgs e)
\r
272 // Remember each nodes expanded status so we can reload it
\r
273 List<Boolean> nodeStatus = saveTreeViewState();
\r
274 nodeStatus.Add(true);
\r
276 Form preset = new frmAddPreset(this, queryGen.GenerateTheQuery(this), presetHandler);
\r
277 preset.ShowDialog();
\r
279 // Now reload the TreeView states
\r
280 loadTreeViewStates(nodeStatus);
\r
285 private void mnu_handbrake_forums_Click(object sender, EventArgs e)
\r
287 Process.Start("http://forum.handbrake.fr/");
\r
289 private void mnu_user_guide_Click(object sender, EventArgs e)
\r
291 Process.Start("http://trac.handbrake.fr/wiki/HandBrakeGuide");
\r
293 private void mnu_handbrake_home_Click(object sender, EventArgs e)
\r
295 Process.Start("http://handbrake.fr");
\r
297 private void mnu_UpdateCheck_Click(object sender, EventArgs e)
\r
299 Boolean update = hb_common_func.updateCheck(true);
\r
300 if (update == true)
\r
302 frmUpdater updateWindow = new frmUpdater();
\r
303 updateWindow.Show();
\r
306 MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
308 private void mnu_about_Click(object sender, EventArgs e)
\r
310 Form About = new frmAbout();
\r
311 About.ShowDialog();
\r
315 #region Preset Menu
\r
316 private void pmnu_expandAll_Click(object sender, EventArgs e)
\r
318 treeView_presets.ExpandAll();
\r
320 private void pmnu_collapse_Click(object sender, EventArgs e)
\r
322 treeView_presets.CollapseAll();
\r
324 private void treeview_presets_mouseUp(object sender, MouseEventArgs e)
\r
326 if (e.Button == MouseButtons.Right)
\r
327 treeView_presets.SelectedNode = treeView_presets.GetNodeAt(e.Location);
\r
328 treeView_presets.Select();
\r
330 private void pmnu_delete_click(object sender, EventArgs e)
\r
332 if (treeView_presets.SelectedNode != null)
\r
334 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
336 // Remember each nodes expanded status so we can reload it
\r
337 List<Boolean> nodeStatus = saveTreeViewState();
\r
339 // Now reload the preset panel
\r
342 // Now reload the TreeView states
\r
343 loadTreeViewStates(nodeStatus);
\r
345 treeView_presets.Select();
\r
349 // MainWindow Components, Actions and Functions ***********************
\r
353 private void btn_source_Click(object sender, EventArgs e)
\r
355 if (Properties.Settings.Default.drive_detection == "Checked")
\r
357 mnu_dvd_drive.Visible = true;
\r
358 Thread driveInfoThread = new Thread(getDriveInfoThread);
\r
359 driveInfoThread.Start();
\r
362 mnu_dvd_drive.Visible = false;
\r
364 private void btn_start_Click(object sender, EventArgs e)
\r
366 if (text_source.Text == string.Empty || text_source.Text == "Click 'Source' to continue" || text_destination.Text == string.Empty)
\r
367 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
370 // Set the last action to encode.
\r
371 // This is used for tracking which file to load in the activity window
\r
372 lastAction = "encode";
\r
375 if (rtf_query.Text != "")
\r
376 query = rtf_query.Text;
\r
378 query = queryGen.GenerateTheQuery(this);
\r
380 ThreadPool.QueueUserWorkItem(procMonitor, query);
\r
381 lbl_encode.Visible = true;
\r
382 lbl_encode.Text = "Encoding in Progress";
\r
384 btn_start.Text = "Stop";
\r
385 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
386 btn_start.Image = Properties.Resources.stop;
\r
389 private void btn_add2Queue_Click(object sender, EventArgs e)
\r
391 if (text_source.Text == string.Empty || text_source.Text == "Click 'Source' to continue" || text_destination.Text == string.Empty)
\r
392 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
396 String query = queryGen.GenerateTheQuery(this);
\r
397 if (rtf_query.Text != "")
\r
398 query = rtf_query.Text;
\r
400 encodeQueue.add(query);
\r
401 encodeQueue.write2disk("hb_queue_recovery.dat"); // Writes the queue to the recovery file, just incase the GUI crashes.
\r
403 queueWindow.setQueue(encodeQueue);
\r
404 queueWindow.Show();
\r
407 private void btn_showQueue_Click(object sender, EventArgs e)
\r
409 queueWindow.setQueue(encodeQueue);
\r
410 queueWindow.Show();
\r
412 private void btn_ActivityWindow_Click(object sender, EventArgs e)
\r
414 String file = String.Empty;
\r
415 if (lastAction == "scan")
\r
416 file = "dvdinfo.dat";
\r
418 file = "hb_encode_log.dat";
\r
420 frmActivityWindow ActivityWindow = new frmActivityWindow(file, this, queueWindow);
\r
421 ActivityWindow.Show();
\r
425 private void btn_dvd_source_Click(object sender, EventArgs e)
\r
427 // Enable the creation of chapter markers.
\r
428 Check_ChapterMarkers.Enabled = true;
\r
430 // Set the last action to scan.
\r
431 // This is used for tracking which file to load in the activity window
\r
432 lastAction = "scan";
\r
434 String filename = "";
\r
435 text_source.Text = "";
\r
437 DVD_Open.ShowDialog();
\r
438 filename = DVD_Open.SelectedPath;
\r
440 if (filename.StartsWith("\\"))
\r
441 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
444 if (filename != "")
\r
446 Form frmRD = new frmReadDVD(filename, this);
\r
447 text_source.Text = filename;
\r
448 lbl_encode.Text = "Scanning ...";
\r
449 frmRD.ShowDialog();
\r
452 text_source.Text = "Click 'Source' to continue";
\r
454 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
455 if (drp_dvdtitle.Items.Count == 0)
\r
456 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
458 lbl_encode.Text = "";
\r
461 private void btn_file_source_Click(object sender, EventArgs e)
\r
463 // Set the last action to scan.
\r
464 // This is used for tracking which file to load in the activity window
\r
465 lastAction = "scan";
\r
467 String filename = "";
\r
468 text_source.Text = "";
\r
470 ISO_Open.ShowDialog();
\r
471 filename = ISO_Open.FileName;
\r
473 if (filename.StartsWith("\\"))
\r
474 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
477 if (filename != "")
\r
479 Form frmRD = new frmReadDVD(filename, this);
\r
480 text_source.Text = filename;
\r
481 lbl_encode.Text = "Scanning ...";
\r
482 frmRD.ShowDialog();
\r
485 text_source.Text = "Click 'Source' to continue";
\r
487 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
488 if (drp_dvdtitle.Items.Count == 0)
\r
489 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
491 lbl_encode.Text = "";
\r
493 // Enable the creation of chapter markers if the file is an image of a dvd.
\r
494 if (filename.ToLower().Contains(".iso"))
\r
495 Check_ChapterMarkers.Enabled = true;
\r
498 Check_ChapterMarkers.Enabled = false;
\r
499 Check_ChapterMarkers.Checked = false;
\r
500 data_chpt.Rows.Clear();
\r
504 private void mnu_dvd_drive_Click(object sender, EventArgs e)
\r
506 // Enable the creation of chapter markers.
\r
507 Check_ChapterMarkers.Enabled = true;
\r
509 // Set the last action to scan.
\r
510 // This is used for tracking which file to load in the activity window
\r
511 lastAction = "scan";
\r
513 String filename = "";
\r
514 if (mnu_dvd_drive.Text.Contains("VIDEO_TS"))
\r
516 string[] path = mnu_dvd_drive.Text.Split(' ');
\r
517 filename = path[0];
\r
518 lbl_encode.Text = "Scanning ...";
\r
519 Form frmRD = new frmReadDVD(filename, this);
\r
520 text_source.Text = filename;
\r
521 frmRD.ShowDialog();
\r
524 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
525 if (drp_dvdtitle.Items.Count == 0)
\r
526 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
528 lbl_encode.Text = "";
\r
531 private void drp_dvdtitle_Click(object sender, EventArgs e)
\r
533 if ((drp_dvdtitle.Items.Count == 1) && (drp_dvdtitle.Items[0].ToString() == "Automatic"))
\r
534 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
536 private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
538 // Reset some values on the form
\r
539 lbl_Aspect.Text = "Select a Title";
\r
540 //lbl_RecomendedCrop.Text = "Select a Title";
\r
541 drop_chapterStart.Items.Clear();
\r
542 drop_chapterFinish.Items.Clear();
\r
544 // If the dropdown is set to automatic nothing else needs to be done.
\r
545 // Otheriwse if its not, title data has to be loased from parsing.
\r
546 if (drp_dvdtitle.Text != "Automatic")
\r
548 selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;
\r
550 // Set the Aspect Ratio
\r
551 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();
\r
552 lbl_src_res.Text = selectedTitle.Resolution.Width + " x " + selectedTitle.Resolution.Height;
\r
553 lbl_duration.Text = selectedTitle.Duration.ToString();
\r
555 // Set the Recommended Cropping values
\r
556 text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();
\r
557 text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();
\r
558 text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();
\r
559 text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();
\r
561 // Populate the Start chapter Dropdown
\r
562 drop_chapterStart.Items.Clear();
\r
563 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
564 if (drop_chapterStart.Items.Count > 0)
\r
565 drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();
\r
567 // Populate the Final Chapter Dropdown
\r
568 drop_chapterFinish.Items.Clear();
\r
569 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
570 if (drop_chapterFinish.Items.Count > 0)
\r
571 drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();
\r
573 // Populate the Audio Channels Dropdown
\r
574 drp_track1Audio.Items.Clear();
\r
575 drp_track1Audio.Items.Add("Automatic");
\r
576 drp_track1Audio.Items.Add("None");
\r
577 drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
578 drp_track1Audio.SelectedIndex = 0;
\r
580 drp_track2Audio.Items.Clear();
\r
581 drp_track2Audio.Items.Add("None");
\r
582 drp_track2Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
583 drp_track2Audio.SelectedIndex = 0;
\r
585 drp_track3Audio.Items.Clear();
\r
586 drp_track3Audio.Items.Add("None");
\r
587 drp_track3Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
588 drp_track3Audio.SelectedIndex = 0;
\r
590 drp_track4Audio.Items.Clear();
\r
591 drp_track4Audio.Items.Add("None");
\r
592 drp_track4Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
593 drp_track4Audio.SelectedIndex = 0;
\r
595 // Populate the Subtitles dropdown
\r
596 drp_subtitle.Items.Clear();
\r
597 drp_subtitle.Items.Add("None");
\r
598 drp_subtitle.Items.Add("Autoselect");
\r
599 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());
\r
600 if (drp_subtitle.Items.Count > 0)
\r
601 drp_subtitle.Text = drp_subtitle.Items[0].ToString();
\r
605 // Run the autoName & chapterNaming functions
\r
606 if (Properties.Settings.Default.autoNaming == "Checked")
\r
607 text_destination.Text = hb_common_func.autoName(drp_dvdtitle, drop_chapterStart.Text, drop_chapterFinish.Text, text_source.Text, text_destination.Text, drop_format.SelectedIndex);
\r
609 data_chpt.Rows.Clear();
\r
610 DataGridView chapterGridView = hb_common_func.chapterNaming(data_chpt, drop_chapterStart.Text, drop_chapterFinish.Text);
\r
611 if (chapterGridView != null)
\r
612 data_chpt = chapterGridView;
\r
614 private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)
\r
616 int c_start, c_end = 1;
\r
618 if (drop_chapterFinish.Text == "Auto" && drop_chapterFinish.Items.Count != 0)
\r
619 drop_chapterFinish.SelectedIndex = drop_chapterFinish.Items.Count - 1;
\r
621 int.TryParse(drop_chapterStart.Text, out c_start);
\r
622 int.TryParse(drop_chapterFinish.Text, out c_end);
\r
626 if (c_start > c_end)
\r
627 drop_chapterFinish.Text = c_start.ToString();
\r
630 lbl_duration.Text = hb_common_func.calculateDuration(drop_chapterStart.Text, drop_chapterFinish.Text, selectedTitle).ToString();
\r
632 // Run the Autonaming function
\r
633 if (Properties.Settings.Default.autoNaming == "Checked")
\r
634 text_destination.Text = hb_common_func.autoName(drp_dvdtitle, drop_chapterStart.Text, drop_chapterFinish.Text, text_source.Text, text_destination.Text, drop_format.SelectedIndex);
\r
636 private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)
\r
638 int c_start, c_end = 1;
\r
640 if (drop_chapterStart.Text == "Auto" && drop_chapterStart.Items.Count >= 1)
\r
641 drop_chapterStart.SelectedIndex = 1;
\r
643 int.TryParse(drop_chapterStart.Text, out c_start);
\r
644 int.TryParse(drop_chapterFinish.Text, out c_end);
\r
648 if (c_end < c_start)
\r
649 drop_chapterFinish.Text = c_start.ToString();
\r
652 lbl_duration.Text = hb_common_func.calculateDuration(drop_chapterStart.Text, drop_chapterFinish.Text, selectedTitle).ToString();
\r
654 // Run the Autonaming function
\r
655 if (Properties.Settings.Default.autoNaming == "Checked")
\r
656 text_destination.Text = hb_common_func.autoName(drp_dvdtitle, drop_chapterStart.Text, drop_chapterFinish.Text, text_source.Text, text_destination.Text, drop_format.SelectedIndex);
\r
660 private void btn_destBrowse_Click(object sender, EventArgs e)
\r
662 // This removes the file extension from the filename box on the save file dialog.
\r
663 // It's daft but some users don't realise that typing an extension overrides the dropdown extension selected.
\r
664 DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", "");
\r
666 // Show the dialog and set the main form file path
\r
668 if (text_destination.Text.EndsWith(".mp4"))
\r
669 DVD_Save.FilterIndex = 1;
\r
670 else if (text_destination.Text.EndsWith(".m4v"))
\r
671 DVD_Save.FilterIndex = 2;
\r
672 else if (text_destination.Text.EndsWith(".avi"))
\r
673 DVD_Save.FilterIndex = 3;
\r
674 else if (text_destination.Text.EndsWith(".ogm"))
\r
675 DVD_Save.FilterIndex = 4;
\r
676 else if (text_destination.Text.EndsWith(".mkv"))
\r
677 DVD_Save.FilterIndex = 5;
\r
679 if (DVD_Save.ShowDialog() == DialogResult.OK)
\r
681 if (DVD_Save.FileName.StartsWith("\\"))
\r
682 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
685 setAudioByContainer(DVD_Save.FileName);
\r
686 text_destination.Text = DVD_Save.FileName;
\r
688 // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)
\r
689 if (Check_ChapterMarkers.Checked)
\r
690 text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v");
\r
694 private void text_destination_TextChanged(object sender, EventArgs e)
\r
696 setAudioByContainer(text_destination.Text);
\r
697 setVideoByContainer(text_destination.Text);
\r
698 string path = text_destination.Text;
\r
699 if (path.EndsWith(".mp4"))
\r
700 drop_format.SelectedIndex = 0;
\r
701 else if (path.EndsWith(".m4v"))
\r
702 drop_format.SelectedIndex = 1;
\r
703 else if (path.EndsWith(".mkv"))
\r
704 drop_format.SelectedIndex = 2;
\r
705 else if (path.EndsWith(".avi"))
\r
706 drop_format.SelectedIndex = 3;
\r
707 else if (path.EndsWith(".ogm"))
\r
708 drop_format.SelectedIndex = 4;
\r
713 private void drop_format_SelectedIndexChanged(object sender, EventArgs e)
\r
715 if (drop_format.SelectedIndex == 0)
\r
716 setExtension(".mp4");
\r
717 else if (drop_format.SelectedIndex == 1)
\r
718 setExtension(".m4v");
\r
719 else if (drop_format.SelectedIndex == 2)
\r
720 setExtension(".mkv");
\r
721 else if (drop_format.SelectedIndex == 3)
\r
722 setExtension(".avi");
\r
723 else if (drop_format.SelectedIndex == 4)
\r
724 setExtension(".ogm");
\r
729 private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)
\r
731 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))
\r
733 check_largeFile.Enabled = true;
\r
734 check_optimiseMP4.Enabled = true;
\r
735 check_iPodAtom.Enabled = true;
\r
739 check_largeFile.Enabled = false;
\r
740 check_optimiseMP4.Enabled = false;
\r
741 check_iPodAtom.Enabled = false;
\r
742 check_largeFile.Checked = false;
\r
743 check_optimiseMP4.Checked = false;
\r
744 check_iPodAtom.Checked = false;
\r
748 //Turn off some options which are H.264 only when the user selects a non h.264 encoder
\r
749 if (drp_videoEncoder.Text.Contains("H.264"))
\r
751 if (check_2PassEncode.CheckState == CheckState.Checked)
\r
752 check_turbo.Enabled = true;
\r
754 h264Tab.Enabled = true;
\r
755 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))
\r
756 check_iPodAtom.Enabled = true;
\r
758 check_iPodAtom.Enabled = false;
\r
759 if (!drp_anamorphic.Items.Contains("Loose"))
\r
760 drp_anamorphic.Items.Add("Loose");
\r
764 check_turbo.CheckState = CheckState.Unchecked;
\r
765 check_turbo.Enabled = false;
\r
766 h264Tab.Enabled = false;
\r
767 rtf_x264Query.Text = "";
\r
768 check_iPodAtom.Enabled = false;
\r
769 check_iPodAtom.Checked = false;
\r
770 if (drp_anamorphic.Items.Count == 3)
\r
771 drp_anamorphic.Items.RemoveAt(2);
\r
775 private void text_bitrate_TextChanged(object sender, EventArgs e)
\r
777 text_filesize.Text = "";
\r
778 slider_videoQuality.Value = 0;
\r
779 SliderValue.Text = "0%";
\r
780 check_2PassEncode.Enabled = true;
\r
782 private void text_filesize_TextChanged(object sender, EventArgs e)
\r
784 text_bitrate.Text = "";
\r
785 slider_videoQuality.Value = 0;
\r
786 SliderValue.Text = "0%";
\r
787 check_2PassEncode.Enabled = true;
\r
789 private void slider_videoQuality_Scroll(object sender, EventArgs e)
\r
791 SliderValue.Text = slider_videoQuality.Value.ToString() + "%";
\r
792 text_bitrate.Text = "";
\r
793 text_filesize.Text = "";
\r
794 check_2PassEncode.Enabled = false;
\r
795 check_2PassEncode.CheckState = CheckState.Unchecked;
\r
797 private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)
\r
799 if (check_2PassEncode.CheckState.ToString() == "Checked")
\r
801 if (drp_videoEncoder.Text.Contains("H.264"))
\r
802 check_turbo.Enabled = true;
\r
806 check_turbo.Enabled = false;
\r
807 check_turbo.CheckState = CheckState.Unchecked;
\r
812 private void text_width_TextChanged(object sender, EventArgs e)
\r
814 maxWidth = 0; // Reset max width so that it's not using the MaxWidth -X. Quick hack to allow -X for preset usage.
\r
817 Boolean parsed = int.TryParse(text_width.Text, out width);
\r
818 if (parsed != false)
\r
820 if ((width % 16) != 0)
\r
821 text_width.BackColor = Color.LightCoral;
\r
823 text_width.BackColor = Color.LightGreen;
\r
826 if (lbl_Aspect.Text != "Select a Title" && maxWidth != 0 && maxHeight != 0)
\r
828 if (drp_anamorphic.Text == "None")
\r
830 int height = hb_common_func.cacluateNonAnamorphicHeight(width, text_top.Value, text_bottom.Value, text_left.Value, text_right.Value, selectedTitle);
\r
831 text_height.Text = height.ToString();
\r
836 private void text_height_TextChanged(object sender, EventArgs e)
\r
838 maxHeight = 0; // Reset max height so that it's not using the MaxHeight -Y. Quick hack to allow -Y for preset usage.
\r
841 Boolean parsed = int.TryParse(text_height.Text, out height);
\r
842 if (parsed != false)
\r
844 if ((height % 16) != 0)
\r
845 text_height.BackColor = Color.LightCoral;
\r
847 text_height.BackColor = Color.LightGreen;
\r
850 private void check_customCrop_CheckedChanged(object sender, EventArgs e)
\r
852 text_left.Enabled = true;
\r
853 text_right.Enabled = true;
\r
854 text_top.Enabled = true;
\r
855 text_bottom.Enabled = true;
\r
856 if (selectedTitle != null)
\r
858 text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();
\r
859 text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();
\r
860 text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();
\r
861 text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();
\r
865 text_left.Text = "0";
\r
866 text_right.Text = "0";
\r
867 text_top.Text = "0";
\r
868 text_bottom.Text = "0";
\r
871 private void check_autoCrop_CheckedChanged(object sender, EventArgs e)
\r
873 text_left.Enabled = false;
\r
874 text_right.Enabled = false;
\r
875 text_top.Enabled = false;
\r
876 text_bottom.Enabled = false;
\r
878 private void drp_anamorphic_SelectedIndexChanged(object sender, EventArgs e)
\r
880 if (drp_anamorphic.SelectedIndex == 1)
\r
882 text_height.BackColor = Color.LightGray;
\r
883 text_width.BackColor = Color.LightGray;
\r
884 text_height.Text = "";
\r
885 text_width.Text = "";
\r
886 text_height.Enabled = false;
\r
887 text_width.Enabled = false;
\r
890 if (drp_anamorphic.SelectedIndex == 2)
\r
892 text_height.Text = "";
\r
893 text_height.Enabled = false;
\r
894 text_height.BackColor = Color.LightGray;
\r
896 text_width.Enabled = true;
\r
897 text_width.BackColor = Color.White;
\r
900 if (drp_anamorphic.SelectedIndex == 0)
\r
902 text_height.BackColor = Color.White;
\r
903 text_width.BackColor = Color.White;
\r
904 text_height.Enabled = true;
\r
905 text_width.Enabled = true;
\r
908 private void slider_deblock_Scroll(object sender, EventArgs e)
\r
910 if (slider_deblock.Value == 4)
\r
911 lbl_deblockVal.Text = "Off";
\r
913 lbl_deblockVal.Text = slider_deblock.Value.ToString();
\r
917 private void drp_track2Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
919 if (drp_track2Audio.SelectedItem.Equals("None"))
\r
921 drp_audbit_2.Enabled = false;
\r
922 drp_audenc_2.Enabled = false;
\r
923 drp_audsr_2.Enabled = false;
\r
924 drp_audmix_2.Enabled = false;
\r
925 trackBar2.Enabled = false;
\r
926 drp_audbit_2.Text = "";
\r
927 drp_audenc_2.Text = "";
\r
928 drp_audsr_2.Text = "";
\r
929 drp_audmix_2.Text = "Automatic";
\r
930 trackBar2.Value = 0;
\r
932 // Disable the 3rd Track.
\r
933 drp_track3Audio.Enabled = false;
\r
934 drp_track3Audio.Text = "None";
\r
935 drp_audbit_3.Text = "";
\r
936 drp_audenc_3.Text = "";
\r
937 drp_audsr_3.Text = "";
\r
938 drp_audmix_3.Text = "Automatic";
\r
939 trackBar3.Value = 0;
\r
943 drp_audbit_2.Enabled = true;
\r
944 drp_audenc_2.Enabled = true;
\r
945 drp_audsr_2.Enabled = true;
\r
946 drp_audmix_2.Enabled = true;
\r
947 trackBar2.Enabled = true;
\r
948 drp_audbit_2.Text = "160";
\r
949 drp_audenc_2.Text = "AAC";
\r
950 drp_audsr_2.Text = "Auto";
\r
951 drp_audmix_2.Text = "Automatic";
\r
953 // Enable the 3rd Track.
\r
954 drp_track3Audio.Enabled = true;
\r
955 drp_audbit_3.Text = "";
\r
956 drp_audenc_3.Text = "";
\r
957 drp_audsr_3.Text = "";
\r
958 drp_audmix_3.Text = "Automatic";
\r
961 private void drp_track3Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
963 if (drp_track3Audio.SelectedItem.Equals("None"))
\r
965 drp_audbit_3.Enabled = false;
\r
966 drp_audenc_3.Enabled = false;
\r
967 drp_audsr_3.Enabled = false;
\r
968 drp_audmix_3.Enabled = false;
\r
969 trackBar3.Enabled = false;
\r
970 drp_audbit_3.Text = "";
\r
971 drp_audenc_3.Text = "";
\r
972 drp_audsr_3.Text = "";
\r
973 drp_audmix_3.Text = "Automatic";
\r
974 trackBar3.Value = 0;
\r
976 // Disable the 4th Track.
\r
977 drp_track4Audio.Enabled = false;
\r
978 drp_track4Audio.Text = "None";
\r
979 drp_audbit_4.Text = "";
\r
980 drp_audenc_4.Text = "";
\r
981 drp_audsr_4.Text = "";
\r
982 drp_audmix_4.Text = "Automatic";
\r
987 drp_audbit_3.Enabled = true;
\r
988 drp_audenc_3.Enabled = true;
\r
989 drp_audsr_3.Enabled = true;
\r
990 drp_audmix_3.Enabled = true;
\r
991 trackBar3.Enabled = true;
\r
992 drp_audbit_3.Text = "160";
\r
993 drp_audenc_3.Text = "AAC";
\r
994 drp_audsr_3.Text = "Auto";
\r
995 drp_audmix_3.Text = "Automatic";
\r
997 // Enable the 4th Track.
\r
998 drp_track4Audio.Enabled = true;
\r
999 drp_audbit_4.Text = "";
\r
1000 drp_audenc_4.Text = "";
\r
1001 drp_audsr_4.Text = "";
\r
1002 drp_audmix_4.Text = "Automatic";
\r
1006 private void drp_track4Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
1008 if (drp_track4Audio.SelectedItem.Equals("None"))
\r
1010 drp_audbit_4.Enabled = false;
\r
1011 drp_audenc_4.Enabled = false;
\r
1012 drp_audsr_4.Enabled = false;
\r
1013 drp_audmix_4.Enabled = false;
\r
1014 trackBar4.Enabled = false;
\r
1015 drp_audbit_4.Text = "";
\r
1016 drp_audenc_4.Text = "";
\r
1017 drp_audsr_4.Text = "";
\r
1018 drp_audmix_4.Text = "Automatic";
\r
1019 trackBar4.Value = 0;
\r
1023 drp_audbit_4.Enabled = true;
\r
1024 drp_audenc_4.Enabled = true;
\r
1025 drp_audsr_4.Enabled = true;
\r
1026 drp_audmix_4.Enabled = true;
\r
1027 trackBar4.Enabled = true;
\r
1028 drp_audbit_4.Text = "160";
\r
1029 drp_audenc_4.Text = "AAC";
\r
1030 drp_audsr_4.Text = "Auto";
\r
1031 drp_audmix_4.Text = "Automatic";
\r
1035 private void drp_audmix_1_SelectedIndexChanged(object sender, EventArgs e)
\r
1037 if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))
\r
1038 setBitrateSelections384(drp_audbit_1);
\r
1039 else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete"))
\r
1041 setBitrateSelections160(drp_audbit_1);
\r
1042 drp_audbit_1.Text = "160";
\r
1045 private void drp_audmix_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1047 if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text == "6 Channel Discrete"))
\r
1048 setBitrateSelections384(drp_audbit_2);
\r
1049 else if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text != "6 Channel Discrete"))
\r
1051 setBitrateSelections160(drp_audbit_2);
\r
1052 drp_audbit_2.Text = "160";
\r
1055 private void drp_audmix_3_SelectedIndexChanged(object sender, EventArgs e)
\r
1057 if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text == "6 Channel Discrete"))
\r
1058 setBitrateSelections384(drp_audbit_3);
\r
1059 else if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text != "6 Channel Discrete"))
\r
1061 setBitrateSelections160(drp_audbit_3);
\r
1062 drp_audbit_3.Text = "160";
\r
1065 private void drp_audmix_4_SelectedIndexChanged(object sender, EventArgs e)
\r
1067 if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text == "6 Channel Discrete"))
\r
1068 setBitrateSelections384(drp_audbit_4);
\r
1069 else if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text != "6 Channel Discrete"))
\r
1071 setBitrateSelections160(drp_audbit_4);
\r
1072 drp_audbit_4.Text = "160";
\r
1076 private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)
\r
1078 if (drp_audenc_1.Text == "AC3")
\r
1080 drp_audmix_1.Enabled = false;
\r
1081 drp_audbit_1.Enabled = false;
\r
1082 drp_audsr_1.Enabled = false;
\r
1086 drp_audmix_1.Enabled = true;
\r
1087 drp_audbit_1.Enabled = true;
\r
1088 drp_audsr_1.Enabled = true;
\r
1090 drp_audmix_1.Text = "Automatic";
\r
1091 drp_audbit_1.Text = "160";
\r
1092 drp_audsr_1.Text = "Auto";
\r
1096 if (drp_audenc_1.Text == "AAC")
\r
1098 drp_audmix_1.Items.Clear();
\r
1099 drp_audmix_1.Items.Add("Mono");
\r
1100 drp_audmix_1.Items.Add("Stereo");
\r
1101 drp_audmix_1.Items.Add("Dolby Surround");
\r
1102 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1103 drp_audmix_1.Items.Add("6 Channel Discrete");
\r
1105 setBitrateSelections160(drp_audbit_1);
\r
1109 drp_audmix_1.Items.Clear();
\r
1110 drp_audmix_1.Items.Add("Stereo");
\r
1111 drp_audmix_1.Items.Add("Dolby Surround");
\r
1112 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1114 setBitrateSelections320(drp_audbit_1);
\r
1117 private void drp_audenc_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1119 if (drp_audenc_2.Text == "AC3")
\r
1121 drp_audmix_2.Enabled = false;
\r
1122 drp_audbit_2.Enabled = false;
\r
1123 drp_audsr_2.Enabled = false;
\r
1125 drp_audmix_2.Text = "Automatic";
\r
1126 drp_audbit_2.Text = "160";
\r
1127 drp_audsr_2.Text = "Auto";
\r
1131 // Just make sure not to re-enable the following boxes if the track2 is none
\r
1132 if (drp_track2Audio.Text != "None")
\r
1134 drp_audmix_2.Enabled = true;
\r
1135 drp_audbit_2.Enabled = true;
\r
1136 drp_audsr_2.Enabled = true;
\r
1138 drp_audmix_2.Text = "Automatic";
\r
1139 drp_audbit_2.Text = "160";
\r
1140 drp_audsr_2.Text = "Auto";
\r
1144 if (drp_audenc_2.Text == "AAC")
\r
1146 drp_audmix_2.Items.Clear();
\r
1147 drp_audmix_2.Items.Add("Mono");
\r
1148 drp_audmix_2.Items.Add("Stereo");
\r
1149 drp_audmix_2.Items.Add("Dolby Surround");
\r
1150 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1151 drp_audmix_2.Items.Add("6 Channel Discrete");
\r
1153 setBitrateSelections160(drp_audbit_2);
\r
1157 drp_audmix_2.Items.Clear();
\r
1158 drp_audmix_2.Items.Add("Stereo");
\r
1159 drp_audmix_2.Items.Add("Dolby Surround");
\r
1160 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1162 setBitrateSelections320(drp_audbit_2);
\r
1165 private void drp_audenc_3_SelectedIndexChanged(object sender, EventArgs e)
\r
1167 if (drp_audenc_3.Text == "AC3")
\r
1169 drp_audmix_3.Enabled = false;
\r
1170 drp_audbit_3.Enabled = false;
\r
1171 drp_audsr_3.Enabled = false;
\r
1173 drp_audmix_3.Text = "Automatic";
\r
1174 drp_audbit_3.Text = "160";
\r
1175 drp_audsr_3.Text = "Auto";
\r
1179 // Just make sure not to re-enable the following boxes if the track above is none
\r
1180 if (drp_track2Audio.Text != "None")
\r
1182 drp_audmix_3.Enabled = true;
\r
1183 drp_audbit_3.Enabled = true;
\r
1184 drp_audsr_3.Enabled = true;
\r
1186 drp_audmix_3.Text = "Automatic";
\r
1187 drp_audbit_3.Text = "160";
\r
1188 drp_audsr_3.Text = "Auto";
\r
1193 if (drp_audenc_3.Text == "AAC")
\r
1195 drp_audmix_3.Items.Clear();
\r
1196 drp_audmix_3.Items.Add("Mono");
\r
1197 drp_audmix_3.Items.Add("Stereo");
\r
1198 drp_audmix_3.Items.Add("Dolby Surround");
\r
1199 drp_audmix_3.Items.Add("Dolby Pro Logic II");
\r
1200 drp_audmix_3.Items.Add("6 Channel Discrete");
\r
1202 setBitrateSelections160(drp_audbit_3);
\r
1206 drp_audmix_3.Items.Clear();
\r
1207 drp_audmix_3.Items.Add("Stereo");
\r
1208 drp_audmix_3.Items.Add("Dolby Surround");
\r
1209 drp_audmix_3.Items.Add("Dolby Pro Logic II");
\r
1211 setBitrateSelections320(drp_audbit_3);
\r
1214 private void drp_audenc_4_SelectedIndexChanged(object sender, EventArgs e)
\r
1216 if (drp_audenc_4.Text == "AC3")
\r
1218 drp_audmix_4.Enabled = false;
\r
1219 drp_audbit_4.Enabled = false;
\r
1220 drp_audsr_4.Enabled = false;
\r
1222 drp_audmix_4.Text = "Automatic";
\r
1223 drp_audbit_4.Text = "160";
\r
1224 drp_audsr_4.Text = "Auto";
\r
1228 // Just make sure not to re-enable the following boxes if the track above is none
\r
1229 if (drp_track2Audio.Text != "None")
\r
1231 drp_audmix_4.Enabled = true;
\r
1232 drp_audbit_4.Enabled = true;
\r
1233 drp_audsr_4.Enabled = true;
\r
1235 drp_audmix_4.Text = "Automatic";
\r
1236 drp_audbit_4.Text = "160";
\r
1237 drp_audsr_4.Text = "Auto";
\r
1242 if (drp_audenc_4.Text == "AAC")
\r
1244 drp_audmix_4.Items.Clear();
\r
1245 drp_audmix_4.Items.Add("Mono");
\r
1246 drp_audmix_4.Items.Add("Stereo");
\r
1247 drp_audmix_4.Items.Add("Dolby Surround");
\r
1248 drp_audmix_4.Items.Add("Dolby Pro Logic II");
\r
1249 drp_audmix_4.Items.Add("6 Channel Discrete");
\r
1251 setBitrateSelections160(drp_audbit_4);
\r
1255 drp_audmix_4.Items.Clear();
\r
1256 drp_audmix_4.Items.Add("Stereo");
\r
1257 drp_audmix_4.Items.Add("Dolby Surround");
\r
1258 drp_audmix_4.Items.Add("Dolby Pro Logic II");
\r
1260 setBitrateSelections320(drp_audbit_4);
\r
1264 private void trackBar1_Scroll(object sender, EventArgs e)
\r
1266 double value = trackBar1.Value / 10.0;
\r
1269 lbl_drc1.Text = value.ToString();
\r
1271 private void trackBar2_Scroll(object sender, EventArgs e)
\r
1273 double value = trackBar2.Value / 10.0;
\r
1276 lbl_drc2.Text = value.ToString();
\r
1278 private void trackBar3_Scroll(object sender, EventArgs e)
\r
1280 double value = trackBar3.Value / 10.0;
\r
1283 lbl_drc3.Text = value.ToString();
\r
1285 private void trackBar4_Scroll(object sender, EventArgs e)
\r
1287 double value = trackBar4.Value / 10.0;
\r
1290 lbl_drc4.Text = value.ToString();
\r
1293 private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
1295 if (drp_subtitle.Text.Contains("None"))
\r
1297 check_forced.Enabled = false;
\r
1298 check_forced.Checked = false;
\r
1301 check_forced.Enabled = true;
\r
1304 // Chapter Marker Tab
\r
1305 private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)
\r
1307 if (Check_ChapterMarkers.Checked)
\r
1309 string destination = text_destination.Text;
\r
1310 destination = destination.Replace(".mp4", ".m4v");
\r
1311 text_destination.Text = destination;
\r
1312 data_chpt.Rows.Clear();
\r
1313 data_chpt.Enabled = true;
\r
1314 DataGridView chapterGridView = hb_common_func.chapterNaming(data_chpt, drop_chapterStart.Text, drop_chapterFinish.Text);
\r
1315 if (chapterGridView != null)
\r
1316 data_chpt = chapterGridView;
\r
1320 string destination = text_destination.Text;
\r
1321 destination = destination.Replace(".m4v", ".mp4");
\r
1322 text_destination.Text = destination;
\r
1323 data_chpt.Rows.Clear();
\r
1324 data_chpt.Enabled = false;
\r
1329 private void drop_refFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1331 x264PanelFunctions.on_x264_WidgetChange("ref", this);
\r
1333 private void check_mixedReferences_CheckedChanged(object sender, EventArgs e)
\r
1335 x264PanelFunctions.on_x264_WidgetChange("mixed-refs", this);
\r
1337 private void drop_bFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1339 x264PanelFunctions.on_x264_WidgetChange("bframes", this);
\r
1341 private void drop_directPrediction_SelectedIndexChanged(object sender, EventArgs e)
\r
1343 x264PanelFunctions.on_x264_WidgetChange("direct", this);
\r
1345 private void check_weightedBFrames_CheckedChanged(object sender, EventArgs e)
\r
1347 x264PanelFunctions.on_x264_WidgetChange("weightb", this);
\r
1349 private void check_bFrameDistortion_CheckedChanged(object sender, EventArgs e)
\r
1351 x264PanelFunctions.on_x264_WidgetChange("brdo", this);
\r
1353 private void check_BidirectionalRefinement_CheckedChanged(object sender, EventArgs e)
\r
1355 x264PanelFunctions.on_x264_WidgetChange("bime", this);
\r
1357 private void check_pyrmidalBFrames_CheckedChanged(object sender, EventArgs e)
\r
1359 x264PanelFunctions.on_x264_WidgetChange("b-pyramid", this);
\r
1361 private void drop_MotionEstimationMethod_SelectedIndexChanged(object sender, EventArgs e)
\r
1363 x264PanelFunctions.on_x264_WidgetChange("me", this);
\r
1365 private void drop_MotionEstimationRange_SelectedIndexChanged(object sender, EventArgs e)
\r
1367 x264PanelFunctions.on_x264_WidgetChange("merange", this);
\r
1369 private void drop_subpixelMotionEstimation_SelectedIndexChanged(object sender, EventArgs e)
\r
1371 x264PanelFunctions.on_x264_WidgetChange("subq", this);
\r
1373 private void drop_analysis_SelectedIndexChanged(object sender, EventArgs e)
\r
1375 x264PanelFunctions.on_x264_WidgetChange("analyse", this);
\r
1377 private void check_8x8DCT_CheckedChanged(object sender, EventArgs e)
\r
1379 x264PanelFunctions.on_x264_WidgetChange("8x8dct", this);
\r
1381 private void drop_deblockAlpha_SelectedIndexChanged(object sender, EventArgs e)
\r
1383 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1386 private void drop_deblockBeta_SelectedIndexChanged(object sender, EventArgs e)
\r
1388 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1391 private void drop_trellis_SelectedIndexChanged(object sender, EventArgs e)
\r
1393 x264PanelFunctions.on_x264_WidgetChange("trellis", this);
\r
1395 private void check_noFastPSkip_CheckedChanged(object sender, EventArgs e)
\r
1397 x264PanelFunctions.on_x264_WidgetChange("no-fast-pskip", this);
\r
1399 private void check_noDCTDecimate_CheckedChanged(object sender, EventArgs e)
\r
1401 x264PanelFunctions.on_x264_WidgetChange("no-dct-decimate", this);
\r
1404 private void check_Cabac_CheckedChanged(object sender, EventArgs e)
\r
1407 x264PanelFunctions.on_x264_WidgetChange("cabac", this);
\r
1410 private void rtf_x264Query_TextChanged(object sender, EventArgs e)
\r
1412 if (rtf_x264Query.Text.EndsWith("\n"))
\r
1414 rtf_x264Query.Text = rtf_x264Query.Text.Replace("\n", "");
\r
1415 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1416 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1418 if (rtf_x264Query.Text == string.Empty)
\r
1419 x264PanelFunctions.reset2Defaults(this);
\r
1422 private void btn_reset_Click(object sender, EventArgs e)
\r
1424 rtf_x264Query.Text = "";
\r
1425 x264PanelFunctions.reset2Defaults(this);
\r
1428 // Query Editor Tab
\r
1429 private void btn_generate_Query_Click(object sender, EventArgs e)
\r
1431 rtf_query.Text = queryGen.GenerateTheQuery(this);
\r
1433 private void btn_clear_Click(object sender, EventArgs e)
\r
1435 rtf_query.Clear();
\r
1439 private void btn_addPreset_Click(object sender, EventArgs e)
\r
1441 // Remember each nodes expanded status so we can reload it
\r
1442 List<Boolean> nodeStatus = saveTreeViewState();
\r
1443 nodeStatus.Add(true);
\r
1445 // Now add the new preset
\r
1446 Form preset = new frmAddPreset(this, queryGen.GenerateTheQuery(this), presetHandler);
\r
1447 preset.ShowDialog();
\r
1449 // Now reload the TreeView states
\r
1450 loadTreeViewStates(nodeStatus);
\r
1452 private void btn_removePreset_Click(object sender, EventArgs e)
\r
1454 DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1455 if (result == DialogResult.Yes)
\r
1457 if (treeView_presets.SelectedNode != null)
\r
1458 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
1460 // Remember each nodes expanded status so we can reload it
\r
1461 List<Boolean> nodeStatus = saveTreeViewState();
\r
1463 // Now reload the preset panel
\r
1464 loadPresetPanel();
\r
1466 // Now reload the TreeView states
\r
1467 loadTreeViewStates(nodeStatus);
\r
1469 treeView_presets.Select();
\r
1471 private void btn_setDefault_Click(object sender, EventArgs e)
\r
1473 String query = queryGen.GenerateTheQuery(this);
\r
1474 Properties.Settings.Default.defaultUserSettings = query;
\r
1475 // Save the new default Settings
\r
1476 Properties.Settings.Default.Save();
\r
1477 MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
1479 private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)
\r
1481 // Ok, so, we've selected a preset. Now we want to load it.
\r
1482 string presetName = treeView_presets.SelectedNode.Text;
\r
1483 string query = presetHandler.getCliForPreset(presetName);
\r
1485 if (query != null)
\r
1487 //Ok, Reset all the H264 widgets before changing the preset
\r
1488 x264PanelFunctions.reset2Defaults(this);
\r
1490 // Send the query from the file to the Query Parser class
\r
1491 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(query);
\r
1493 // Now load the preset
\r
1494 presetLoader.presetLoader(this, presetQuery, presetName);
\r
1496 // The x264 widgets will need updated, so do this now:
\r
1497 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1498 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1501 private void treeView_presets_deleteKey(object sender, KeyEventArgs e)
\r
1503 if (e.KeyCode == Keys.Delete)
\r
1505 DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1506 if (result == DialogResult.Yes)
\r
1508 if (treeView_presets.SelectedNode != null)
\r
1509 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
1511 // Remember each nodes expanded status so we can reload it
\r
1512 List<Boolean> nodeStatus = new List<Boolean>();
\r
1513 foreach (TreeNode node in treeView_presets.Nodes)
\r
1514 nodeStatus.Add(node.IsExpanded);
\r
1516 // Now reload the preset panel
\r
1517 loadPresetPanel();
\r
1519 // And finally, re-expand any of the nodes if required
\r
1521 foreach (TreeNode node in treeView_presets.Nodes)
\r
1523 if (nodeStatus[i] == true)
\r
1534 #region Preset Expand / Collaspe
\r
1535 private List<Boolean> saveTreeViewState()
\r
1537 // Remember each nodes expanded status so we can reload it
\r
1538 List<Boolean> nodeStatus = new List<Boolean>();
\r
1539 foreach (TreeNode node in treeView_presets.Nodes)
\r
1541 nodeStatus.Add(node.IsExpanded);
\r
1542 foreach (TreeNode subNode in node.Nodes)
\r
1543 nodeStatus.Add(node.IsExpanded);
\r
1545 return nodeStatus;
\r
1548 private void loadTreeViewStates(List<Boolean> nodeStatus)
\r
1550 // And finally, re-expand any of the nodes if required
\r
1552 foreach (TreeNode node in treeView_presets.Nodes)
\r
1554 if (nodeStatus[i] == true)
\r
1557 foreach (TreeNode subNode in node.Nodes)
\r
1559 if (nodeStatus[i] == true)
\r
1569 private void loadNormalPreset()
\r
1571 treeView_presets.Nodes.Find("Normal", true);
\r
1573 foreach (TreeNode treenode in treeView_presets.Nodes)
\r
1575 foreach (TreeNode node in treenode.Nodes)
\r
1577 if (node.Text.ToString().Equals("Normal"))
\r
1578 treeView_presets.SelectedNode = treeView_presets.Nodes[treenode.Index].Nodes[0];
\r
1583 /// Take in a File destination and change it's file extension to a new Extension
\r
1585 /// <param name="destination"></param>
\r
1586 /// <param name="newExtension"></param>
\r
1587 /// <returns>String of the new file path and extension</returns>
\r
1588 public void setExtension(string newExtension)
\r
1590 text_destination.Text = text_destination.Text.Replace(".mp4", newExtension);
\r
1591 text_destination.Text = text_destination.Text.Replace(".m4v", newExtension);
\r
1592 text_destination.Text = text_destination.Text.Replace(".mkv", newExtension);
\r
1593 text_destination.Text = text_destination.Text.Replace(".avi", newExtension);
\r
1594 text_destination.Text = text_destination.Text.Replace(".ogm", newExtension);
\r
1598 #region Drive Detection
\r
1599 // Source Button Drive Detection
\r
1600 private delegate void ProgressUpdateHandler();
\r
1601 private void getDriveInfoThread()
\r
1605 if (this.InvokeRequired)
\r
1607 this.BeginInvoke(new ProgressUpdateHandler(getDriveInfoThread));
\r
1611 Boolean foundDrive = false;
\r
1612 DriveInfo[] theCollectionOfDrives = DriveInfo.GetDrives();
\r
1613 foreach (DriveInfo curDrive in theCollectionOfDrives)
\r
1615 if (curDrive.DriveType == DriveType.CDRom)
\r
1617 if (curDrive.IsReady)
\r
1619 if (File.Exists(curDrive.RootDirectory.ToString() + "VIDEO_TS\\VIDEO_TS.IFO"))
\r
1620 mnu_dvd_drive.Text = curDrive.RootDirectory.ToString() + "VIDEO_TS (" + curDrive.VolumeLabel + ")";
\r
1622 mnu_dvd_drive.Text = "[No DVD Drive Ready]";
\r
1624 foundDrive = true;
\r
1630 if (foundDrive == false)
\r
1631 mnu_dvd_drive.Text = "[No DVD Drive Ready]";
\r
1635 mnu_dvd_drive.Text = "[No DVD Drive Ready / Found]";
\r
1640 #region Audio Panel Stuff
\r
1641 public void setAudioByContainer(String path)
\r
1643 string oldval = "";
\r
1645 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
1647 oldval = drp_audenc_1.Text;
\r
1648 drp_audenc_1.Items.Clear();
\r
1649 drp_audenc_1.Items.Add("AAC");
\r
1650 drp_audenc_1.Items.Add("AC3");
\r
1651 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1652 drp_audenc_1.SelectedIndex = 0;
\r
1654 oldval = drp_audenc_2.Text;
\r
1655 drp_audenc_2.Items.Clear();
\r
1656 drp_audenc_2.Items.Add("AAC");
\r
1657 drp_audenc_2.Items.Add("AC3");
\r
1658 if (drp_audenc_2.Enabled)
\r
1660 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1661 drp_audenc_2.SelectedIndex = 0;
\r
1664 oldval = drp_audenc_3.Text;
\r
1665 drp_audenc_3.Items.Clear();
\r
1666 drp_audenc_3.Items.Add("AAC");
\r
1667 drp_audenc_3.Items.Add("AC3");
\r
1668 if (drp_audenc_3.Enabled)
\r
1670 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1671 drp_audenc_3.SelectedIndex = 0;
\r
1674 oldval = drp_audenc_4.Text;
\r
1675 drp_audenc_4.Items.Clear();
\r
1676 drp_audenc_4.Items.Add("AAC");
\r
1677 drp_audenc_4.Items.Add("AC3");
\r
1678 if (drp_audenc_4.Enabled)
\r
1680 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1681 drp_audenc_4.SelectedIndex = 0;
\r
1684 else if (path.EndsWith(".avi"))
\r
1686 oldval = drp_audenc_1.Text;
\r
1687 drp_audenc_1.Items.Clear();
\r
1688 drp_audenc_1.Items.Add("MP3");
\r
1689 drp_audenc_1.Items.Add("AC3");
\r
1690 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1691 drp_audenc_1.SelectedIndex = 0;
\r
1693 oldval = drp_audenc_2.Text;
\r
1694 drp_audenc_2.Items.Clear();
\r
1695 drp_audenc_2.Items.Add("MP3");
\r
1696 drp_audenc_2.Items.Add("AC3");
\r
1697 if (drp_audenc_2.Enabled)
\r
1699 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1700 drp_audenc_2.SelectedIndex = 0;
\r
1704 oldval = drp_audenc_3.Text;
\r
1705 drp_audenc_3.Items.Clear();
\r
1706 drp_audenc_3.Items.Add("MP3");
\r
1707 drp_audenc_3.Items.Add("AC3");
\r
1708 if (drp_audenc_3.Enabled)
\r
1710 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1711 drp_audenc_3.SelectedIndex = 0;
\r
1714 oldval = drp_audenc_4.Text;
\r
1715 drp_audenc_4.Items.Clear();
\r
1716 drp_audenc_4.Items.Add("MP3");
\r
1717 drp_audenc_4.Items.Add("AC3");
\r
1718 if (drp_audenc_4.Enabled)
\r
1720 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1721 drp_audenc_4.SelectedIndex = 0;
\r
1724 else if (path.EndsWith(".ogm"))
\r
1726 drp_audenc_1.Items.Clear();
\r
1727 drp_audenc_1.Items.Add("Vorbis");
\r
1728 drp_audenc_1.SelectedIndex = 0;
\r
1730 drp_audenc_2.Items.Clear();
\r
1731 drp_audenc_2.Items.Add("Vorbis");
\r
1732 if (drp_audenc_2.Enabled)
\r
1733 drp_audenc_2.SelectedIndex = 0;
\r
1735 drp_audenc_3.Items.Clear();
\r
1736 drp_audenc_3.Items.Add("Vorbis");
\r
1737 if (drp_audenc_3.Enabled)
\r
1738 drp_audenc_3.SelectedIndex = 0;
\r
1740 drp_audenc_4.Items.Clear();
\r
1741 drp_audenc_4.Items.Add("Vorbis");
\r
1742 if (drp_audenc_4.Enabled)
\r
1743 drp_audenc_4.SelectedIndex = 0;
\r
1745 else if (path.EndsWith(".mkv"))
\r
1747 drp_audenc_1.Items.Clear();
\r
1748 drp_audenc_1.Items.Add("AAC");
\r
1749 drp_audenc_1.Items.Add("MP3");
\r
1750 drp_audenc_1.Items.Add("AC3");
\r
1751 drp_audenc_1.Items.Add("Vorbis");
\r
1752 if (drp_audenc_1.Text == string.Empty)
\r
1753 drp_audenc_1.SelectedIndex = 0;
\r
1756 drp_audenc_2.Items.Clear();
\r
1757 drp_audenc_2.Items.Add("AAC");
\r
1758 drp_audenc_2.Items.Add("MP3");
\r
1759 drp_audenc_2.Items.Add("AC3");
\r
1760 drp_audenc_2.Items.Add("Vorbis");
\r
1761 if (drp_audenc_2.Enabled)
\r
1763 if (drp_audenc_2.Text == string.Empty)
\r
1764 drp_audenc_2.SelectedIndex = 0;
\r
1767 drp_audenc_3.Items.Clear();
\r
1768 drp_audenc_3.Items.Add("AAC");
\r
1769 drp_audenc_3.Items.Add("MP3");
\r
1770 drp_audenc_3.Items.Add("AC3");
\r
1771 drp_audenc_3.Items.Add("Vorbis");
\r
1772 if (drp_audenc_3.Enabled)
\r
1774 if (drp_audenc_3.Text == string.Empty)
\r
1775 drp_audenc_3.SelectedIndex = 0;
\r
1778 drp_audenc_4.Items.Clear();
\r
1779 drp_audenc_4.Items.Add("AAC");
\r
1780 drp_audenc_4.Items.Add("MP3");
\r
1781 drp_audenc_4.Items.Add("AC3");
\r
1782 drp_audenc_4.Items.Add("Vorbis");
\r
1783 if (drp_audenc_4.Enabled)
\r
1785 if (drp_audenc_4.Text == string.Empty)
\r
1786 drp_audenc_4.SelectedIndex = 0;
\r
1790 public void setVideoByContainer(String path)
\r
1792 string oldval = "";
\r
1794 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
1796 oldval = drp_videoEncoder.Text;
\r
1797 drp_videoEncoder.Items.Clear();
\r
1798 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1799 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1800 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1801 if (oldval == "VP3 (Theora)")
\r
1802 drp_videoEncoder.SelectedIndex = 2;
\r
1804 drp_videoEncoder.Text = oldval;
\r
1807 else if (path.EndsWith(".avi"))
\r
1809 oldval = drp_videoEncoder.Text;
\r
1810 drp_videoEncoder.Items.Clear();
\r
1811 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1812 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1813 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1814 if (oldval == "VP3 (Theora)")
\r
1815 drp_videoEncoder.SelectedIndex = 2;
\r
1817 drp_videoEncoder.Text = oldval;
\r
1819 else if (path.EndsWith(".ogm"))
\r
1821 oldval = drp_videoEncoder.Text;
\r
1822 drp_videoEncoder.Items.Clear();
\r
1823 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1824 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1825 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1826 if (oldval == "H.264 (x264)")
\r
1827 drp_videoEncoder.SelectedIndex = 2;
\r
1829 drp_videoEncoder.Text = oldval;
\r
1831 else if (path.EndsWith(".mkv"))
\r
1833 oldval = drp_videoEncoder.Text;
\r
1834 drp_videoEncoder.Items.Clear();
\r
1835 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1836 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1837 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1838 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1839 drp_videoEncoder.Text = oldval;
\r
1842 public void setBitrateSelections384(ComboBox dropDown)
\r
1844 dropDown.Items.Clear();
\r
1845 dropDown.Items.Add("32");
\r
1846 dropDown.Items.Add("40");
\r
1847 dropDown.Items.Add("48");
\r
1848 dropDown.Items.Add("56");
\r
1849 dropDown.Items.Add("64");
\r
1850 dropDown.Items.Add("80");
\r
1851 dropDown.Items.Add("86");
\r
1852 dropDown.Items.Add("112");
\r
1853 dropDown.Items.Add("128");
\r
1854 dropDown.Items.Add("160");
\r
1855 dropDown.Items.Add("192");
\r
1856 dropDown.Items.Add("224");
\r
1857 dropDown.Items.Add("256");
\r
1858 dropDown.Items.Add("320");
\r
1859 dropDown.Items.Add("384");
\r
1861 public void setBitrateSelections320(ComboBox dropDown)
\r
1863 dropDown.Items.Clear();
\r
1864 dropDown.Items.Add("32");
\r
1865 dropDown.Items.Add("40");
\r
1866 dropDown.Items.Add("48");
\r
1867 dropDown.Items.Add("56");
\r
1868 dropDown.Items.Add("64");
\r
1869 dropDown.Items.Add("80");
\r
1870 dropDown.Items.Add("86");
\r
1871 dropDown.Items.Add("112");
\r
1872 dropDown.Items.Add("128");
\r
1873 dropDown.Items.Add("160");
\r
1874 dropDown.Items.Add("192");
\r
1875 dropDown.Items.Add("224");
\r
1876 dropDown.Items.Add("256");
\r
1877 dropDown.Items.Add("320");
\r
1879 public void setBitrateSelections160(ComboBox dropDown)
\r
1881 dropDown.Items.Clear();
\r
1882 dropDown.Items.Add("32");
\r
1883 dropDown.Items.Add("40");
\r
1884 dropDown.Items.Add("48");
\r
1885 dropDown.Items.Add("56");
\r
1886 dropDown.Items.Add("64");
\r
1887 dropDown.Items.Add("80");
\r
1888 dropDown.Items.Add("86");
\r
1889 dropDown.Items.Add("112");
\r
1890 dropDown.Items.Add("128");
\r
1891 dropDown.Items.Add("160");
\r
1898 private delegate void UpdateUIHandler();
\r
1900 // Encoding Functions
\r
1901 private void procMonitor(object state)
\r
1903 // Make sure we are not already encoding and if we are then display an error.
\r
1904 if (hbProc != null)
\r
1905 hbProc.CloseMainWindow();
\r
1908 hbProc = cliObj.runCli(this, (string)state);
\r
1909 hbProc.WaitForExit();
\r
1910 setEncodeLabelFinished();
\r
1913 // If the window is minimized, display the notification in a popup.
\r
1914 if (FormWindowState.Minimized == this.WindowState)
\r
1916 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
1917 notifyIcon.ShowBalloonTip(500);
\r
1920 // After the encode is done, we may want to shutdown, suspend etc.
\r
1921 cliObj.addCLIQueryToLog((string)state);
\r
1922 cliObj.copyLog((string)state); // Make a copy of the log in the users desired location if necessary
\r
1923 cliObj.afterEncodeAction();
\r
1926 private void setEncodeLabelFinished()
\r
1928 if (this.InvokeRequired)
\r
1930 this.BeginInvoke(new UpdateUIHandler(setEncodeLabelFinished));
\r
1933 lbl_encode.Text = "Encoding Finished";
\r
1934 btn_start.Text = "Start";
\r
1935 btn_start.ToolTipText = "Start the encoding process";
\r
1936 btn_start.Image = Properties.Resources.Play;
\r
1941 #region Public Methods
\r
1944 /// Is the mainWindow currently monitoring an encoding session
\r
1946 /// <returns>boolean</returns>
\r
1947 public Boolean isEncoding()
\r
1949 if (hbProc == null)
\r
1956 /// Action can be "encode" or "scan"
\r
1957 /// Set the last action varible in the main window.
\r
1958 /// This is used to control which log file is displayed when the Activity window is displayed.
\r
1960 /// <param name="last">String</param>
\r
1961 public void setLastAction(string last)
\r
1963 this.lastAction = last;
\r
1967 /// DVD parseing. Pass in a parsed DVD.
\r
1969 /// <param name="dvd"></param>
\r
1970 public void setStreamReader(Parsing.DVD dvd)
\r
1972 this.thisDVD = dvd;
\r
1976 /// Reload the preset panel display
\r
1978 public void loadPresetPanel()
\r
1980 presetHandler.loadPresetData();
\r
1982 treeView_presets.Nodes.Clear();
\r
1984 List<Presets.Preset> presetNameList = new List<Presets.Preset>();
\r
1985 List<string> presetNames = new List<string>();
\r
1986 TreeNode preset_treeview = new TreeNode();
\r
1988 TreeNode rootNode = new TreeNode();
\r
1989 TreeNode rootNodeTwo = new TreeNode();
\r
1990 TreeNode childNode = new TreeNode();
\r
1991 int workingLevel = 0;
\r
1992 string previousCategory = String.Empty;
\r
1993 string currentCategory = String.Empty;
\r
1995 presetNameList = presetHandler.getBuildInPresets();
\r
1996 if (presetNameList.Count != 0)
\r
1998 foreach (Presets.Preset preset in presetNameList)
\r
2000 // Handle Root Nodes
\r
2002 // First Case - No presets have been read yet so setup the root category
\r
2003 if (preset.Level == 1 && currentCategory == String.Empty)
\r
2005 rootNode = new TreeNode(preset.Category);
\r
2006 workingLevel = preset.Level;
\r
2007 currentCategory = preset.Category;
\r
2008 previousCategory = preset.Category;
\r
2011 // Second Case - This is the first sub child node.
\r
2012 if (preset.Level == 2 && workingLevel == 1 && currentCategory != preset.Category)
\r
2014 rootNodeTwo = new TreeNode(preset.Category);
\r
2015 workingLevel = preset.Level;
\r
2016 currentCategory = preset.Category;
\r
2017 rootNode.Nodes.Add(rootNodeTwo);
\r
2020 // Third Case - Any presets the sub presets detected in the above if statment.
\r
2021 if (preset.Level == 1 && workingLevel == 2 && previousCategory == preset.Category)
\r
2023 workingLevel = preset.Level;
\r
2024 currentCategory = preset.Category;
\r
2027 // Fourth Case - We've finished this root node and are onto the next root node.
\r
2028 if (preset.Level == 1 && workingLevel == 1 && previousCategory != preset.Category)
\r
2030 treeView_presets.Nodes.Add(rootNode); // Add the finished node
\r
2032 rootNode = new TreeNode(preset.Category);
\r
2033 workingLevel = preset.Level;
\r
2034 currentCategory = preset.Category;
\r
2035 previousCategory = preset.Category;
\r
2038 // Handle Child Nodes
\r
2039 // Add First level child nodes to the current root node
\r
2040 if (preset.Level == 1 && workingLevel == 1 && currentCategory == preset.Category)
\r
2042 childNode = new TreeNode(preset.Name);
\r
2043 rootNode.Nodes.Add(childNode);
\r
2046 // Add Second level child nodes to the current sub root node
\r
2047 if (preset.Level == 2 && workingLevel == 2 && currentCategory == preset.Category)
\r
2049 childNode = new TreeNode(preset.Name);
\r
2050 rootNodeTwo.Nodes.Add(childNode);
\r
2054 // Add the final root node which does not get added above.
\r
2055 treeView_presets.Nodes.Add(rootNode);
\r
2060 presetNames = presetHandler.getUserPresetNames();
\r
2061 foreach (string preset in presetNames)
\r
2063 preset_treeview = new TreeNode(preset);
\r
2064 preset_treeview.ForeColor = Color.Black;
\r
2066 // Now Fill Out List View with Items
\r
2067 treeView_presets.Nodes.Add(preset_treeview);
\r
2073 #region Taskbar Tray Icon
\r
2074 private void frmMain_Resize(object sender, EventArgs e)
\r
2076 if (FormWindowState.Minimized == this.WindowState)
\r
2078 notifyIcon.Visible = true;
\r
2079 if (lbl_encode.Text != "")
\r
2080 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
2082 notifyIcon.BalloonTipText = "Not Encoding";
\r
2083 notifyIcon.ShowBalloonTip(500);
\r
2086 else if (FormWindowState.Normal == this.WindowState)
\r
2087 notifyIcon.Visible = false;
\r
2089 private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
\r
2091 this.Visible = true;
\r
2093 this.WindowState = FormWindowState.Normal;
\r
2094 notifyIcon.Visible = false;
\r
2096 private void btn_minimize_Click(object sender, EventArgs e)
\r
2098 this.WindowState = FormWindowState.Minimized;
\r
2100 private void btn_restore_Click(object sender, EventArgs e)
\r
2102 this.Visible = true;
\r
2104 this.WindowState = FormWindowState.Normal;
\r
2105 notifyIcon.Visible = false;
\r
2109 // This is the END of the road ------------------------------------------------------------------------------
\r