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 data_chpt.Rows.Clear();
\r
503 private void mnu_dvd_drive_Click(object sender, EventArgs e)
\r
505 // Enable the creation of chapter markers.
\r
506 Check_ChapterMarkers.Enabled = true;
\r
508 // Set the last action to scan.
\r
509 // This is used for tracking which file to load in the activity window
\r
510 lastAction = "scan";
\r
512 String filename = "";
\r
513 if (mnu_dvd_drive.Text.Contains("VIDEO_TS"))
\r
515 string[] path = mnu_dvd_drive.Text.Split(' ');
\r
516 filename = path[0];
\r
517 lbl_encode.Text = "Scanning ...";
\r
518 Form frmRD = new frmReadDVD(filename, this);
\r
519 text_source.Text = filename;
\r
520 frmRD.ShowDialog();
\r
523 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
524 if (drp_dvdtitle.Items.Count == 0)
\r
525 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
527 lbl_encode.Text = "";
\r
530 private void drp_dvdtitle_Click(object sender, EventArgs e)
\r
532 if ((drp_dvdtitle.Items.Count == 1) && (drp_dvdtitle.Items[0].ToString() == "Automatic"))
\r
533 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
535 private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
537 // Reset some values on the form
\r
538 lbl_Aspect.Text = "Select a Title";
\r
539 //lbl_RecomendedCrop.Text = "Select a Title";
\r
540 drop_chapterStart.Items.Clear();
\r
541 drop_chapterFinish.Items.Clear();
\r
543 // If the dropdown is set to automatic nothing else needs to be done.
\r
544 // Otheriwse if its not, title data has to be loased from parsing.
\r
545 if (drp_dvdtitle.Text != "Automatic")
\r
547 selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;
\r
549 // Set the Aspect Ratio
\r
550 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();
\r
551 lbl_src_res.Text = selectedTitle.Resolution.Width + " x " + selectedTitle.Resolution.Height;
\r
552 lbl_duration.Text = selectedTitle.Duration.ToString();
\r
554 // Set the Recommended Cropping values
\r
555 text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();
\r
556 text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();
\r
557 text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();
\r
558 text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();
\r
560 // Populate the Start chapter Dropdown
\r
561 drop_chapterStart.Items.Clear();
\r
562 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
563 if (drop_chapterStart.Items.Count > 0)
\r
564 drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();
\r
566 // Populate the Final Chapter Dropdown
\r
567 drop_chapterFinish.Items.Clear();
\r
568 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
569 if (drop_chapterFinish.Items.Count > 0)
\r
570 drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();
\r
572 // Populate the Audio Channels Dropdown
\r
573 drp_track1Audio.Items.Clear();
\r
574 drp_track1Audio.Items.Add("Automatic");
\r
575 drp_track1Audio.Items.Add("None");
\r
576 drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
577 drp_track1Audio.SelectedIndex = 0;
\r
579 drp_track2Audio.Items.Clear();
\r
580 drp_track2Audio.Items.Add("None");
\r
581 drp_track2Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
582 drp_track2Audio.SelectedIndex = 0;
\r
584 drp_track3Audio.Items.Clear();
\r
585 drp_track3Audio.Items.Add("None");
\r
586 drp_track3Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
587 drp_track3Audio.SelectedIndex = 0;
\r
589 drp_track4Audio.Items.Clear();
\r
590 drp_track4Audio.Items.Add("None");
\r
591 drp_track4Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
592 drp_track4Audio.SelectedIndex = 0;
\r
594 // Populate the Subtitles dropdown
\r
595 drp_subtitle.Items.Clear();
\r
596 drp_subtitle.Items.Add("None");
\r
597 drp_subtitle.Items.Add("Autoselect");
\r
598 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());
\r
599 if (drp_subtitle.Items.Count > 0)
\r
600 drp_subtitle.Text = drp_subtitle.Items[0].ToString();
\r
604 // Run the autoName & chapterNaming functions
\r
605 if (Properties.Settings.Default.autoNaming == "Checked")
\r
606 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
608 data_chpt.Rows.Clear();
\r
609 DataGridView chapterGridView = hb_common_func.chapterNaming(data_chpt, drop_chapterStart.Text, drop_chapterFinish.Text);
\r
610 if (chapterGridView != null)
\r
611 data_chpt = chapterGridView;
\r
613 private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)
\r
615 int c_start, c_end = 1;
\r
617 if (drop_chapterFinish.Text == "Auto" && drop_chapterFinish.Items.Count != 0)
\r
618 drop_chapterFinish.SelectedIndex = drop_chapterFinish.Items.Count - 1;
\r
620 int.TryParse(drop_chapterStart.Text, out c_start);
\r
621 int.TryParse(drop_chapterFinish.Text, out c_end);
\r
625 if (c_start > c_end)
\r
626 drop_chapterFinish.Text = c_start.ToString();
\r
629 lbl_duration.Text = hb_common_func.calculateDuration(drop_chapterStart.Text, drop_chapterFinish.Text, selectedTitle).ToString();
\r
631 // Run the Autonaming function
\r
632 if (Properties.Settings.Default.autoNaming == "Checked")
\r
633 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
635 private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)
\r
637 int c_start, c_end = 1;
\r
639 if (drop_chapterStart.Text == "Auto" && drop_chapterStart.Items.Count >= 1)
\r
640 drop_chapterStart.SelectedIndex = 1;
\r
642 int.TryParse(drop_chapterStart.Text, out c_start);
\r
643 int.TryParse(drop_chapterFinish.Text, out c_end);
\r
647 if (c_end < c_start)
\r
648 drop_chapterFinish.Text = c_start.ToString();
\r
651 lbl_duration.Text = hb_common_func.calculateDuration(drop_chapterStart.Text, drop_chapterFinish.Text, selectedTitle).ToString();
\r
653 // Run the Autonaming function
\r
654 if (Properties.Settings.Default.autoNaming == "Checked")
\r
655 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
659 private void btn_destBrowse_Click(object sender, EventArgs e)
\r
661 // This removes the file extension from the filename box on the save file dialog.
\r
662 // It's daft but some users don't realise that typing an extension overrides the dropdown extension selected.
\r
663 DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", "");
\r
665 // Show the dialog and set the main form file path
\r
666 DVD_Save.ShowDialog();
\r
667 if (DVD_Save.FileName.StartsWith("\\"))
\r
668 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
671 setAudioByContainer(DVD_Save.FileName);
\r
673 text_destination.Text = DVD_Save.FileName;
\r
675 // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)
\r
676 if (Check_ChapterMarkers.Checked)
\r
677 text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v");
\r
680 private void text_destination_TextChanged(object sender, EventArgs e)
\r
682 setAudioByContainer(text_destination.Text);
\r
683 setVideoByContainer(text_destination.Text);
\r
684 string path = text_destination.Text;
\r
685 if (path.EndsWith(".mp4"))
\r
686 drop_format.SelectedIndex = 0;
\r
687 else if (path.EndsWith(".m4v"))
\r
688 drop_format.SelectedIndex = 1;
\r
689 else if (path.EndsWith(".mkv"))
\r
690 drop_format.SelectedIndex = 2;
\r
691 else if (path.EndsWith(".avi"))
\r
692 drop_format.SelectedIndex = 3;
\r
693 else if (path.EndsWith(".ogm"))
\r
694 drop_format.SelectedIndex = 4;
\r
699 private void drop_format_SelectedIndexChanged(object sender, EventArgs e)
\r
701 if (drop_format.SelectedIndex == 0)
\r
702 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".mp4");
\r
703 else if (drop_format.SelectedIndex == 1)
\r
704 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".m4v");
\r
705 else if (drop_format.SelectedIndex == 2)
\r
706 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".mkv");
\r
707 else if (drop_format.SelectedIndex == 3)
\r
708 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".avi");
\r
709 else if (drop_format.SelectedIndex == 4)
\r
710 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".ogm");
\r
714 private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)
\r
716 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))
\r
718 check_largeFile.Enabled = true;
\r
719 check_optimiseMP4.Enabled = true;
\r
720 check_iPodAtom.Enabled = true;
\r
724 check_largeFile.Enabled = false;
\r
725 check_optimiseMP4.Enabled = false;
\r
726 check_iPodAtom.Enabled = false;
\r
727 check_largeFile.Checked = false;
\r
728 check_optimiseMP4.Checked = false;
\r
729 check_iPodAtom.Checked = false;
\r
733 //Turn off some options which are H.264 only when the user selects a non h.264 encoder
\r
734 if (drp_videoEncoder.Text.Contains("H.264"))
\r
736 if (check_2PassEncode.CheckState == CheckState.Checked)
\r
737 check_turbo.Enabled = true;
\r
739 h264Tab.Enabled = true;
\r
740 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))
\r
741 check_iPodAtom.Enabled = true;
\r
743 check_iPodAtom.Enabled = false;
\r
744 if (!drp_anamorphic.Items.Contains("Loose"))
\r
745 drp_anamorphic.Items.Add("Loose");
\r
749 check_turbo.CheckState = CheckState.Unchecked;
\r
750 check_turbo.Enabled = false;
\r
751 h264Tab.Enabled = false;
\r
752 rtf_x264Query.Text = "";
\r
753 check_iPodAtom.Enabled = false;
\r
754 check_iPodAtom.Checked = false;
\r
755 if (drp_anamorphic.Items.Count == 3)
\r
756 drp_anamorphic.Items.RemoveAt(2);
\r
760 private void text_bitrate_TextChanged(object sender, EventArgs e)
\r
762 text_filesize.Text = "";
\r
763 slider_videoQuality.Value = 0;
\r
764 SliderValue.Text = "0%";
\r
765 check_2PassEncode.Enabled = true;
\r
767 private void text_filesize_TextChanged(object sender, EventArgs e)
\r
769 text_bitrate.Text = "";
\r
770 slider_videoQuality.Value = 0;
\r
771 SliderValue.Text = "0%";
\r
772 check_2PassEncode.Enabled = true;
\r
774 private void slider_videoQuality_Scroll(object sender, EventArgs e)
\r
776 SliderValue.Text = slider_videoQuality.Value.ToString() + "%";
\r
777 text_bitrate.Text = "";
\r
778 text_filesize.Text = "";
\r
779 check_2PassEncode.Enabled = false;
\r
780 check_2PassEncode.CheckState = CheckState.Unchecked;
\r
782 private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)
\r
784 if (check_2PassEncode.CheckState.ToString() == "Checked")
\r
786 if (drp_videoEncoder.Text.Contains("H.264"))
\r
787 check_turbo.Enabled = true;
\r
791 check_turbo.Enabled = false;
\r
792 check_turbo.CheckState = CheckState.Unchecked;
\r
797 private void text_width_TextChanged(object sender, EventArgs e)
\r
799 maxWidth = 0; // Reset max width so that it's not using the MaxWidth -X. Quick hack to allow -X for preset usage.
\r
802 Boolean parsed = int.TryParse(text_width.Text, out width);
\r
803 if (parsed != false)
\r
805 if ((width % 16) != 0)
\r
806 text_width.BackColor = Color.LightCoral;
\r
808 text_width.BackColor = Color.LightGreen;
\r
811 if (lbl_Aspect.Text != "Select a Title")
\r
813 if (drp_anamorphic.Text == "None")
\r
815 int height = hb_common_func.cacluateNonAnamorphicHeight(width, text_top.Value, text_bottom.Value, text_left.Value, text_right.Value, selectedTitle);
\r
816 text_height.Text = height.ToString();
\r
821 private void text_height_TextChanged(object sender, EventArgs e)
\r
823 maxHeight = 0; // Reset max height so that it's not using the MaxHeight -Y. Quick hack to allow -Y for preset usage.
\r
826 Boolean parsed = int.TryParse(text_height.Text, out height);
\r
827 if (parsed != false)
\r
829 if ((height % 16) != 0)
\r
830 text_height.BackColor = Color.LightCoral;
\r
832 text_height.BackColor = Color.LightGreen;
\r
835 private void check_customCrop_CheckedChanged(object sender, EventArgs e)
\r
837 text_left.Enabled = true;
\r
838 text_right.Enabled = true;
\r
839 text_top.Enabled = true;
\r
840 text_bottom.Enabled = true;
\r
841 if (selectedTitle != null)
\r
843 text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();
\r
844 text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();
\r
845 text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();
\r
846 text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();
\r
850 text_left.Text = "0";
\r
851 text_right.Text = "0";
\r
852 text_top.Text = "0";
\r
853 text_bottom.Text = "0";
\r
856 private void check_autoCrop_CheckedChanged(object sender, EventArgs e)
\r
858 text_left.Enabled = false;
\r
859 text_right.Enabled = false;
\r
860 text_top.Enabled = false;
\r
861 text_bottom.Enabled = false;
\r
863 private void drp_anamorphic_SelectedIndexChanged(object sender, EventArgs e)
\r
865 if (drp_anamorphic.SelectedIndex == 1)
\r
867 text_height.BackColor = Color.LightGray;
\r
868 text_width.BackColor = Color.LightGray;
\r
869 text_height.Text = "";
\r
870 text_width.Text = "";
\r
871 text_height.Enabled = false;
\r
872 text_width.Enabled = false;
\r
875 if (drp_anamorphic.SelectedIndex == 2)
\r
877 text_height.Text = "";
\r
878 text_height.Enabled = false;
\r
879 text_height.BackColor = Color.LightGray;
\r
881 text_width.Enabled = true;
\r
882 text_width.BackColor = Color.White;
\r
885 if (drp_anamorphic.SelectedIndex == 0)
\r
887 text_height.BackColor = Color.White;
\r
888 text_width.BackColor = Color.White;
\r
889 text_height.Enabled = true;
\r
890 text_width.Enabled = true;
\r
893 private void slider_deblock_Scroll(object sender, EventArgs e)
\r
895 if (slider_deblock.Value == 4)
\r
896 lbl_deblockVal.Text = "Off";
\r
898 lbl_deblockVal.Text = slider_deblock.Value.ToString();
\r
902 private void drp_track2Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
904 if (drp_track2Audio.SelectedItem.Equals("None"))
\r
906 drp_audbit_2.Enabled = false;
\r
907 drp_audenc_2.Enabled = false;
\r
908 drp_audsr_2.Enabled = false;
\r
909 drp_audmix_2.Enabled = false;
\r
910 trackBar2.Enabled = false;
\r
911 drp_audbit_2.Text = "";
\r
912 drp_audenc_2.Text = "";
\r
913 drp_audsr_2.Text = "";
\r
914 drp_audmix_2.Text = "Automatic";
\r
915 trackBar2.Value = 0;
\r
917 // Disable the 3rd Track.
\r
918 drp_track3Audio.Enabled = false;
\r
919 drp_track3Audio.Text = "None";
\r
920 drp_audbit_3.Text = "";
\r
921 drp_audenc_3.Text = "";
\r
922 drp_audsr_3.Text = "";
\r
923 drp_audmix_3.Text = "Automatic";
\r
924 trackBar3.Value = 0;
\r
928 drp_audbit_2.Enabled = true;
\r
929 drp_audenc_2.Enabled = true;
\r
930 drp_audsr_2.Enabled = true;
\r
931 drp_audmix_2.Enabled = true;
\r
932 trackBar2.Enabled = true;
\r
933 drp_audbit_2.Text = "160";
\r
934 drp_audenc_2.Text = "AAC";
\r
935 drp_audsr_2.Text = "Auto";
\r
936 drp_audmix_2.Text = "Automatic";
\r
938 // Enable the 3rd Track.
\r
939 drp_track3Audio.Enabled = true;
\r
940 drp_audbit_3.Text = "";
\r
941 drp_audenc_3.Text = "";
\r
942 drp_audsr_3.Text = "";
\r
943 drp_audmix_3.Text = "Automatic";
\r
946 private void drp_track3Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
948 if (drp_track3Audio.SelectedItem.Equals("None"))
\r
950 drp_audbit_3.Enabled = false;
\r
951 drp_audenc_3.Enabled = false;
\r
952 drp_audsr_3.Enabled = false;
\r
953 drp_audmix_3.Enabled = false;
\r
954 trackBar3.Enabled = false;
\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
959 trackBar3.Value = 0;
\r
961 // Disable the 4th Track.
\r
962 drp_track4Audio.Enabled = false;
\r
963 drp_track4Audio.Text = "None";
\r
964 drp_audbit_4.Text = "";
\r
965 drp_audenc_4.Text = "";
\r
966 drp_audsr_4.Text = "";
\r
967 drp_audmix_4.Text = "Automatic";
\r
972 drp_audbit_3.Enabled = true;
\r
973 drp_audenc_3.Enabled = true;
\r
974 drp_audsr_3.Enabled = true;
\r
975 drp_audmix_3.Enabled = true;
\r
976 trackBar3.Enabled = true;
\r
977 drp_audbit_3.Text = "160";
\r
978 drp_audenc_3.Text = "AAC";
\r
979 drp_audsr_3.Text = "Auto";
\r
980 drp_audmix_3.Text = "Automatic";
\r
982 // Enable the 4th Track.
\r
983 drp_track4Audio.Enabled = true;
\r
984 drp_audbit_4.Text = "";
\r
985 drp_audenc_4.Text = "";
\r
986 drp_audsr_4.Text = "";
\r
987 drp_audmix_4.Text = "Automatic";
\r
991 private void drp_track4Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
993 if (drp_track4Audio.SelectedItem.Equals("None"))
\r
995 drp_audbit_4.Enabled = false;
\r
996 drp_audenc_4.Enabled = false;
\r
997 drp_audsr_4.Enabled = false;
\r
998 drp_audmix_4.Enabled = false;
\r
999 trackBar4.Enabled = false;
\r
1000 drp_audbit_4.Text = "";
\r
1001 drp_audenc_4.Text = "";
\r
1002 drp_audsr_4.Text = "";
\r
1003 drp_audmix_4.Text = "Automatic";
\r
1004 trackBar4.Value = 0;
\r
1008 drp_audbit_4.Enabled = true;
\r
1009 drp_audenc_4.Enabled = true;
\r
1010 drp_audsr_4.Enabled = true;
\r
1011 drp_audmix_4.Enabled = true;
\r
1012 trackBar4.Enabled = true;
\r
1013 drp_audbit_4.Text = "160";
\r
1014 drp_audenc_4.Text = "AAC";
\r
1015 drp_audsr_4.Text = "Auto";
\r
1016 drp_audmix_4.Text = "Automatic";
\r
1020 private void drp_audmix_1_SelectedIndexChanged(object sender, EventArgs e)
\r
1022 if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))
\r
1023 setBitrateSelections384(drp_audbit_1);
\r
1024 else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete"))
\r
1026 setBitrateSelections160(drp_audbit_1);
\r
1027 drp_audbit_1.Text = "160";
\r
1030 private void drp_audmix_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1032 if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text == "6 Channel Discrete"))
\r
1033 setBitrateSelections384(drp_audbit_2);
\r
1034 else if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text != "6 Channel Discrete"))
\r
1036 setBitrateSelections160(drp_audbit_2);
\r
1037 drp_audbit_2.Text = "160";
\r
1040 private void drp_audmix_3_SelectedIndexChanged(object sender, EventArgs e)
\r
1042 if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text == "6 Channel Discrete"))
\r
1043 setBitrateSelections384(drp_audbit_3);
\r
1044 else if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text != "6 Channel Discrete"))
\r
1046 setBitrateSelections160(drp_audbit_3);
\r
1047 drp_audbit_3.Text = "160";
\r
1050 private void drp_audmix_4_SelectedIndexChanged(object sender, EventArgs e)
\r
1052 if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text == "6 Channel Discrete"))
\r
1053 setBitrateSelections384(drp_audbit_4);
\r
1054 else if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text != "6 Channel Discrete"))
\r
1056 setBitrateSelections160(drp_audbit_4);
\r
1057 drp_audbit_4.Text = "160";
\r
1061 private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)
\r
1063 if (drp_audenc_1.Text == "AC3")
\r
1065 drp_audmix_1.Enabled = false;
\r
1066 drp_audbit_1.Enabled = false;
\r
1067 drp_audsr_1.Enabled = false;
\r
1071 drp_audmix_1.Enabled = true;
\r
1072 drp_audbit_1.Enabled = true;
\r
1073 drp_audsr_1.Enabled = true;
\r
1075 drp_audmix_1.Text = "Automatic";
\r
1076 drp_audbit_1.Text = "160";
\r
1077 drp_audsr_1.Text = "Auto";
\r
1081 if (drp_audenc_1.Text == "AAC")
\r
1083 drp_audmix_1.Items.Clear();
\r
1084 drp_audmix_1.Items.Add("Mono");
\r
1085 drp_audmix_1.Items.Add("Stereo");
\r
1086 drp_audmix_1.Items.Add("Dolby Surround");
\r
1087 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1088 drp_audmix_1.Items.Add("6 Channel Discrete");
\r
1090 setBitrateSelections160(drp_audbit_1);
\r
1094 drp_audmix_1.Items.Clear();
\r
1095 drp_audmix_1.Items.Add("Stereo");
\r
1096 drp_audmix_1.Items.Add("Dolby Surround");
\r
1097 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1099 setBitrateSelections320(drp_audbit_1);
\r
1102 private void drp_audenc_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1104 if (drp_audenc_2.Text == "AC3")
\r
1106 drp_audmix_2.Enabled = false;
\r
1107 drp_audbit_2.Enabled = false;
\r
1108 drp_audsr_2.Enabled = false;
\r
1110 drp_audmix_2.Text = "Automatic";
\r
1111 drp_audbit_2.Text = "160";
\r
1112 drp_audsr_2.Text = "Auto";
\r
1116 // Just make sure not to re-enable the following boxes if the track2 is none
\r
1117 if (drp_track2Audio.Text != "None")
\r
1119 drp_audmix_2.Enabled = true;
\r
1120 drp_audbit_2.Enabled = true;
\r
1121 drp_audsr_2.Enabled = true;
\r
1123 drp_audmix_2.Text = "Automatic";
\r
1124 drp_audbit_2.Text = "160";
\r
1125 drp_audsr_2.Text = "Auto";
\r
1129 if (drp_audenc_2.Text == "AAC")
\r
1131 drp_audmix_2.Items.Clear();
\r
1132 drp_audmix_2.Items.Add("Mono");
\r
1133 drp_audmix_2.Items.Add("Stereo");
\r
1134 drp_audmix_2.Items.Add("Dolby Surround");
\r
1135 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1136 drp_audmix_2.Items.Add("6 Channel Discrete");
\r
1138 setBitrateSelections160(drp_audbit_2);
\r
1142 drp_audmix_2.Items.Clear();
\r
1143 drp_audmix_2.Items.Add("Stereo");
\r
1144 drp_audmix_2.Items.Add("Dolby Surround");
\r
1145 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1147 setBitrateSelections320(drp_audbit_2);
\r
1150 private void drp_audenc_3_SelectedIndexChanged(object sender, EventArgs e)
\r
1152 if (drp_audenc_3.Text == "AC3")
\r
1154 drp_audmix_3.Enabled = false;
\r
1155 drp_audbit_3.Enabled = false;
\r
1156 drp_audsr_3.Enabled = false;
\r
1158 drp_audmix_3.Text = "Automatic";
\r
1159 drp_audbit_3.Text = "160";
\r
1160 drp_audsr_3.Text = "Auto";
\r
1164 // Just make sure not to re-enable the following boxes if the track above is none
\r
1165 if (drp_track2Audio.Text != "None")
\r
1167 drp_audmix_3.Enabled = true;
\r
1168 drp_audbit_3.Enabled = true;
\r
1169 drp_audsr_3.Enabled = true;
\r
1171 drp_audmix_3.Text = "Automatic";
\r
1172 drp_audbit_3.Text = "160";
\r
1173 drp_audsr_3.Text = "Auto";
\r
1178 if (drp_audenc_3.Text == "AAC")
\r
1180 drp_audmix_3.Items.Clear();
\r
1181 drp_audmix_3.Items.Add("Mono");
\r
1182 drp_audmix_3.Items.Add("Stereo");
\r
1183 drp_audmix_3.Items.Add("Dolby Surround");
\r
1184 drp_audmix_3.Items.Add("Dolby Pro Logic II");
\r
1185 drp_audmix_3.Items.Add("6 Channel Discrete");
\r
1187 setBitrateSelections160(drp_audbit_3);
\r
1191 drp_audmix_3.Items.Clear();
\r
1192 drp_audmix_3.Items.Add("Stereo");
\r
1193 drp_audmix_3.Items.Add("Dolby Surround");
\r
1194 drp_audmix_3.Items.Add("Dolby Pro Logic II");
\r
1196 setBitrateSelections320(drp_audbit_3);
\r
1199 private void drp_audenc_4_SelectedIndexChanged(object sender, EventArgs e)
\r
1201 if (drp_audenc_4.Text == "AC3")
\r
1203 drp_audmix_4.Enabled = false;
\r
1204 drp_audbit_4.Enabled = false;
\r
1205 drp_audsr_4.Enabled = false;
\r
1207 drp_audmix_4.Text = "Automatic";
\r
1208 drp_audbit_4.Text = "160";
\r
1209 drp_audsr_4.Text = "Auto";
\r
1213 // Just make sure not to re-enable the following boxes if the track above is none
\r
1214 if (drp_track2Audio.Text != "None")
\r
1216 drp_audmix_4.Enabled = true;
\r
1217 drp_audbit_4.Enabled = true;
\r
1218 drp_audsr_4.Enabled = true;
\r
1220 drp_audmix_4.Text = "Automatic";
\r
1221 drp_audbit_4.Text = "160";
\r
1222 drp_audsr_4.Text = "Auto";
\r
1227 if (drp_audenc_4.Text == "AAC")
\r
1229 drp_audmix_4.Items.Clear();
\r
1230 drp_audmix_4.Items.Add("Mono");
\r
1231 drp_audmix_4.Items.Add("Stereo");
\r
1232 drp_audmix_4.Items.Add("Dolby Surround");
\r
1233 drp_audmix_4.Items.Add("Dolby Pro Logic II");
\r
1234 drp_audmix_4.Items.Add("6 Channel Discrete");
\r
1236 setBitrateSelections160(drp_audbit_4);
\r
1240 drp_audmix_4.Items.Clear();
\r
1241 drp_audmix_4.Items.Add("Stereo");
\r
1242 drp_audmix_4.Items.Add("Dolby Surround");
\r
1243 drp_audmix_4.Items.Add("Dolby Pro Logic II");
\r
1245 setBitrateSelections320(drp_audbit_4);
\r
1249 private void trackBar1_Scroll(object sender, EventArgs e)
\r
1251 double value = trackBar1.Value / 10.0;
\r
1254 lbl_drc1.Text = value.ToString();
\r
1256 private void trackBar2_Scroll(object sender, EventArgs e)
\r
1258 double value = trackBar2.Value / 10.0;
\r
1261 lbl_drc2.Text = value.ToString();
\r
1263 private void trackBar3_Scroll(object sender, EventArgs e)
\r
1265 double value = trackBar3.Value / 10.0;
\r
1268 lbl_drc3.Text = value.ToString();
\r
1270 private void trackBar4_Scroll(object sender, EventArgs e)
\r
1272 double value = trackBar4.Value / 10.0;
\r
1275 lbl_drc4.Text = value.ToString();
\r
1278 private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
1280 if (drp_subtitle.Text.Contains("None"))
\r
1282 check_forced.Enabled = false;
\r
1283 check_forced.Checked = false;
\r
1286 check_forced.Enabled = true;
\r
1289 // Chapter Marker Tab
\r
1290 private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)
\r
1292 if (Check_ChapterMarkers.Checked)
\r
1294 string destination = text_destination.Text;
\r
1295 destination = destination.Replace(".mp4", ".m4v");
\r
1296 text_destination.Text = destination;
\r
1297 data_chpt.Rows.Clear();
\r
1298 data_chpt.Enabled = true;
\r
1299 DataGridView chapterGridView = hb_common_func.chapterNaming(data_chpt, drop_chapterStart.Text, drop_chapterFinish.Text);
\r
1300 if (chapterGridView != null)
\r
1301 data_chpt = chapterGridView;
\r
1305 string destination = text_destination.Text;
\r
1306 destination = destination.Replace(".m4v", ".mp4");
\r
1307 text_destination.Text = destination;
\r
1308 data_chpt.Rows.Clear();
\r
1309 data_chpt.Enabled = false;
\r
1314 private void drop_refFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1316 x264PanelFunctions.on_x264_WidgetChange("ref", this);
\r
1318 private void check_mixedReferences_CheckedChanged(object sender, EventArgs e)
\r
1320 x264PanelFunctions.on_x264_WidgetChange("mixed-refs", this);
\r
1322 private void drop_bFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1324 x264PanelFunctions.on_x264_WidgetChange("bframes", this);
\r
1326 private void drop_directPrediction_SelectedIndexChanged(object sender, EventArgs e)
\r
1328 x264PanelFunctions.on_x264_WidgetChange("direct", this);
\r
1330 private void check_weightedBFrames_CheckedChanged(object sender, EventArgs e)
\r
1332 x264PanelFunctions.on_x264_WidgetChange("weightb", this);
\r
1334 private void check_bFrameDistortion_CheckedChanged(object sender, EventArgs e)
\r
1336 x264PanelFunctions.on_x264_WidgetChange("brdo", this);
\r
1338 private void check_BidirectionalRefinement_CheckedChanged(object sender, EventArgs e)
\r
1340 x264PanelFunctions.on_x264_WidgetChange("bime", this);
\r
1342 private void check_pyrmidalBFrames_CheckedChanged(object sender, EventArgs e)
\r
1344 x264PanelFunctions.on_x264_WidgetChange("b-pyramid", this);
\r
1346 private void drop_MotionEstimationMethod_SelectedIndexChanged(object sender, EventArgs e)
\r
1348 x264PanelFunctions.on_x264_WidgetChange("me", this);
\r
1350 private void drop_MotionEstimationRange_SelectedIndexChanged(object sender, EventArgs e)
\r
1352 x264PanelFunctions.on_x264_WidgetChange("merange", this);
\r
1354 private void drop_subpixelMotionEstimation_SelectedIndexChanged(object sender, EventArgs e)
\r
1356 x264PanelFunctions.on_x264_WidgetChange("subq", this);
\r
1358 private void drop_analysis_SelectedIndexChanged(object sender, EventArgs e)
\r
1360 x264PanelFunctions.on_x264_WidgetChange("analyse", this);
\r
1362 private void check_8x8DCT_CheckedChanged(object sender, EventArgs e)
\r
1364 x264PanelFunctions.on_x264_WidgetChange("8x8dct", this);
\r
1366 private void drop_deblockAlpha_SelectedIndexChanged(object sender, EventArgs e)
\r
1368 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1371 private void drop_deblockBeta_SelectedIndexChanged(object sender, EventArgs e)
\r
1373 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1376 private void drop_trellis_SelectedIndexChanged(object sender, EventArgs e)
\r
1378 x264PanelFunctions.on_x264_WidgetChange("trellis", this);
\r
1380 private void check_noFastPSkip_CheckedChanged(object sender, EventArgs e)
\r
1382 x264PanelFunctions.on_x264_WidgetChange("no-fast-pskip", this);
\r
1384 private void check_noDCTDecimate_CheckedChanged(object sender, EventArgs e)
\r
1386 x264PanelFunctions.on_x264_WidgetChange("no-dct-decimate", this);
\r
1389 private void check_Cabac_CheckedChanged(object sender, EventArgs e)
\r
1392 x264PanelFunctions.on_x264_WidgetChange("cabac", this);
\r
1395 private void rtf_x264Query_TextChanged(object sender, EventArgs e)
\r
1397 if (rtf_x264Query.Text.EndsWith("\n"))
\r
1399 rtf_x264Query.Text = rtf_x264Query.Text.Replace("\n", "");
\r
1400 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1401 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1403 if (rtf_x264Query.Text == string.Empty)
\r
1404 x264PanelFunctions.reset2Defaults(this);
\r
1407 private void btn_reset_Click(object sender, EventArgs e)
\r
1409 rtf_x264Query.Text = "";
\r
1410 x264PanelFunctions.reset2Defaults(this);
\r
1413 // Query Editor Tab
\r
1414 private void btn_generate_Query_Click(object sender, EventArgs e)
\r
1416 rtf_query.Text = queryGen.GenerateTheQuery(this);
\r
1418 private void btn_clear_Click(object sender, EventArgs e)
\r
1420 rtf_query.Clear();
\r
1424 private void btn_addPreset_Click(object sender, EventArgs e)
\r
1426 // Remember each nodes expanded status so we can reload it
\r
1427 List<Boolean> nodeStatus = saveTreeViewState();
\r
1428 nodeStatus.Add(true);
\r
1430 // Now add the new preset
\r
1431 Form preset = new frmAddPreset(this, queryGen.GenerateTheQuery(this), presetHandler);
\r
1432 preset.ShowDialog();
\r
1434 // Now reload the TreeView states
\r
1435 loadTreeViewStates(nodeStatus);
\r
1437 private void btn_removePreset_Click(object sender, EventArgs e)
\r
1439 DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1440 if (result == DialogResult.Yes)
\r
1442 if (treeView_presets.SelectedNode != null)
\r
1443 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
1445 // Remember each nodes expanded status so we can reload it
\r
1446 List<Boolean> nodeStatus = saveTreeViewState();
\r
1448 // Now reload the preset panel
\r
1449 loadPresetPanel();
\r
1451 // Now reload the TreeView states
\r
1452 loadTreeViewStates(nodeStatus);
\r
1454 treeView_presets.Select();
\r
1456 private void btn_setDefault_Click(object sender, EventArgs e)
\r
1458 String query = queryGen.GenerateTheQuery(this);
\r
1459 Properties.Settings.Default.defaultUserSettings = query;
\r
1460 // Save the new default Settings
\r
1461 Properties.Settings.Default.Save();
\r
1462 MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
1464 private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)
\r
1466 // Ok, so, we've selected a preset. Now we want to load it.
\r
1467 string presetName = treeView_presets.SelectedNode.Text;
\r
1468 string query = presetHandler.getCliForPreset(presetName);
\r
1470 if (query != null)
\r
1472 //Ok, Reset all the H264 widgets before changing the preset
\r
1473 x264PanelFunctions.reset2Defaults(this);
\r
1475 // Send the query from the file to the Query Parser class
\r
1476 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(query);
\r
1478 // Now load the preset
\r
1479 presetLoader.presetLoader(this, presetQuery, presetName);
\r
1481 // The x264 widgets will need updated, so do this now:
\r
1482 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1483 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1486 private void treeView_presets_deleteKey(object sender, KeyEventArgs e)
\r
1488 if (e.KeyCode == Keys.Delete)
\r
1490 DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1491 if (result == DialogResult.Yes)
\r
1493 if (treeView_presets.SelectedNode != null)
\r
1494 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
1496 // Remember each nodes expanded status so we can reload it
\r
1497 List<Boolean> nodeStatus = new List<Boolean>();
\r
1498 foreach (TreeNode node in treeView_presets.Nodes)
\r
1499 nodeStatus.Add(node.IsExpanded);
\r
1501 // Now reload the preset panel
\r
1502 loadPresetPanel();
\r
1504 // And finally, re-expand any of the nodes if required
\r
1506 foreach (TreeNode node in treeView_presets.Nodes)
\r
1508 if (nodeStatus[i] == true)
\r
1519 #region Preset Expand / Collaspe
\r
1520 private List<Boolean> saveTreeViewState()
\r
1522 // Remember each nodes expanded status so we can reload it
\r
1523 List<Boolean> nodeStatus = new List<Boolean>();
\r
1524 foreach (TreeNode node in treeView_presets.Nodes)
\r
1526 nodeStatus.Add(node.IsExpanded);
\r
1527 foreach (TreeNode subNode in node.Nodes)
\r
1528 nodeStatus.Add(node.IsExpanded);
\r
1530 return nodeStatus;
\r
1533 private void loadTreeViewStates(List<Boolean> nodeStatus)
\r
1535 // And finally, re-expand any of the nodes if required
\r
1537 foreach (TreeNode node in treeView_presets.Nodes)
\r
1539 if (nodeStatus[i] == true)
\r
1542 foreach (TreeNode subNode in node.Nodes)
\r
1544 if (nodeStatus[i] == true)
\r
1554 private void loadNormalPreset()
\r
1556 foreach (TreeNode treenode in treeView_presets.Nodes)
\r
1558 if (treenode.Text.ToString().Equals("Normal"))
\r
1559 treeView_presets.SelectedNode = treeView_presets.Nodes[treenode.Index];
\r
1564 #region Drive Detection
\r
1565 // Source Button Drive Detection
\r
1566 private delegate void ProgressUpdateHandler();
\r
1567 private void getDriveInfoThread()
\r
1571 if (this.InvokeRequired)
\r
1573 this.BeginInvoke(new ProgressUpdateHandler(getDriveInfoThread));
\r
1577 Boolean foundDrive = false;
\r
1578 DriveInfo[] theCollectionOfDrives = DriveInfo.GetDrives();
\r
1579 foreach (DriveInfo curDrive in theCollectionOfDrives)
\r
1581 if (curDrive.DriveType == DriveType.CDRom)
\r
1583 if (curDrive.IsReady)
\r
1585 if (File.Exists(curDrive.RootDirectory.ToString() + "VIDEO_TS\\VIDEO_TS.IFO"))
\r
1586 mnu_dvd_drive.Text = curDrive.RootDirectory.ToString() + "VIDEO_TS (" + curDrive.VolumeLabel + ")";
\r
1588 mnu_dvd_drive.Text = "[No DVD Drive Ready]";
\r
1590 foundDrive = true;
\r
1596 if (foundDrive == false)
\r
1597 mnu_dvd_drive.Text = "[No DVD Drive Ready]";
\r
1601 mnu_dvd_drive.Text = "[No DVD Drive Ready / Found]";
\r
1606 #region Audio Panel Stuff
\r
1607 public void setAudioByContainer(String path)
\r
1609 string oldval = "";
\r
1611 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
1613 oldval = drp_audenc_1.Text;
\r
1614 drp_audenc_1.Items.Clear();
\r
1615 drp_audenc_1.Items.Add("AAC");
\r
1616 drp_audenc_1.Items.Add("AC3");
\r
1617 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1618 drp_audenc_1.SelectedIndex = 0;
\r
1620 oldval = drp_audenc_2.Text;
\r
1621 drp_audenc_2.Items.Clear();
\r
1622 drp_audenc_2.Items.Add("AAC");
\r
1623 drp_audenc_2.Items.Add("AC3");
\r
1624 if (drp_audenc_2.Enabled)
\r
1626 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1627 drp_audenc_2.SelectedIndex = 0;
\r
1630 oldval = drp_audenc_3.Text;
\r
1631 drp_audenc_3.Items.Clear();
\r
1632 drp_audenc_3.Items.Add("AAC");
\r
1633 drp_audenc_3.Items.Add("AC3");
\r
1634 if (drp_audenc_3.Enabled)
\r
1636 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1637 drp_audenc_3.SelectedIndex = 0;
\r
1640 oldval = drp_audenc_4.Text;
\r
1641 drp_audenc_4.Items.Clear();
\r
1642 drp_audenc_4.Items.Add("AAC");
\r
1643 drp_audenc_4.Items.Add("AC3");
\r
1644 if (drp_audenc_4.Enabled)
\r
1646 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1647 drp_audenc_4.SelectedIndex = 0;
\r
1650 else if (path.EndsWith(".avi"))
\r
1652 oldval = drp_audenc_1.Text;
\r
1653 drp_audenc_1.Items.Clear();
\r
1654 drp_audenc_1.Items.Add("MP3");
\r
1655 drp_audenc_1.Items.Add("AC3");
\r
1656 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1657 drp_audenc_1.SelectedIndex = 0;
\r
1659 oldval = drp_audenc_2.Text;
\r
1660 drp_audenc_2.Items.Clear();
\r
1661 drp_audenc_2.Items.Add("MP3");
\r
1662 drp_audenc_2.Items.Add("AC3");
\r
1663 if (drp_audenc_2.Enabled)
\r
1665 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1666 drp_audenc_2.SelectedIndex = 0;
\r
1670 oldval = drp_audenc_3.Text;
\r
1671 drp_audenc_3.Items.Clear();
\r
1672 drp_audenc_3.Items.Add("MP3");
\r
1673 drp_audenc_3.Items.Add("AC3");
\r
1674 if (drp_audenc_3.Enabled)
\r
1676 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1677 drp_audenc_3.SelectedIndex = 0;
\r
1680 oldval = drp_audenc_4.Text;
\r
1681 drp_audenc_4.Items.Clear();
\r
1682 drp_audenc_4.Items.Add("MP3");
\r
1683 drp_audenc_4.Items.Add("AC3");
\r
1684 if (drp_audenc_4.Enabled)
\r
1686 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1687 drp_audenc_4.SelectedIndex = 0;
\r
1690 else if (path.EndsWith(".ogm"))
\r
1692 drp_audenc_1.Items.Clear();
\r
1693 drp_audenc_1.Items.Add("Vorbis");
\r
1694 drp_audenc_1.SelectedIndex = 0;
\r
1696 drp_audenc_2.Items.Clear();
\r
1697 drp_audenc_2.Items.Add("Vorbis");
\r
1698 if (drp_audenc_2.Enabled)
\r
1699 drp_audenc_2.SelectedIndex = 0;
\r
1701 drp_audenc_3.Items.Clear();
\r
1702 drp_audenc_3.Items.Add("Vorbis");
\r
1703 if (drp_audenc_3.Enabled)
\r
1704 drp_audenc_3.SelectedIndex = 0;
\r
1706 drp_audenc_4.Items.Clear();
\r
1707 drp_audenc_4.Items.Add("Vorbis");
\r
1708 if (drp_audenc_4.Enabled)
\r
1709 drp_audenc_4.SelectedIndex = 0;
\r
1711 else if (path.EndsWith(".mkv"))
\r
1713 drp_audenc_1.Items.Clear();
\r
1714 drp_audenc_1.Items.Add("AAC");
\r
1715 drp_audenc_1.Items.Add("MP3");
\r
1716 drp_audenc_1.Items.Add("AC3");
\r
1717 drp_audenc_1.Items.Add("Vorbis");
\r
1718 if (drp_audenc_1.Text == string.Empty)
\r
1719 drp_audenc_1.SelectedIndex = 0;
\r
1722 drp_audenc_2.Items.Clear();
\r
1723 drp_audenc_2.Items.Add("AAC");
\r
1724 drp_audenc_2.Items.Add("MP3");
\r
1725 drp_audenc_2.Items.Add("AC3");
\r
1726 drp_audenc_2.Items.Add("Vorbis");
\r
1727 if (drp_audenc_2.Enabled)
\r
1729 if (drp_audenc_2.Text == string.Empty)
\r
1730 drp_audenc_2.SelectedIndex = 0;
\r
1733 drp_audenc_3.Items.Clear();
\r
1734 drp_audenc_3.Items.Add("AAC");
\r
1735 drp_audenc_3.Items.Add("MP3");
\r
1736 drp_audenc_3.Items.Add("AC3");
\r
1737 drp_audenc_3.Items.Add("Vorbis");
\r
1738 if (drp_audenc_3.Enabled)
\r
1740 if (drp_audenc_3.Text == string.Empty)
\r
1741 drp_audenc_3.SelectedIndex = 0;
\r
1744 drp_audenc_4.Items.Clear();
\r
1745 drp_audenc_4.Items.Add("AAC");
\r
1746 drp_audenc_4.Items.Add("MP3");
\r
1747 drp_audenc_4.Items.Add("AC3");
\r
1748 drp_audenc_4.Items.Add("Vorbis");
\r
1749 if (drp_audenc_4.Enabled)
\r
1751 if (drp_audenc_4.Text == string.Empty)
\r
1752 drp_audenc_4.SelectedIndex = 0;
\r
1756 public void setVideoByContainer(String path)
\r
1758 string oldval = "";
\r
1760 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
1762 oldval = drp_videoEncoder.Text;
\r
1763 drp_videoEncoder.Items.Clear();
\r
1764 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1765 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1766 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1767 if (oldval == "VP3 (Theora)")
\r
1768 drp_videoEncoder.SelectedIndex = 2;
\r
1770 drp_videoEncoder.Text = oldval;
\r
1773 else if (path.EndsWith(".avi"))
\r
1775 oldval = drp_videoEncoder.Text;
\r
1776 drp_videoEncoder.Items.Clear();
\r
1777 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1778 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1779 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1780 if (oldval == "VP3 (Theora)")
\r
1781 drp_videoEncoder.SelectedIndex = 2;
\r
1783 drp_videoEncoder.Text = oldval;
\r
1785 else if (path.EndsWith(".ogm"))
\r
1787 oldval = drp_videoEncoder.Text;
\r
1788 drp_videoEncoder.Items.Clear();
\r
1789 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1790 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1791 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1792 if (oldval == "H.264 (x264)")
\r
1793 drp_videoEncoder.SelectedIndex = 2;
\r
1795 drp_videoEncoder.Text = oldval;
\r
1797 else if (path.EndsWith(".mkv"))
\r
1799 oldval = drp_videoEncoder.Text;
\r
1800 drp_videoEncoder.Items.Clear();
\r
1801 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1802 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1803 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1804 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1805 drp_videoEncoder.Text = oldval;
\r
1808 public void setBitrateSelections384(ComboBox dropDown)
\r
1810 dropDown.Items.Clear();
\r
1811 dropDown.Items.Add("32");
\r
1812 dropDown.Items.Add("40");
\r
1813 dropDown.Items.Add("48");
\r
1814 dropDown.Items.Add("56");
\r
1815 dropDown.Items.Add("64");
\r
1816 dropDown.Items.Add("80");
\r
1817 dropDown.Items.Add("86");
\r
1818 dropDown.Items.Add("112");
\r
1819 dropDown.Items.Add("128");
\r
1820 dropDown.Items.Add("160");
\r
1821 dropDown.Items.Add("192");
\r
1822 dropDown.Items.Add("224");
\r
1823 dropDown.Items.Add("256");
\r
1824 dropDown.Items.Add("320");
\r
1825 dropDown.Items.Add("384");
\r
1827 public void setBitrateSelections320(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
1845 public void setBitrateSelections160(ComboBox dropDown)
\r
1847 dropDown.Items.Clear();
\r
1848 dropDown.Items.Add("32");
\r
1849 dropDown.Items.Add("40");
\r
1850 dropDown.Items.Add("48");
\r
1851 dropDown.Items.Add("56");
\r
1852 dropDown.Items.Add("64");
\r
1853 dropDown.Items.Add("80");
\r
1854 dropDown.Items.Add("86");
\r
1855 dropDown.Items.Add("112");
\r
1856 dropDown.Items.Add("128");
\r
1857 dropDown.Items.Add("160");
\r
1864 private delegate void UpdateUIHandler();
\r
1866 // Encoding Functions
\r
1867 private void procMonitor(object state)
\r
1869 // Make sure we are not already encoding and if we are then display an error.
\r
1870 if (hbProc != null)
\r
1871 hbProc.CloseMainWindow();
\r
1874 hbProc = cliObj.runCli(this, (string)state);
\r
1875 hbProc.WaitForExit();
\r
1876 setEncodeLabelFinished();
\r
1879 // If the window is minimized, display the notification in a popup.
\r
1880 if (FormWindowState.Minimized == this.WindowState)
\r
1882 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
1883 notifyIcon.ShowBalloonTip(500);
\r
1886 // After the encode is done, we may want to shutdown, suspend etc.
\r
1887 cliObj.copyLog((string)state);
\r
1888 cliObj.afterEncodeAction();
\r
1891 private void setEncodeLabelFinished()
\r
1893 if (this.InvokeRequired)
\r
1895 this.BeginInvoke(new UpdateUIHandler(setEncodeLabelFinished));
\r
1898 lbl_encode.Text = "Encoding Finished";
\r
1899 btn_start.Text = "Start";
\r
1900 btn_start.ToolTipText = "Start the encoding process";
\r
1901 btn_start.Image = Properties.Resources.Play;
\r
1906 #region Public Methods
\r
1909 /// Is the mainWindow currently monitoring an encoding session
\r
1911 /// <returns>boolean</returns>
\r
1912 public Boolean isEncoding()
\r
1914 if (hbProc == null)
\r
1921 /// Action can be "encode" or "scan"
\r
1922 /// Set the last action varible in the main window.
\r
1923 /// This is used to control which log file is displayed when the Activity window is displayed.
\r
1925 /// <param name="last">String</param>
\r
1926 public void setLastAction(string last)
\r
1928 this.lastAction = last;
\r
1932 /// DVD parseing. Pass in a parsed DVD.
\r
1934 /// <param name="dvd"></param>
\r
1935 public void setStreamReader(Parsing.DVD dvd)
\r
1937 this.thisDVD = dvd;
\r
1941 /// Reload the preset panel display
\r
1943 public void loadPresetPanel()
\r
1945 presetHandler.loadPresetData();
\r
1947 treeView_presets.Nodes.Clear();
\r
1949 List<Presets.Preset> presetNameList = new List<Presets.Preset>();
\r
1950 List<string> presetNames = new List<string>();
\r
1951 TreeNode preset_treeview = new TreeNode();
\r
1953 TreeNode rootNode = new TreeNode();
\r
1954 TreeNode rootNodeTwo = new TreeNode();
\r
1955 TreeNode childNode = new TreeNode();
\r
1956 int workingLevel = 0;
\r
1957 string previousCategory = String.Empty;
\r
1958 string currentCategory = String.Empty;
\r
1960 presetNameList = presetHandler.getBuildInPresets();
\r
1961 if (presetNameList.Count != 0)
\r
1963 foreach (Presets.Preset preset in presetNameList)
\r
1965 // Handle Root Nodes
\r
1967 // First Case - No presets have been read yet so setup the root category
\r
1968 if (preset.Level == 1 && currentCategory == String.Empty)
\r
1970 rootNode = new TreeNode(preset.Category);
\r
1971 workingLevel = preset.Level;
\r
1972 currentCategory = preset.Category;
\r
1973 previousCategory = preset.Category;
\r
1976 // Second Case - This is the first sub child node.
\r
1977 if (preset.Level == 2 && workingLevel == 1 && currentCategory != preset.Category)
\r
1979 rootNodeTwo = new TreeNode(preset.Category);
\r
1980 workingLevel = preset.Level;
\r
1981 currentCategory = preset.Category;
\r
1982 rootNode.Nodes.Add(rootNodeTwo);
\r
1985 // Third Case - Any presets the sub presets detected in the above if statment.
\r
1986 if (preset.Level == 1 && workingLevel == 2 && previousCategory == preset.Category)
\r
1988 workingLevel = preset.Level;
\r
1989 currentCategory = preset.Category;
\r
1992 // Fourth Case - We've finished this root node and are onto the next root node.
\r
1993 if (preset.Level == 1 && workingLevel == 1 && previousCategory != preset.Category)
\r
1995 treeView_presets.Nodes.Add(rootNode); // Add the finished node
\r
1997 rootNode = new TreeNode(preset.Category);
\r
1998 workingLevel = preset.Level;
\r
1999 currentCategory = preset.Category;
\r
2000 previousCategory = preset.Category;
\r
2003 // Handle Child Nodes
\r
2004 // Add First level child nodes to the current root node
\r
2005 if (preset.Level == 1 && workingLevel == 1 && currentCategory == preset.Category)
\r
2007 childNode = new TreeNode(preset.Name);
\r
2008 rootNode.Nodes.Add(childNode);
\r
2011 // Add Second level child nodes to the current sub root node
\r
2012 if (preset.Level == 2 && workingLevel == 2 && currentCategory == preset.Category)
\r
2014 childNode = new TreeNode(preset.Name);
\r
2015 rootNodeTwo.Nodes.Add(childNode);
\r
2019 // Add the final root node which does not get added above.
\r
2020 treeView_presets.Nodes.Add(rootNode);
\r
2025 presetNames = presetHandler.getUserPresetNames();
\r
2026 foreach (string preset in presetNames)
\r
2028 preset_treeview = new TreeNode(preset);
\r
2029 preset_treeview.ForeColor = Color.Black;
\r
2031 // Now Fill Out List View with Items
\r
2032 treeView_presets.Nodes.Add(preset_treeview);
\r
2038 #region Taskbar Tray Icon
\r
2039 private void frmMain_Resize(object sender, EventArgs e)
\r
2041 if (FormWindowState.Minimized == this.WindowState)
\r
2043 notifyIcon.Visible = true;
\r
2044 if (lbl_encode.Text != "")
\r
2045 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
2047 notifyIcon.BalloonTipText = "Not Encoding";
\r
2048 notifyIcon.ShowBalloonTip(500);
\r
2051 else if (FormWindowState.Normal == this.WindowState)
\r
2052 notifyIcon.Visible = false;
\r
2054 private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
\r
2056 this.Visible = true;
\r
2058 this.WindowState = FormWindowState.Normal;
\r
2059 notifyIcon.Visible = false;
\r
2061 private void btn_minimize_Click(object sender, EventArgs e)
\r
2063 this.WindowState = FormWindowState.Minimized;
\r
2065 private void btn_restore_Click(object sender, EventArgs e)
\r
2067 this.Visible = true;
\r
2069 this.WindowState = FormWindowState.Normal;
\r
2070 notifyIcon.Visible = false;
\r
2074 // This is the END of the road ------------------------------------------------------------------------------
\r