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 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".mp4");
\r
717 else if (drop_format.SelectedIndex == 1)
\r
718 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".m4v");
\r
719 else if (drop_format.SelectedIndex == 2)
\r
720 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".mkv");
\r
721 else if (drop_format.SelectedIndex == 3)
\r
722 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".avi");
\r
723 else if (drop_format.SelectedIndex == 4)
\r
724 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".ogm");
\r
728 private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)
\r
730 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))
\r
732 check_largeFile.Enabled = true;
\r
733 check_optimiseMP4.Enabled = true;
\r
734 check_iPodAtom.Enabled = true;
\r
738 check_largeFile.Enabled = false;
\r
739 check_optimiseMP4.Enabled = false;
\r
740 check_iPodAtom.Enabled = false;
\r
741 check_largeFile.Checked = false;
\r
742 check_optimiseMP4.Checked = false;
\r
743 check_iPodAtom.Checked = false;
\r
747 //Turn off some options which are H.264 only when the user selects a non h.264 encoder
\r
748 if (drp_videoEncoder.Text.Contains("H.264"))
\r
750 if (check_2PassEncode.CheckState == CheckState.Checked)
\r
751 check_turbo.Enabled = true;
\r
753 h264Tab.Enabled = true;
\r
754 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))
\r
755 check_iPodAtom.Enabled = true;
\r
757 check_iPodAtom.Enabled = false;
\r
758 if (!drp_anamorphic.Items.Contains("Loose"))
\r
759 drp_anamorphic.Items.Add("Loose");
\r
763 check_turbo.CheckState = CheckState.Unchecked;
\r
764 check_turbo.Enabled = false;
\r
765 h264Tab.Enabled = false;
\r
766 rtf_x264Query.Text = "";
\r
767 check_iPodAtom.Enabled = false;
\r
768 check_iPodAtom.Checked = false;
\r
769 if (drp_anamorphic.Items.Count == 3)
\r
770 drp_anamorphic.Items.RemoveAt(2);
\r
774 private void text_bitrate_TextChanged(object sender, EventArgs e)
\r
776 text_filesize.Text = "";
\r
777 slider_videoQuality.Value = 0;
\r
778 SliderValue.Text = "0%";
\r
779 check_2PassEncode.Enabled = true;
\r
781 private void text_filesize_TextChanged(object sender, EventArgs e)
\r
783 text_bitrate.Text = "";
\r
784 slider_videoQuality.Value = 0;
\r
785 SliderValue.Text = "0%";
\r
786 check_2PassEncode.Enabled = true;
\r
788 private void slider_videoQuality_Scroll(object sender, EventArgs e)
\r
790 SliderValue.Text = slider_videoQuality.Value.ToString() + "%";
\r
791 text_bitrate.Text = "";
\r
792 text_filesize.Text = "";
\r
793 check_2PassEncode.Enabled = false;
\r
794 check_2PassEncode.CheckState = CheckState.Unchecked;
\r
796 private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)
\r
798 if (check_2PassEncode.CheckState.ToString() == "Checked")
\r
800 if (drp_videoEncoder.Text.Contains("H.264"))
\r
801 check_turbo.Enabled = true;
\r
805 check_turbo.Enabled = false;
\r
806 check_turbo.CheckState = CheckState.Unchecked;
\r
811 private void text_width_TextChanged(object sender, EventArgs e)
\r
813 maxWidth = 0; // Reset max width so that it's not using the MaxWidth -X. Quick hack to allow -X for preset usage.
\r
816 Boolean parsed = int.TryParse(text_width.Text, out width);
\r
817 if (parsed != false)
\r
819 if ((width % 16) != 0)
\r
820 text_width.BackColor = Color.LightCoral;
\r
822 text_width.BackColor = Color.LightGreen;
\r
825 if (lbl_Aspect.Text != "Select a Title" && maxWidth != 0 && maxHeight != 0)
\r
827 if (drp_anamorphic.Text == "None")
\r
829 int height = hb_common_func.cacluateNonAnamorphicHeight(width, text_top.Value, text_bottom.Value, text_left.Value, text_right.Value, selectedTitle);
\r
830 text_height.Text = height.ToString();
\r
835 private void text_height_TextChanged(object sender, EventArgs e)
\r
837 maxHeight = 0; // Reset max height so that it's not using the MaxHeight -Y. Quick hack to allow -Y for preset usage.
\r
840 Boolean parsed = int.TryParse(text_height.Text, out height);
\r
841 if (parsed != false)
\r
843 if ((height % 16) != 0)
\r
844 text_height.BackColor = Color.LightCoral;
\r
846 text_height.BackColor = Color.LightGreen;
\r
849 private void check_customCrop_CheckedChanged(object sender, EventArgs e)
\r
851 text_left.Enabled = true;
\r
852 text_right.Enabled = true;
\r
853 text_top.Enabled = true;
\r
854 text_bottom.Enabled = true;
\r
855 if (selectedTitle != null)
\r
857 text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();
\r
858 text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();
\r
859 text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();
\r
860 text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();
\r
864 text_left.Text = "0";
\r
865 text_right.Text = "0";
\r
866 text_top.Text = "0";
\r
867 text_bottom.Text = "0";
\r
870 private void check_autoCrop_CheckedChanged(object sender, EventArgs e)
\r
872 text_left.Enabled = false;
\r
873 text_right.Enabled = false;
\r
874 text_top.Enabled = false;
\r
875 text_bottom.Enabled = false;
\r
877 private void drp_anamorphic_SelectedIndexChanged(object sender, EventArgs e)
\r
879 if (drp_anamorphic.SelectedIndex == 1)
\r
881 text_height.BackColor = Color.LightGray;
\r
882 text_width.BackColor = Color.LightGray;
\r
883 text_height.Text = "";
\r
884 text_width.Text = "";
\r
885 text_height.Enabled = false;
\r
886 text_width.Enabled = false;
\r
889 if (drp_anamorphic.SelectedIndex == 2)
\r
891 text_height.Text = "";
\r
892 text_height.Enabled = false;
\r
893 text_height.BackColor = Color.LightGray;
\r
895 text_width.Enabled = true;
\r
896 text_width.BackColor = Color.White;
\r
899 if (drp_anamorphic.SelectedIndex == 0)
\r
901 text_height.BackColor = Color.White;
\r
902 text_width.BackColor = Color.White;
\r
903 text_height.Enabled = true;
\r
904 text_width.Enabled = true;
\r
907 private void slider_deblock_Scroll(object sender, EventArgs e)
\r
909 if (slider_deblock.Value == 4)
\r
910 lbl_deblockVal.Text = "Off";
\r
912 lbl_deblockVal.Text = slider_deblock.Value.ToString();
\r
916 private void drp_track2Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
918 if (drp_track2Audio.SelectedItem.Equals("None"))
\r
920 drp_audbit_2.Enabled = false;
\r
921 drp_audenc_2.Enabled = false;
\r
922 drp_audsr_2.Enabled = false;
\r
923 drp_audmix_2.Enabled = false;
\r
924 trackBar2.Enabled = false;
\r
925 drp_audbit_2.Text = "";
\r
926 drp_audenc_2.Text = "";
\r
927 drp_audsr_2.Text = "";
\r
928 drp_audmix_2.Text = "Automatic";
\r
929 trackBar2.Value = 0;
\r
931 // Disable the 3rd Track.
\r
932 drp_track3Audio.Enabled = false;
\r
933 drp_track3Audio.Text = "None";
\r
934 drp_audbit_3.Text = "";
\r
935 drp_audenc_3.Text = "";
\r
936 drp_audsr_3.Text = "";
\r
937 drp_audmix_3.Text = "Automatic";
\r
938 trackBar3.Value = 0;
\r
942 drp_audbit_2.Enabled = true;
\r
943 drp_audenc_2.Enabled = true;
\r
944 drp_audsr_2.Enabled = true;
\r
945 drp_audmix_2.Enabled = true;
\r
946 trackBar2.Enabled = true;
\r
947 drp_audbit_2.Text = "160";
\r
948 drp_audenc_2.Text = "AAC";
\r
949 drp_audsr_2.Text = "Auto";
\r
950 drp_audmix_2.Text = "Automatic";
\r
952 // Enable the 3rd Track.
\r
953 drp_track3Audio.Enabled = true;
\r
954 drp_audbit_3.Text = "";
\r
955 drp_audenc_3.Text = "";
\r
956 drp_audsr_3.Text = "";
\r
957 drp_audmix_3.Text = "Automatic";
\r
960 private void drp_track3Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
962 if (drp_track3Audio.SelectedItem.Equals("None"))
\r
964 drp_audbit_3.Enabled = false;
\r
965 drp_audenc_3.Enabled = false;
\r
966 drp_audsr_3.Enabled = false;
\r
967 drp_audmix_3.Enabled = false;
\r
968 trackBar3.Enabled = false;
\r
969 drp_audbit_3.Text = "";
\r
970 drp_audenc_3.Text = "";
\r
971 drp_audsr_3.Text = "";
\r
972 drp_audmix_3.Text = "Automatic";
\r
973 trackBar3.Value = 0;
\r
975 // Disable the 4th Track.
\r
976 drp_track4Audio.Enabled = false;
\r
977 drp_track4Audio.Text = "None";
\r
978 drp_audbit_4.Text = "";
\r
979 drp_audenc_4.Text = "";
\r
980 drp_audsr_4.Text = "";
\r
981 drp_audmix_4.Text = "Automatic";
\r
986 drp_audbit_3.Enabled = true;
\r
987 drp_audenc_3.Enabled = true;
\r
988 drp_audsr_3.Enabled = true;
\r
989 drp_audmix_3.Enabled = true;
\r
990 trackBar3.Enabled = true;
\r
991 drp_audbit_3.Text = "160";
\r
992 drp_audenc_3.Text = "AAC";
\r
993 drp_audsr_3.Text = "Auto";
\r
994 drp_audmix_3.Text = "Automatic";
\r
996 // Enable the 4th Track.
\r
997 drp_track4Audio.Enabled = true;
\r
998 drp_audbit_4.Text = "";
\r
999 drp_audenc_4.Text = "";
\r
1000 drp_audsr_4.Text = "";
\r
1001 drp_audmix_4.Text = "Automatic";
\r
1005 private void drp_track4Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
1007 if (drp_track4Audio.SelectedItem.Equals("None"))
\r
1009 drp_audbit_4.Enabled = false;
\r
1010 drp_audenc_4.Enabled = false;
\r
1011 drp_audsr_4.Enabled = false;
\r
1012 drp_audmix_4.Enabled = false;
\r
1013 trackBar4.Enabled = false;
\r
1014 drp_audbit_4.Text = "";
\r
1015 drp_audenc_4.Text = "";
\r
1016 drp_audsr_4.Text = "";
\r
1017 drp_audmix_4.Text = "Automatic";
\r
1018 trackBar4.Value = 0;
\r
1022 drp_audbit_4.Enabled = true;
\r
1023 drp_audenc_4.Enabled = true;
\r
1024 drp_audsr_4.Enabled = true;
\r
1025 drp_audmix_4.Enabled = true;
\r
1026 trackBar4.Enabled = true;
\r
1027 drp_audbit_4.Text = "160";
\r
1028 drp_audenc_4.Text = "AAC";
\r
1029 drp_audsr_4.Text = "Auto";
\r
1030 drp_audmix_4.Text = "Automatic";
\r
1034 private void drp_audmix_1_SelectedIndexChanged(object sender, EventArgs e)
\r
1036 if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))
\r
1037 setBitrateSelections384(drp_audbit_1);
\r
1038 else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete"))
\r
1040 setBitrateSelections160(drp_audbit_1);
\r
1041 drp_audbit_1.Text = "160";
\r
1044 private void drp_audmix_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1046 if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text == "6 Channel Discrete"))
\r
1047 setBitrateSelections384(drp_audbit_2);
\r
1048 else if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text != "6 Channel Discrete"))
\r
1050 setBitrateSelections160(drp_audbit_2);
\r
1051 drp_audbit_2.Text = "160";
\r
1054 private void drp_audmix_3_SelectedIndexChanged(object sender, EventArgs e)
\r
1056 if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text == "6 Channel Discrete"))
\r
1057 setBitrateSelections384(drp_audbit_3);
\r
1058 else if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text != "6 Channel Discrete"))
\r
1060 setBitrateSelections160(drp_audbit_3);
\r
1061 drp_audbit_3.Text = "160";
\r
1064 private void drp_audmix_4_SelectedIndexChanged(object sender, EventArgs e)
\r
1066 if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text == "6 Channel Discrete"))
\r
1067 setBitrateSelections384(drp_audbit_4);
\r
1068 else if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text != "6 Channel Discrete"))
\r
1070 setBitrateSelections160(drp_audbit_4);
\r
1071 drp_audbit_4.Text = "160";
\r
1075 private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)
\r
1077 if (drp_audenc_1.Text == "AC3")
\r
1079 drp_audmix_1.Enabled = false;
\r
1080 drp_audbit_1.Enabled = false;
\r
1081 drp_audsr_1.Enabled = false;
\r
1085 drp_audmix_1.Enabled = true;
\r
1086 drp_audbit_1.Enabled = true;
\r
1087 drp_audsr_1.Enabled = true;
\r
1089 drp_audmix_1.Text = "Automatic";
\r
1090 drp_audbit_1.Text = "160";
\r
1091 drp_audsr_1.Text = "Auto";
\r
1095 if (drp_audenc_1.Text == "AAC")
\r
1097 drp_audmix_1.Items.Clear();
\r
1098 drp_audmix_1.Items.Add("Mono");
\r
1099 drp_audmix_1.Items.Add("Stereo");
\r
1100 drp_audmix_1.Items.Add("Dolby Surround");
\r
1101 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1102 drp_audmix_1.Items.Add("6 Channel Discrete");
\r
1104 setBitrateSelections160(drp_audbit_1);
\r
1108 drp_audmix_1.Items.Clear();
\r
1109 drp_audmix_1.Items.Add("Stereo");
\r
1110 drp_audmix_1.Items.Add("Dolby Surround");
\r
1111 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1113 setBitrateSelections320(drp_audbit_1);
\r
1116 private void drp_audenc_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1118 if (drp_audenc_2.Text == "AC3")
\r
1120 drp_audmix_2.Enabled = false;
\r
1121 drp_audbit_2.Enabled = false;
\r
1122 drp_audsr_2.Enabled = false;
\r
1124 drp_audmix_2.Text = "Automatic";
\r
1125 drp_audbit_2.Text = "160";
\r
1126 drp_audsr_2.Text = "Auto";
\r
1130 // Just make sure not to re-enable the following boxes if the track2 is none
\r
1131 if (drp_track2Audio.Text != "None")
\r
1133 drp_audmix_2.Enabled = true;
\r
1134 drp_audbit_2.Enabled = true;
\r
1135 drp_audsr_2.Enabled = true;
\r
1137 drp_audmix_2.Text = "Automatic";
\r
1138 drp_audbit_2.Text = "160";
\r
1139 drp_audsr_2.Text = "Auto";
\r
1143 if (drp_audenc_2.Text == "AAC")
\r
1145 drp_audmix_2.Items.Clear();
\r
1146 drp_audmix_2.Items.Add("Mono");
\r
1147 drp_audmix_2.Items.Add("Stereo");
\r
1148 drp_audmix_2.Items.Add("Dolby Surround");
\r
1149 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1150 drp_audmix_2.Items.Add("6 Channel Discrete");
\r
1152 setBitrateSelections160(drp_audbit_2);
\r
1156 drp_audmix_2.Items.Clear();
\r
1157 drp_audmix_2.Items.Add("Stereo");
\r
1158 drp_audmix_2.Items.Add("Dolby Surround");
\r
1159 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1161 setBitrateSelections320(drp_audbit_2);
\r
1164 private void drp_audenc_3_SelectedIndexChanged(object sender, EventArgs e)
\r
1166 if (drp_audenc_3.Text == "AC3")
\r
1168 drp_audmix_3.Enabled = false;
\r
1169 drp_audbit_3.Enabled = false;
\r
1170 drp_audsr_3.Enabled = false;
\r
1172 drp_audmix_3.Text = "Automatic";
\r
1173 drp_audbit_3.Text = "160";
\r
1174 drp_audsr_3.Text = "Auto";
\r
1178 // Just make sure not to re-enable the following boxes if the track above is none
\r
1179 if (drp_track2Audio.Text != "None")
\r
1181 drp_audmix_3.Enabled = true;
\r
1182 drp_audbit_3.Enabled = true;
\r
1183 drp_audsr_3.Enabled = true;
\r
1185 drp_audmix_3.Text = "Automatic";
\r
1186 drp_audbit_3.Text = "160";
\r
1187 drp_audsr_3.Text = "Auto";
\r
1192 if (drp_audenc_3.Text == "AAC")
\r
1194 drp_audmix_3.Items.Clear();
\r
1195 drp_audmix_3.Items.Add("Mono");
\r
1196 drp_audmix_3.Items.Add("Stereo");
\r
1197 drp_audmix_3.Items.Add("Dolby Surround");
\r
1198 drp_audmix_3.Items.Add("Dolby Pro Logic II");
\r
1199 drp_audmix_3.Items.Add("6 Channel Discrete");
\r
1201 setBitrateSelections160(drp_audbit_3);
\r
1205 drp_audmix_3.Items.Clear();
\r
1206 drp_audmix_3.Items.Add("Stereo");
\r
1207 drp_audmix_3.Items.Add("Dolby Surround");
\r
1208 drp_audmix_3.Items.Add("Dolby Pro Logic II");
\r
1210 setBitrateSelections320(drp_audbit_3);
\r
1213 private void drp_audenc_4_SelectedIndexChanged(object sender, EventArgs e)
\r
1215 if (drp_audenc_4.Text == "AC3")
\r
1217 drp_audmix_4.Enabled = false;
\r
1218 drp_audbit_4.Enabled = false;
\r
1219 drp_audsr_4.Enabled = false;
\r
1221 drp_audmix_4.Text = "Automatic";
\r
1222 drp_audbit_4.Text = "160";
\r
1223 drp_audsr_4.Text = "Auto";
\r
1227 // Just make sure not to re-enable the following boxes if the track above is none
\r
1228 if (drp_track2Audio.Text != "None")
\r
1230 drp_audmix_4.Enabled = true;
\r
1231 drp_audbit_4.Enabled = true;
\r
1232 drp_audsr_4.Enabled = true;
\r
1234 drp_audmix_4.Text = "Automatic";
\r
1235 drp_audbit_4.Text = "160";
\r
1236 drp_audsr_4.Text = "Auto";
\r
1241 if (drp_audenc_4.Text == "AAC")
\r
1243 drp_audmix_4.Items.Clear();
\r
1244 drp_audmix_4.Items.Add("Mono");
\r
1245 drp_audmix_4.Items.Add("Stereo");
\r
1246 drp_audmix_4.Items.Add("Dolby Surround");
\r
1247 drp_audmix_4.Items.Add("Dolby Pro Logic II");
\r
1248 drp_audmix_4.Items.Add("6 Channel Discrete");
\r
1250 setBitrateSelections160(drp_audbit_4);
\r
1254 drp_audmix_4.Items.Clear();
\r
1255 drp_audmix_4.Items.Add("Stereo");
\r
1256 drp_audmix_4.Items.Add("Dolby Surround");
\r
1257 drp_audmix_4.Items.Add("Dolby Pro Logic II");
\r
1259 setBitrateSelections320(drp_audbit_4);
\r
1263 private void trackBar1_Scroll(object sender, EventArgs e)
\r
1265 double value = trackBar1.Value / 10.0;
\r
1268 lbl_drc1.Text = value.ToString();
\r
1270 private void trackBar2_Scroll(object sender, EventArgs e)
\r
1272 double value = trackBar2.Value / 10.0;
\r
1275 lbl_drc2.Text = value.ToString();
\r
1277 private void trackBar3_Scroll(object sender, EventArgs e)
\r
1279 double value = trackBar3.Value / 10.0;
\r
1282 lbl_drc3.Text = value.ToString();
\r
1284 private void trackBar4_Scroll(object sender, EventArgs e)
\r
1286 double value = trackBar4.Value / 10.0;
\r
1289 lbl_drc4.Text = value.ToString();
\r
1292 private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
1294 if (drp_subtitle.Text.Contains("None"))
\r
1296 check_forced.Enabled = false;
\r
1297 check_forced.Checked = false;
\r
1300 check_forced.Enabled = true;
\r
1303 // Chapter Marker Tab
\r
1304 private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)
\r
1306 if (Check_ChapterMarkers.Checked)
\r
1308 string destination = text_destination.Text;
\r
1309 destination = destination.Replace(".mp4", ".m4v");
\r
1310 text_destination.Text = destination;
\r
1311 data_chpt.Rows.Clear();
\r
1312 data_chpt.Enabled = true;
\r
1313 DataGridView chapterGridView = hb_common_func.chapterNaming(data_chpt, drop_chapterStart.Text, drop_chapterFinish.Text);
\r
1314 if (chapterGridView != null)
\r
1315 data_chpt = chapterGridView;
\r
1319 string destination = text_destination.Text;
\r
1320 destination = destination.Replace(".m4v", ".mp4");
\r
1321 text_destination.Text = destination;
\r
1322 data_chpt.Rows.Clear();
\r
1323 data_chpt.Enabled = false;
\r
1328 private void drop_refFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1330 x264PanelFunctions.on_x264_WidgetChange("ref", this);
\r
1332 private void check_mixedReferences_CheckedChanged(object sender, EventArgs e)
\r
1334 x264PanelFunctions.on_x264_WidgetChange("mixed-refs", this);
\r
1336 private void drop_bFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1338 x264PanelFunctions.on_x264_WidgetChange("bframes", this);
\r
1340 private void drop_directPrediction_SelectedIndexChanged(object sender, EventArgs e)
\r
1342 x264PanelFunctions.on_x264_WidgetChange("direct", this);
\r
1344 private void check_weightedBFrames_CheckedChanged(object sender, EventArgs e)
\r
1346 x264PanelFunctions.on_x264_WidgetChange("weightb", this);
\r
1348 private void check_bFrameDistortion_CheckedChanged(object sender, EventArgs e)
\r
1350 x264PanelFunctions.on_x264_WidgetChange("brdo", this);
\r
1352 private void check_BidirectionalRefinement_CheckedChanged(object sender, EventArgs e)
\r
1354 x264PanelFunctions.on_x264_WidgetChange("bime", this);
\r
1356 private void check_pyrmidalBFrames_CheckedChanged(object sender, EventArgs e)
\r
1358 x264PanelFunctions.on_x264_WidgetChange("b-pyramid", this);
\r
1360 private void drop_MotionEstimationMethod_SelectedIndexChanged(object sender, EventArgs e)
\r
1362 x264PanelFunctions.on_x264_WidgetChange("me", this);
\r
1364 private void drop_MotionEstimationRange_SelectedIndexChanged(object sender, EventArgs e)
\r
1366 x264PanelFunctions.on_x264_WidgetChange("merange", this);
\r
1368 private void drop_subpixelMotionEstimation_SelectedIndexChanged(object sender, EventArgs e)
\r
1370 x264PanelFunctions.on_x264_WidgetChange("subq", this);
\r
1372 private void drop_analysis_SelectedIndexChanged(object sender, EventArgs e)
\r
1374 x264PanelFunctions.on_x264_WidgetChange("analyse", this);
\r
1376 private void check_8x8DCT_CheckedChanged(object sender, EventArgs e)
\r
1378 x264PanelFunctions.on_x264_WidgetChange("8x8dct", this);
\r
1380 private void drop_deblockAlpha_SelectedIndexChanged(object sender, EventArgs e)
\r
1382 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1385 private void drop_deblockBeta_SelectedIndexChanged(object sender, EventArgs e)
\r
1387 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1390 private void drop_trellis_SelectedIndexChanged(object sender, EventArgs e)
\r
1392 x264PanelFunctions.on_x264_WidgetChange("trellis", this);
\r
1394 private void check_noFastPSkip_CheckedChanged(object sender, EventArgs e)
\r
1396 x264PanelFunctions.on_x264_WidgetChange("no-fast-pskip", this);
\r
1398 private void check_noDCTDecimate_CheckedChanged(object sender, EventArgs e)
\r
1400 x264PanelFunctions.on_x264_WidgetChange("no-dct-decimate", this);
\r
1403 private void check_Cabac_CheckedChanged(object sender, EventArgs e)
\r
1406 x264PanelFunctions.on_x264_WidgetChange("cabac", this);
\r
1409 private void rtf_x264Query_TextChanged(object sender, EventArgs e)
\r
1411 if (rtf_x264Query.Text.EndsWith("\n"))
\r
1413 rtf_x264Query.Text = rtf_x264Query.Text.Replace("\n", "");
\r
1414 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1415 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1417 if (rtf_x264Query.Text == string.Empty)
\r
1418 x264PanelFunctions.reset2Defaults(this);
\r
1421 private void btn_reset_Click(object sender, EventArgs e)
\r
1423 rtf_x264Query.Text = "";
\r
1424 x264PanelFunctions.reset2Defaults(this);
\r
1427 // Query Editor Tab
\r
1428 private void btn_generate_Query_Click(object sender, EventArgs e)
\r
1430 rtf_query.Text = queryGen.GenerateTheQuery(this);
\r
1432 private void btn_clear_Click(object sender, EventArgs e)
\r
1434 rtf_query.Clear();
\r
1438 private void btn_addPreset_Click(object sender, EventArgs e)
\r
1440 // Remember each nodes expanded status so we can reload it
\r
1441 List<Boolean> nodeStatus = saveTreeViewState();
\r
1442 nodeStatus.Add(true);
\r
1444 // Now add the new preset
\r
1445 Form preset = new frmAddPreset(this, queryGen.GenerateTheQuery(this), presetHandler);
\r
1446 preset.ShowDialog();
\r
1448 // Now reload the TreeView states
\r
1449 loadTreeViewStates(nodeStatus);
\r
1451 private void btn_removePreset_Click(object sender, EventArgs e)
\r
1453 DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1454 if (result == DialogResult.Yes)
\r
1456 if (treeView_presets.SelectedNode != null)
\r
1457 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
1459 // Remember each nodes expanded status so we can reload it
\r
1460 List<Boolean> nodeStatus = saveTreeViewState();
\r
1462 // Now reload the preset panel
\r
1463 loadPresetPanel();
\r
1465 // Now reload the TreeView states
\r
1466 loadTreeViewStates(nodeStatus);
\r
1468 treeView_presets.Select();
\r
1470 private void btn_setDefault_Click(object sender, EventArgs e)
\r
1472 String query = queryGen.GenerateTheQuery(this);
\r
1473 Properties.Settings.Default.defaultUserSettings = query;
\r
1474 // Save the new default Settings
\r
1475 Properties.Settings.Default.Save();
\r
1476 MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
1478 private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)
\r
1480 // Ok, so, we've selected a preset. Now we want to load it.
\r
1481 string presetName = treeView_presets.SelectedNode.Text;
\r
1482 string query = presetHandler.getCliForPreset(presetName);
\r
1484 if (query != null)
\r
1486 //Ok, Reset all the H264 widgets before changing the preset
\r
1487 x264PanelFunctions.reset2Defaults(this);
\r
1489 // Send the query from the file to the Query Parser class
\r
1490 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(query);
\r
1492 // Now load the preset
\r
1493 presetLoader.presetLoader(this, presetQuery, presetName);
\r
1495 // The x264 widgets will need updated, so do this now:
\r
1496 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1497 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1500 private void treeView_presets_deleteKey(object sender, KeyEventArgs e)
\r
1502 if (e.KeyCode == Keys.Delete)
\r
1504 DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1505 if (result == DialogResult.Yes)
\r
1507 if (treeView_presets.SelectedNode != null)
\r
1508 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
1510 // Remember each nodes expanded status so we can reload it
\r
1511 List<Boolean> nodeStatus = new List<Boolean>();
\r
1512 foreach (TreeNode node in treeView_presets.Nodes)
\r
1513 nodeStatus.Add(node.IsExpanded);
\r
1515 // Now reload the preset panel
\r
1516 loadPresetPanel();
\r
1518 // And finally, re-expand any of the nodes if required
\r
1520 foreach (TreeNode node in treeView_presets.Nodes)
\r
1522 if (nodeStatus[i] == true)
\r
1533 #region Preset Expand / Collaspe
\r
1534 private List<Boolean> saveTreeViewState()
\r
1536 // Remember each nodes expanded status so we can reload it
\r
1537 List<Boolean> nodeStatus = new List<Boolean>();
\r
1538 foreach (TreeNode node in treeView_presets.Nodes)
\r
1540 nodeStatus.Add(node.IsExpanded);
\r
1541 foreach (TreeNode subNode in node.Nodes)
\r
1542 nodeStatus.Add(node.IsExpanded);
\r
1544 return nodeStatus;
\r
1547 private void loadTreeViewStates(List<Boolean> nodeStatus)
\r
1549 // And finally, re-expand any of the nodes if required
\r
1551 foreach (TreeNode node in treeView_presets.Nodes)
\r
1553 if (nodeStatus[i] == true)
\r
1556 foreach (TreeNode subNode in node.Nodes)
\r
1558 if (nodeStatus[i] == true)
\r
1568 private void loadNormalPreset()
\r
1570 treeView_presets.Nodes.Find("Normal", true);
\r
1572 foreach (TreeNode treenode in treeView_presets.Nodes)
\r
1574 foreach (TreeNode node in treenode.Nodes)
\r
1576 if (node.Text.ToString().Equals("Normal"))
\r
1577 treeView_presets.SelectedNode = treeView_presets.Nodes[treenode.Index].Nodes[0];
\r
1583 #region Drive Detection
\r
1584 // Source Button Drive Detection
\r
1585 private delegate void ProgressUpdateHandler();
\r
1586 private void getDriveInfoThread()
\r
1590 if (this.InvokeRequired)
\r
1592 this.BeginInvoke(new ProgressUpdateHandler(getDriveInfoThread));
\r
1596 Boolean foundDrive = false;
\r
1597 DriveInfo[] theCollectionOfDrives = DriveInfo.GetDrives();
\r
1598 foreach (DriveInfo curDrive in theCollectionOfDrives)
\r
1600 if (curDrive.DriveType == DriveType.CDRom)
\r
1602 if (curDrive.IsReady)
\r
1604 if (File.Exists(curDrive.RootDirectory.ToString() + "VIDEO_TS\\VIDEO_TS.IFO"))
\r
1605 mnu_dvd_drive.Text = curDrive.RootDirectory.ToString() + "VIDEO_TS (" + curDrive.VolumeLabel + ")";
\r
1607 mnu_dvd_drive.Text = "[No DVD Drive Ready]";
\r
1609 foundDrive = true;
\r
1615 if (foundDrive == false)
\r
1616 mnu_dvd_drive.Text = "[No DVD Drive Ready]";
\r
1620 mnu_dvd_drive.Text = "[No DVD Drive Ready / Found]";
\r
1625 #region Audio Panel Stuff
\r
1626 public void setAudioByContainer(String path)
\r
1628 string oldval = "";
\r
1630 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
1632 oldval = drp_audenc_1.Text;
\r
1633 drp_audenc_1.Items.Clear();
\r
1634 drp_audenc_1.Items.Add("AAC");
\r
1635 drp_audenc_1.Items.Add("AC3");
\r
1636 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1637 drp_audenc_1.SelectedIndex = 0;
\r
1639 oldval = drp_audenc_2.Text;
\r
1640 drp_audenc_2.Items.Clear();
\r
1641 drp_audenc_2.Items.Add("AAC");
\r
1642 drp_audenc_2.Items.Add("AC3");
\r
1643 if (drp_audenc_2.Enabled)
\r
1645 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1646 drp_audenc_2.SelectedIndex = 0;
\r
1649 oldval = drp_audenc_3.Text;
\r
1650 drp_audenc_3.Items.Clear();
\r
1651 drp_audenc_3.Items.Add("AAC");
\r
1652 drp_audenc_3.Items.Add("AC3");
\r
1653 if (drp_audenc_3.Enabled)
\r
1655 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1656 drp_audenc_3.SelectedIndex = 0;
\r
1659 oldval = drp_audenc_4.Text;
\r
1660 drp_audenc_4.Items.Clear();
\r
1661 drp_audenc_4.Items.Add("AAC");
\r
1662 drp_audenc_4.Items.Add("AC3");
\r
1663 if (drp_audenc_4.Enabled)
\r
1665 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1666 drp_audenc_4.SelectedIndex = 0;
\r
1669 else if (path.EndsWith(".avi"))
\r
1671 oldval = drp_audenc_1.Text;
\r
1672 drp_audenc_1.Items.Clear();
\r
1673 drp_audenc_1.Items.Add("MP3");
\r
1674 drp_audenc_1.Items.Add("AC3");
\r
1675 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1676 drp_audenc_1.SelectedIndex = 0;
\r
1678 oldval = drp_audenc_2.Text;
\r
1679 drp_audenc_2.Items.Clear();
\r
1680 drp_audenc_2.Items.Add("MP3");
\r
1681 drp_audenc_2.Items.Add("AC3");
\r
1682 if (drp_audenc_2.Enabled)
\r
1684 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1685 drp_audenc_2.SelectedIndex = 0;
\r
1689 oldval = drp_audenc_3.Text;
\r
1690 drp_audenc_3.Items.Clear();
\r
1691 drp_audenc_3.Items.Add("MP3");
\r
1692 drp_audenc_3.Items.Add("AC3");
\r
1693 if (drp_audenc_3.Enabled)
\r
1695 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1696 drp_audenc_3.SelectedIndex = 0;
\r
1699 oldval = drp_audenc_4.Text;
\r
1700 drp_audenc_4.Items.Clear();
\r
1701 drp_audenc_4.Items.Add("MP3");
\r
1702 drp_audenc_4.Items.Add("AC3");
\r
1703 if (drp_audenc_4.Enabled)
\r
1705 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1706 drp_audenc_4.SelectedIndex = 0;
\r
1709 else if (path.EndsWith(".ogm"))
\r
1711 drp_audenc_1.Items.Clear();
\r
1712 drp_audenc_1.Items.Add("Vorbis");
\r
1713 drp_audenc_1.SelectedIndex = 0;
\r
1715 drp_audenc_2.Items.Clear();
\r
1716 drp_audenc_2.Items.Add("Vorbis");
\r
1717 if (drp_audenc_2.Enabled)
\r
1718 drp_audenc_2.SelectedIndex = 0;
\r
1720 drp_audenc_3.Items.Clear();
\r
1721 drp_audenc_3.Items.Add("Vorbis");
\r
1722 if (drp_audenc_3.Enabled)
\r
1723 drp_audenc_3.SelectedIndex = 0;
\r
1725 drp_audenc_4.Items.Clear();
\r
1726 drp_audenc_4.Items.Add("Vorbis");
\r
1727 if (drp_audenc_4.Enabled)
\r
1728 drp_audenc_4.SelectedIndex = 0;
\r
1730 else if (path.EndsWith(".mkv"))
\r
1732 drp_audenc_1.Items.Clear();
\r
1733 drp_audenc_1.Items.Add("AAC");
\r
1734 drp_audenc_1.Items.Add("MP3");
\r
1735 drp_audenc_1.Items.Add("AC3");
\r
1736 drp_audenc_1.Items.Add("Vorbis");
\r
1737 if (drp_audenc_1.Text == string.Empty)
\r
1738 drp_audenc_1.SelectedIndex = 0;
\r
1741 drp_audenc_2.Items.Clear();
\r
1742 drp_audenc_2.Items.Add("AAC");
\r
1743 drp_audenc_2.Items.Add("MP3");
\r
1744 drp_audenc_2.Items.Add("AC3");
\r
1745 drp_audenc_2.Items.Add("Vorbis");
\r
1746 if (drp_audenc_2.Enabled)
\r
1748 if (drp_audenc_2.Text == string.Empty)
\r
1749 drp_audenc_2.SelectedIndex = 0;
\r
1752 drp_audenc_3.Items.Clear();
\r
1753 drp_audenc_3.Items.Add("AAC");
\r
1754 drp_audenc_3.Items.Add("MP3");
\r
1755 drp_audenc_3.Items.Add("AC3");
\r
1756 drp_audenc_3.Items.Add("Vorbis");
\r
1757 if (drp_audenc_3.Enabled)
\r
1759 if (drp_audenc_3.Text == string.Empty)
\r
1760 drp_audenc_3.SelectedIndex = 0;
\r
1763 drp_audenc_4.Items.Clear();
\r
1764 drp_audenc_4.Items.Add("AAC");
\r
1765 drp_audenc_4.Items.Add("MP3");
\r
1766 drp_audenc_4.Items.Add("AC3");
\r
1767 drp_audenc_4.Items.Add("Vorbis");
\r
1768 if (drp_audenc_4.Enabled)
\r
1770 if (drp_audenc_4.Text == string.Empty)
\r
1771 drp_audenc_4.SelectedIndex = 0;
\r
1775 public void setVideoByContainer(String path)
\r
1777 string oldval = "";
\r
1779 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
1781 oldval = drp_videoEncoder.Text;
\r
1782 drp_videoEncoder.Items.Clear();
\r
1783 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1784 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1785 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1786 if (oldval == "VP3 (Theora)")
\r
1787 drp_videoEncoder.SelectedIndex = 2;
\r
1789 drp_videoEncoder.Text = oldval;
\r
1792 else if (path.EndsWith(".avi"))
\r
1794 oldval = drp_videoEncoder.Text;
\r
1795 drp_videoEncoder.Items.Clear();
\r
1796 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1797 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1798 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1799 if (oldval == "VP3 (Theora)")
\r
1800 drp_videoEncoder.SelectedIndex = 2;
\r
1802 drp_videoEncoder.Text = oldval;
\r
1804 else if (path.EndsWith(".ogm"))
\r
1806 oldval = drp_videoEncoder.Text;
\r
1807 drp_videoEncoder.Items.Clear();
\r
1808 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1809 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1810 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1811 if (oldval == "H.264 (x264)")
\r
1812 drp_videoEncoder.SelectedIndex = 2;
\r
1814 drp_videoEncoder.Text = oldval;
\r
1816 else if (path.EndsWith(".mkv"))
\r
1818 oldval = drp_videoEncoder.Text;
\r
1819 drp_videoEncoder.Items.Clear();
\r
1820 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1821 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1822 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1823 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1824 drp_videoEncoder.Text = oldval;
\r
1827 public void setBitrateSelections384(ComboBox dropDown)
\r
1829 dropDown.Items.Clear();
\r
1830 dropDown.Items.Add("32");
\r
1831 dropDown.Items.Add("40");
\r
1832 dropDown.Items.Add("48");
\r
1833 dropDown.Items.Add("56");
\r
1834 dropDown.Items.Add("64");
\r
1835 dropDown.Items.Add("80");
\r
1836 dropDown.Items.Add("86");
\r
1837 dropDown.Items.Add("112");
\r
1838 dropDown.Items.Add("128");
\r
1839 dropDown.Items.Add("160");
\r
1840 dropDown.Items.Add("192");
\r
1841 dropDown.Items.Add("224");
\r
1842 dropDown.Items.Add("256");
\r
1843 dropDown.Items.Add("320");
\r
1844 dropDown.Items.Add("384");
\r
1846 public void setBitrateSelections320(ComboBox dropDown)
\r
1848 dropDown.Items.Clear();
\r
1849 dropDown.Items.Add("32");
\r
1850 dropDown.Items.Add("40");
\r
1851 dropDown.Items.Add("48");
\r
1852 dropDown.Items.Add("56");
\r
1853 dropDown.Items.Add("64");
\r
1854 dropDown.Items.Add("80");
\r
1855 dropDown.Items.Add("86");
\r
1856 dropDown.Items.Add("112");
\r
1857 dropDown.Items.Add("128");
\r
1858 dropDown.Items.Add("160");
\r
1859 dropDown.Items.Add("192");
\r
1860 dropDown.Items.Add("224");
\r
1861 dropDown.Items.Add("256");
\r
1862 dropDown.Items.Add("320");
\r
1864 public void setBitrateSelections160(ComboBox dropDown)
\r
1866 dropDown.Items.Clear();
\r
1867 dropDown.Items.Add("32");
\r
1868 dropDown.Items.Add("40");
\r
1869 dropDown.Items.Add("48");
\r
1870 dropDown.Items.Add("56");
\r
1871 dropDown.Items.Add("64");
\r
1872 dropDown.Items.Add("80");
\r
1873 dropDown.Items.Add("86");
\r
1874 dropDown.Items.Add("112");
\r
1875 dropDown.Items.Add("128");
\r
1876 dropDown.Items.Add("160");
\r
1883 private delegate void UpdateUIHandler();
\r
1885 // Encoding Functions
\r
1886 private void procMonitor(object state)
\r
1888 // Make sure we are not already encoding and if we are then display an error.
\r
1889 if (hbProc != null)
\r
1890 hbProc.CloseMainWindow();
\r
1893 hbProc = cliObj.runCli(this, (string)state);
\r
1894 hbProc.WaitForExit();
\r
1895 setEncodeLabelFinished();
\r
1898 // If the window is minimized, display the notification in a popup.
\r
1899 if (FormWindowState.Minimized == this.WindowState)
\r
1901 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
1902 notifyIcon.ShowBalloonTip(500);
\r
1905 // After the encode is done, we may want to shutdown, suspend etc.
\r
1906 cliObj.addCLIQueryToLog((string)state);
\r
1907 cliObj.copyLog((string)state); // Make a copy of the log in the users desired location if necessary
\r
1908 cliObj.afterEncodeAction();
\r
1911 private void setEncodeLabelFinished()
\r
1913 if (this.InvokeRequired)
\r
1915 this.BeginInvoke(new UpdateUIHandler(setEncodeLabelFinished));
\r
1918 lbl_encode.Text = "Encoding Finished";
\r
1919 btn_start.Text = "Start";
\r
1920 btn_start.ToolTipText = "Start the encoding process";
\r
1921 btn_start.Image = Properties.Resources.Play;
\r
1926 #region Public Methods
\r
1929 /// Is the mainWindow currently monitoring an encoding session
\r
1931 /// <returns>boolean</returns>
\r
1932 public Boolean isEncoding()
\r
1934 if (hbProc == null)
\r
1941 /// Action can be "encode" or "scan"
\r
1942 /// Set the last action varible in the main window.
\r
1943 /// This is used to control which log file is displayed when the Activity window is displayed.
\r
1945 /// <param name="last">String</param>
\r
1946 public void setLastAction(string last)
\r
1948 this.lastAction = last;
\r
1952 /// DVD parseing. Pass in a parsed DVD.
\r
1954 /// <param name="dvd"></param>
\r
1955 public void setStreamReader(Parsing.DVD dvd)
\r
1957 this.thisDVD = dvd;
\r
1961 /// Reload the preset panel display
\r
1963 public void loadPresetPanel()
\r
1965 presetHandler.loadPresetData();
\r
1967 treeView_presets.Nodes.Clear();
\r
1969 List<Presets.Preset> presetNameList = new List<Presets.Preset>();
\r
1970 List<string> presetNames = new List<string>();
\r
1971 TreeNode preset_treeview = new TreeNode();
\r
1973 TreeNode rootNode = new TreeNode();
\r
1974 TreeNode rootNodeTwo = new TreeNode();
\r
1975 TreeNode childNode = new TreeNode();
\r
1976 int workingLevel = 0;
\r
1977 string previousCategory = String.Empty;
\r
1978 string currentCategory = String.Empty;
\r
1980 presetNameList = presetHandler.getBuildInPresets();
\r
1981 if (presetNameList.Count != 0)
\r
1983 foreach (Presets.Preset preset in presetNameList)
\r
1985 // Handle Root Nodes
\r
1987 // First Case - No presets have been read yet so setup the root category
\r
1988 if (preset.Level == 1 && currentCategory == String.Empty)
\r
1990 rootNode = new TreeNode(preset.Category);
\r
1991 workingLevel = preset.Level;
\r
1992 currentCategory = preset.Category;
\r
1993 previousCategory = preset.Category;
\r
1996 // Second Case - This is the first sub child node.
\r
1997 if (preset.Level == 2 && workingLevel == 1 && currentCategory != preset.Category)
\r
1999 rootNodeTwo = new TreeNode(preset.Category);
\r
2000 workingLevel = preset.Level;
\r
2001 currentCategory = preset.Category;
\r
2002 rootNode.Nodes.Add(rootNodeTwo);
\r
2005 // Third Case - Any presets the sub presets detected in the above if statment.
\r
2006 if (preset.Level == 1 && workingLevel == 2 && previousCategory == preset.Category)
\r
2008 workingLevel = preset.Level;
\r
2009 currentCategory = preset.Category;
\r
2012 // Fourth Case - We've finished this root node and are onto the next root node.
\r
2013 if (preset.Level == 1 && workingLevel == 1 && previousCategory != preset.Category)
\r
2015 treeView_presets.Nodes.Add(rootNode); // Add the finished node
\r
2017 rootNode = new TreeNode(preset.Category);
\r
2018 workingLevel = preset.Level;
\r
2019 currentCategory = preset.Category;
\r
2020 previousCategory = preset.Category;
\r
2023 // Handle Child Nodes
\r
2024 // Add First level child nodes to the current root node
\r
2025 if (preset.Level == 1 && workingLevel == 1 && currentCategory == preset.Category)
\r
2027 childNode = new TreeNode(preset.Name);
\r
2028 rootNode.Nodes.Add(childNode);
\r
2031 // Add Second level child nodes to the current sub root node
\r
2032 if (preset.Level == 2 && workingLevel == 2 && currentCategory == preset.Category)
\r
2034 childNode = new TreeNode(preset.Name);
\r
2035 rootNodeTwo.Nodes.Add(childNode);
\r
2039 // Add the final root node which does not get added above.
\r
2040 treeView_presets.Nodes.Add(rootNode);
\r
2045 presetNames = presetHandler.getUserPresetNames();
\r
2046 foreach (string preset in presetNames)
\r
2048 preset_treeview = new TreeNode(preset);
\r
2049 preset_treeview.ForeColor = Color.Black;
\r
2051 // Now Fill Out List View with Items
\r
2052 treeView_presets.Nodes.Add(preset_treeview);
\r
2058 #region Taskbar Tray Icon
\r
2059 private void frmMain_Resize(object sender, EventArgs e)
\r
2061 if (FormWindowState.Minimized == this.WindowState)
\r
2063 notifyIcon.Visible = true;
\r
2064 if (lbl_encode.Text != "")
\r
2065 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
2067 notifyIcon.BalloonTipText = "Not Encoding";
\r
2068 notifyIcon.ShowBalloonTip(500);
\r
2071 else if (FormWindowState.Normal == this.WindowState)
\r
2072 notifyIcon.Visible = false;
\r
2074 private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
\r
2076 this.Visible = true;
\r
2078 this.WindowState = FormWindowState.Normal;
\r
2079 notifyIcon.Visible = false;
\r
2081 private void btn_minimize_Click(object sender, EventArgs e)
\r
2083 this.WindowState = FormWindowState.Minimized;
\r
2085 private void btn_restore_Click(object sender, EventArgs e)
\r
2087 this.Visible = true;
\r
2089 this.WindowState = FormWindowState.Normal;
\r
2090 notifyIcon.Visible = false;
\r
2094 // This is the END of the road ------------------------------------------------------------------------------
\r