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 = "
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
\82Ì
\8eæ
\93¾
\92\86...";
\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 = "
\83A
\83b
\83v
\83f
\81[
\83g
\82Ì
\8am
\94F
\92\86...";
\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 = "GUI
\82Ì
\90Ý
\92è
\92\86...";
\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 = "
\83\8d\81[
\83h
\8a®
\97¹
\81I";
\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("
\83L
\83\85\81[
\82É
\96¢
\8a®
\97¹
\82Ì
\83A
\83C
\83e
\83\80\82ª
\8ec
\82³
\82ê
\82Ä
\82¢
\82Ü
\82·
\81B
\82±
\82ê
\82ç
\82ð
\95\9c\8c³
\82µ
\82Ü
\82·
\82©
\81H", "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("presets.dat
\82Ì
\83\8d\81[
\83h
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B
\81u
\83v
\83\8a\83Z
\83b
\83g
\81v
\83\81\83j
\83\85\81[
\82©
\82ç
\81u
\91g
\82Ý
\8d\9e\82Ý
\83v
\83\8a\83Z
\83b
\83g
\82Ì
\83A
\83b
\83v
\83f
\81[
\83g
\81v
\82ð
\8eÀ
\8ds
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B\n
\82Ü
\82½
\81AVista
\82Ì
\8fê
\8d\87\8aÇ
\97\9d\8eÒ
\83\82\81[
\83h
\82Å
\8eÀ
\8ds
\82µ
\82Ä
\82¢
\82é
\82©
\82Ç
\82¤
\82©
\8am
\94F
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
241 MessageBox.Show("
\91g
\82Ý
\8d\9e\82Ý
\83v
\83\8a\83Z
\83b
\83g
\82ð
\83A
\83b
\83v
\83f
\81[
\83g
\82µ
\82Ü
\82µ
\82½
\81I", "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("
\83v
\83\8a\83Z
\83b
\83g
\82Ì
\8dí
\8f\9c\8f\88\97\9d\82Å
\83G
\83\89\81[
\82ª
\94
\90¶
\82µ
\82Ü
\82µ
\82½
\81B\nWindows Vista
\82Ì
\8fê
\8d\87\81A
\8aÇ
\97\9d\8eÒ
\83\82\81[
\83h
\82Å
\8eÀ
\8ds
\82µ
\82Ä
\82
\82¾
\82³
\82¢\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
288 Process.Start("http://sourceforge.jp/projects/handbrake-jp/wiki/Forum");
\r
290 private void mnu_user_guide_Click(object sender, EventArgs e)
\r
292 // Process.Start("http://trac.handbrake.fr/wiki/HandBrakeGuide");
\r
293 Process.Start("http://sourceforge.jp/projects/handbrake-jp/wiki/Guide");
\r
295 private void mnu_handbrake_home_Click(object sender, EventArgs e)
\r
297 // Process.Start("http://handbrake.fr");
\r
298 Process.Start("http://sourceforge.jp/projects/handbrake-jp/wiki/");
\r
300 private void mnu_UpdateCheck_Click(object sender, EventArgs e)
\r
302 Boolean update = hb_common_func.updateCheck(true);
\r
303 if (update == true)
\r
305 frmUpdater updateWindow = new frmUpdater();
\r
306 updateWindow.Show();
\r
309 MessageBox.Show("
\8c»
\8dÝ
\97\98\97p
\89Â
\94\
\82È
\83A
\83b
\83v
\83f
\81[
\83g
\82Í
\82 \82è
\82Ü
\82¹
\82ñ", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
311 private void mnu_about_Click(object sender, EventArgs e)
\r
313 Form About = new frmAbout();
\r
314 About.ShowDialog();
\r
318 #region Preset Menu
\r
319 private void pmnu_expandAll_Click(object sender, EventArgs e)
\r
321 treeView_presets.ExpandAll();
\r
323 private void pmnu_collapse_Click(object sender, EventArgs e)
\r
325 treeView_presets.CollapseAll();
\r
327 private void treeview_presets_mouseUp(object sender, MouseEventArgs e)
\r
329 if (e.Button == MouseButtons.Right)
\r
330 treeView_presets.SelectedNode = treeView_presets.GetNodeAt(e.Location);
\r
331 treeView_presets.Select();
\r
333 private void pmnu_delete_click(object sender, EventArgs e)
\r
335 if (treeView_presets.SelectedNode != null)
\r
337 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
339 // Remember each nodes expanded status so we can reload it
\r
340 List<Boolean> nodeStatus = saveTreeViewState();
\r
342 // Now reload the preset panel
\r
345 // Now reload the TreeView states
\r
346 loadTreeViewStates(nodeStatus);
\r
348 treeView_presets.Select();
\r
352 // MainWindow Components, Actions and Functions ***********************
\r
356 private void btn_source_Click(object sender, EventArgs e)
\r
358 if (Properties.Settings.Default.drive_detection == "Checked")
\r
360 mnu_dvd_drive.Visible = true;
\r
361 Thread driveInfoThread = new Thread(getDriveInfoThread);
\r
362 driveInfoThread.Start();
\r
365 mnu_dvd_drive.Visible = false;
\r
367 private void btn_start_Click(object sender, EventArgs e)
\r
369 if (text_source.Text == string.Empty || text_source.Text == "
\81u
\95Ï
\8a·
\8c³
\81v
\83{
\83^
\83\93\82ð
\83N
\83\8a\83b
\83N
\82µ
\82Ä
\91I
\91ð..." || text_destination.Text == string.Empty)
\r
370 MessageBox.Show("
\95Ï
\8a·
\8c³
\82à
\82µ
\82
\82Í
\95Û
\91¶
\90æ
\82ª
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
373 // Set the last action to encode.
\r
374 // This is used for tracking which file to load in the activity window
\r
375 lastAction = "encode";
\r
378 if (rtf_query.Text != "")
\r
379 query = rtf_query.Text;
\r
381 query = queryGen.GenerateTheQuery(this);
\r
383 ThreadPool.QueueUserWorkItem(procMonitor, query);
\r
384 lbl_encode.Visible = true;
\r
385 lbl_encode.Text = "
\83G
\83\93\83R
\81[
\83h
\8eÀ
\8ds
\92\86";
\r
387 btn_start.Text = "
\95Ï
\8a·
\92â
\8e~";
\r
388 btn_start.ToolTipText = "
\83G
\83\93\83R
\81[
\83h
\8f\88\97\9d\82ð
\92\86\8e~
\82µ
\82Ü
\82·
\81B\nWarning:
\82±
\82ê
\82É
\82æ
\82è
\81A
\83t
\83@
\83C
\83\8b\82ª
\94j
\89ó
\82³
\82ê
\82é
\89Â
\94\
\90«
\82ª
\82 \82è
\82Ü
\82·
\81B
\88À
\91S
\82É
\83G
\83\93\83R
\81[
\83h
\82ð
\92\86\8e~
\82·
\82é
\82É
\82Í
\81A
\83R
\83}
\83\93\83h
\83E
\83B
\83\93\83h
\83E
\82Åctrl-C
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B";
\r
389 btn_start.Image = Properties.Resources.stop;
\r
392 private void btn_add2Queue_Click(object sender, EventArgs e)
\r
394 if (text_source.Text == string.Empty || text_source.Text == "
\81u
\95Ï
\8a·
\8c³
\81v
\83{
\83^
\83\93\82ð
\83N
\83\8a\83b
\83N
\82µ
\82Ä
\91I
\91ð..." || text_destination.Text == string.Empty)
\r
395 MessageBox.Show("
\95Ï
\8a·
\8c³
\82à
\82µ
\82
\82Í
\95Û
\91¶
\90æ
\82ª
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
399 String query = queryGen.GenerateTheQuery(this);
\r
400 if (rtf_query.Text != "")
\r
401 query = rtf_query.Text;
\r
403 encodeQueue.add(query);
\r
404 encodeQueue.write2disk("hb_queue_recovery.dat"); // Writes the queue to the recovery file, just incase the GUI crashes.
\r
406 queueWindow.setQueue(encodeQueue);
\r
407 queueWindow.Show();
\r
410 private void btn_showQueue_Click(object sender, EventArgs e)
\r
412 queueWindow.setQueue(encodeQueue);
\r
413 queueWindow.Show();
\r
415 private void btn_ActivityWindow_Click(object sender, EventArgs e)
\r
417 String file = String.Empty;
\r
418 if (lastAction == "scan")
\r
419 file = "dvdinfo.dat";
\r
421 file = "hb_encode_log.dat";
\r
423 frmActivityWindow ActivityWindow = new frmActivityWindow(file, this, queueWindow);
\r
424 ActivityWindow.Show();
\r
428 private void btn_dvd_source_Click(object sender, EventArgs e)
\r
430 // Enable the creation of chapter markers.
\r
431 Check_ChapterMarkers.Enabled = true;
\r
433 // Set the last action to scan.
\r
434 // This is used for tracking which file to load in the activity window
\r
435 lastAction = "scan";
\r
437 String filename = "";
\r
438 text_source.Text = "";
\r
440 DVD_Open.ShowDialog();
\r
441 filename = DVD_Open.SelectedPath;
\r
443 if (filename.StartsWith("\\"))
\r
444 MessageBox.Show("HandBrake
\82ÍUNC
\83p
\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B\n
\8b¤
\97L
\83t
\83H
\83\8b\83_
\82ð
\83}
\83E
\83\93\83g
\82µ
\82Ä
\8eÀ
\8ds
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
447 if (filename != "")
\r
449 Form frmRD = new frmReadDVD(filename, this);
\r
450 text_source.Text = filename;
\r
451 lbl_encode.Text = "
\83X
\83L
\83\83\83\93\92\86...";
\r
452 frmRD.ShowDialog();
\r
455 text_source.Text = "
\81u
\95Ï
\8a·
\8c³
\81v
\83{
\83^
\83\93\82ð
\83N
\83\8a\83b
\83N
\82µ
\82Ä
\91I
\91ð...";
\r
457 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
458 if (drp_dvdtitle.Items.Count == 0)
\r
459 MessageBox.Show("
\83^
\83C
\83g
\83\8b\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ
\81B
\90³
\82µ
\82¢
\95Ï
\8a·
\8c³
\82ð
\91I
\91ð
\82µ
\82Ä
\82¢
\82é
\82©
\82²
\8am
\94F
\82
\82¾
\82³
\82¢
\81B
\82Ü
\82½
\81A
\83R
\83s
\81[
\83v
\83\8d\83e
\83N
\83g
\82³
\82ê
\82½
\83f
\83B
\83X
\83N
\82É
\82Í
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
461 lbl_encode.Text = "";
\r
464 private void btn_file_source_Click(object sender, EventArgs e)
\r
466 // Set the last action to scan.
\r
467 // This is used for tracking which file to load in the activity window
\r
468 lastAction = "scan";
\r
470 String filename = "";
\r
471 text_source.Text = "";
\r
473 ISO_Open.ShowDialog();
\r
474 filename = ISO_Open.FileName;
\r
476 if (filename.StartsWith("\\"))
\r
477 MessageBox.Show("HandBrake
\82ÍUNC
\83p
\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B\n
\8b¤
\97L
\83t
\83H
\83\8b\83_
\82ð
\83}
\83E
\83\93\83g
\82µ
\82Ä
\8eÀ
\8ds
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
480 if (filename != "")
\r
482 Form frmRD = new frmReadDVD(filename, this);
\r
483 text_source.Text = filename;
\r
484 lbl_encode.Text = "Scanning ...";
\r
485 frmRD.ShowDialog();
\r
488 text_source.Text = "
\81u
\95Ï
\8a·
\8c³
\81v
\83{
\83^
\83\93\82ð
\83N
\83\8a\83b
\83N
\82µ
\82Ä
\91I
\91ð...";
\r
490 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
491 if (drp_dvdtitle.Items.Count == 0)
\r
492 MessageBox.Show("
\83^
\83C
\83g
\83\8b\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ
\81B
\90³
\82µ
\82¢
\95Ï
\8a·
\8c³
\82ð
\91I
\91ð
\82µ
\82Ä
\82¢
\82é
\82©
\82²
\8am
\94F
\82
\82¾
\82³
\82¢
\81B
\82Ü
\82½
\81A
\83R
\83s
\81[
\83v
\83\8d\83e
\83N
\83g
\82³
\82ê
\82½
\83f
\83B
\83X
\83N
\82É
\82Í
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
494 lbl_encode.Text = "";
\r
496 // Enable the creation of chapter markers if the file is an image of a dvd.
\r
497 if (filename.ToLower().Contains(".iso"))
\r
498 Check_ChapterMarkers.Enabled = true;
\r
501 Check_ChapterMarkers.Enabled = false;
\r
502 Check_ChapterMarkers.Checked = false;
\r
503 data_chpt.Rows.Clear();
\r
507 private void mnu_dvd_drive_Click(object sender, EventArgs e)
\r
509 // Enable the creation of chapter markers.
\r
510 Check_ChapterMarkers.Enabled = true;
\r
512 // Set the last action to scan.
\r
513 // This is used for tracking which file to load in the activity window
\r
514 lastAction = "scan";
\r
516 String filename = "";
\r
517 if (mnu_dvd_drive.Text.Contains("VIDEO_TS"))
\r
519 string[] path = mnu_dvd_drive.Text.Split(' ');
\r
520 filename = path[0];
\r
521 lbl_encode.Text = "
\83X
\83L
\83\83\83\93\92\86...";
\r
522 Form frmRD = new frmReadDVD(filename, this);
\r
523 text_source.Text = filename;
\r
524 frmRD.ShowDialog();
\r
527 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
528 if (drp_dvdtitle.Items.Count == 0)
\r
529 MessageBox.Show("
\83^
\83C
\83g
\83\8b\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ
\81B
\90³
\82µ
\82¢
\95Ï
\8a·
\8c³
\82ð
\91I
\91ð
\82µ
\82Ä
\82¢
\82é
\82©
\82²
\8am
\94F
\82
\82¾
\82³
\82¢
\81B
\82Ü
\82½
\81A
\83R
\83s
\81[
\83v
\83\8d\83e
\83N
\83g
\82³
\82ê
\82½
\83f
\83B
\83X
\83N
\82É
\82Í
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
531 lbl_encode.Text = "";
\r
534 private void drp_dvdtitle_Click(object sender, EventArgs e)
\r
536 if ((drp_dvdtitle.Items.Count == 1) && (drp_dvdtitle.Items[0].ToString() == "Automatic"))
\r
537 MessageBox.Show("
\83^
\83C
\83g
\83\8b\82ª
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B
\81u
\95Ï
\8a·
\8c³
\81v
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82Ä
\95Ï
\8a·
\8c³
\82ð
\91I
\91ð
\82µ
\82Ä
\82
\82¾
\82³
\82¢", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
539 private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
541 // Reset some values on the form
\r
542 lbl_Aspect.Text = "Select a Title";
\r
543 //lbl_RecomendedCrop.Text = "Select a Title";
\r
544 drop_chapterStart.Items.Clear();
\r
545 drop_chapterFinish.Items.Clear();
\r
547 // If the dropdown is set to automatic nothing else needs to be done.
\r
548 // Otheriwse if its not, title data has to be loased from parsing.
\r
549 if (drp_dvdtitle.Text != "Automatic")
\r
551 selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;
\r
553 // Set the Aspect Ratio
\r
554 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();
\r
555 lbl_src_res.Text = selectedTitle.Resolution.Width + " x " + selectedTitle.Resolution.Height;
\r
556 lbl_duration.Text = selectedTitle.Duration.ToString();
\r
558 // Set the Recommended Cropping values
\r
559 text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();
\r
560 text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();
\r
561 text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();
\r
562 text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();
\r
564 // Populate the Start chapter Dropdown
\r
565 drop_chapterStart.Items.Clear();
\r
566 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
567 if (drop_chapterStart.Items.Count > 0)
\r
568 drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();
\r
570 // Populate the Final Chapter Dropdown
\r
571 drop_chapterFinish.Items.Clear();
\r
572 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
573 if (drop_chapterFinish.Items.Count > 0)
\r
574 drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();
\r
576 // Populate the Audio Channels Dropdown
\r
577 drp_track1Audio.Items.Clear();
\r
578 drp_track1Audio.Items.Add("Automatic");
\r
579 drp_track1Audio.Items.Add("None");
\r
580 drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
581 drp_track1Audio.SelectedIndex = 0;
\r
583 drp_track2Audio.Items.Clear();
\r
584 drp_track2Audio.Items.Add("None");
\r
585 drp_track2Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
586 drp_track2Audio.SelectedIndex = 0;
\r
588 drp_track3Audio.Items.Clear();
\r
589 drp_track3Audio.Items.Add("None");
\r
590 drp_track3Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
591 drp_track3Audio.SelectedIndex = 0;
\r
593 drp_track4Audio.Items.Clear();
\r
594 drp_track4Audio.Items.Add("None");
\r
595 drp_track4Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
596 drp_track4Audio.SelectedIndex = 0;
\r
598 // Populate the Subtitles dropdown
\r
599 drp_subtitle.Items.Clear();
\r
600 drp_subtitle.Items.Add("None");
\r
601 drp_subtitle.Items.Add("Autoselect");
\r
602 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());
\r
603 if (drp_subtitle.Items.Count > 0)
\r
604 drp_subtitle.Text = drp_subtitle.Items[0].ToString();
\r
608 // Run the autoName & chapterNaming functions
\r
609 if (Properties.Settings.Default.autoNaming == "Checked")
\r
610 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
612 data_chpt.Rows.Clear();
\r
613 DataGridView chapterGridView = hb_common_func.chapterNaming(data_chpt, drop_chapterStart.Text, drop_chapterFinish.Text);
\r
614 if (chapterGridView != null)
\r
615 data_chpt = chapterGridView;
\r
617 private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)
\r
619 int c_start, c_end = 1;
\r
621 if (drop_chapterFinish.Text == "Auto" && drop_chapterFinish.Items.Count != 0)
\r
622 drop_chapterFinish.SelectedIndex = drop_chapterFinish.Items.Count - 1;
\r
624 int.TryParse(drop_chapterStart.Text, out c_start);
\r
625 int.TryParse(drop_chapterFinish.Text, out c_end);
\r
629 if (c_start > c_end)
\r
630 drop_chapterFinish.Text = c_start.ToString();
\r
633 lbl_duration.Text = hb_common_func.calculateDuration(drop_chapterStart.Text, drop_chapterFinish.Text, selectedTitle).ToString();
\r
635 // Run the Autonaming function
\r
636 if (Properties.Settings.Default.autoNaming == "Checked")
\r
637 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
639 private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)
\r
641 int c_start, c_end = 1;
\r
643 if (drop_chapterStart.Text == "Auto" && drop_chapterStart.Items.Count >= 1)
\r
644 drop_chapterStart.SelectedIndex = 1;
\r
646 int.TryParse(drop_chapterStart.Text, out c_start);
\r
647 int.TryParse(drop_chapterFinish.Text, out c_end);
\r
651 if (c_end < c_start)
\r
652 drop_chapterFinish.Text = c_start.ToString();
\r
655 lbl_duration.Text = hb_common_func.calculateDuration(drop_chapterStart.Text, drop_chapterFinish.Text, selectedTitle).ToString();
\r
657 // Run the Autonaming function
\r
658 if (Properties.Settings.Default.autoNaming == "Checked")
\r
659 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
663 private void btn_destBrowse_Click(object sender, EventArgs e)
\r
665 // This removes the file extension from the filename box on the save file dialog.
\r
666 // It's daft but some users don't realise that typing an extension overrides the dropdown extension selected.
\r
667 DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", "");
\r
669 // Show the dialog and set the main form file path
\r
671 if (text_destination.Text.EndsWith(".mp4"))
\r
672 DVD_Save.FilterIndex = 1;
\r
673 else if (text_destination.Text.EndsWith(".m4v"))
\r
674 DVD_Save.FilterIndex = 2;
\r
675 else if (text_destination.Text.EndsWith(".avi"))
\r
676 DVD_Save.FilterIndex = 3;
\r
677 else if (text_destination.Text.EndsWith(".ogm"))
\r
678 DVD_Save.FilterIndex = 4;
\r
679 else if (text_destination.Text.EndsWith(".mkv"))
\r
680 DVD_Save.FilterIndex = 5;
\r
682 if (DVD_Save.ShowDialog() == DialogResult.OK)
\r
684 if (DVD_Save.FileName.StartsWith("\\"))
\r
685 MessageBox.Show("HandBrake
\82ÍUNC
\83p
\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B\n
\8b¤
\97L
\83t
\83H
\83\8b\83_
\82ð
\83}
\83E
\83\93\83g
\82µ
\82Ä
\8eÀ
\8ds
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B","Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
688 setAudioByContainer(DVD_Save.FileName);
\r
689 text_destination.Text = DVD_Save.FileName;
\r
691 // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)
\r
692 if (Check_ChapterMarkers.Checked)
\r
693 text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v");
\r
697 private void text_destination_TextChanged(object sender, EventArgs e)
\r
699 setAudioByContainer(text_destination.Text);
\r
700 setVideoByContainer(text_destination.Text);
\r
701 string path = text_destination.Text;
\r
702 if (path.EndsWith(".mp4"))
\r
703 drop_format.SelectedIndex = 0;
\r
704 else if (path.EndsWith(".m4v"))
\r
705 drop_format.SelectedIndex = 1;
\r
706 else if (path.EndsWith(".mkv"))
\r
707 drop_format.SelectedIndex = 2;
\r
708 else if (path.EndsWith(".avi"))
\r
709 drop_format.SelectedIndex = 3;
\r
710 else if (path.EndsWith(".ogm"))
\r
711 drop_format.SelectedIndex = 4;
\r
716 private void drop_format_SelectedIndexChanged(object sender, EventArgs e)
\r
718 if (drop_format.SelectedIndex == 0)
\r
719 setExtension(".mp4");
\r
720 else if (drop_format.SelectedIndex == 1)
\r
721 setExtension(".m4v");
\r
722 else if (drop_format.SelectedIndex == 2)
\r
723 setExtension(".mkv");
\r
724 else if (drop_format.SelectedIndex == 3)
\r
725 setExtension(".avi");
\r
726 else if (drop_format.SelectedIndex == 4)
\r
727 setExtension(".ogm");
\r
732 private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)
\r
734 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))
\r
736 check_largeFile.Enabled = true;
\r
737 check_optimiseMP4.Enabled = true;
\r
738 check_iPodAtom.Enabled = true;
\r
742 check_largeFile.Enabled = false;
\r
743 check_optimiseMP4.Enabled = false;
\r
744 check_iPodAtom.Enabled = false;
\r
745 check_largeFile.Checked = false;
\r
746 check_optimiseMP4.Checked = false;
\r
747 check_iPodAtom.Checked = false;
\r
751 //Turn off some options which are H.264 only when the user selects a non h.264 encoder
\r
752 if (drp_videoEncoder.Text.Contains("H.264"))
\r
754 if (check_2PassEncode.CheckState == CheckState.Checked)
\r
755 check_turbo.Enabled = true;
\r
757 h264Tab.Enabled = true;
\r
758 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))
\r
759 check_iPodAtom.Enabled = true;
\r
761 check_iPodAtom.Enabled = false;
\r
762 if (!drp_anamorphic.Items.Contains("Loose"))
\r
763 drp_anamorphic.Items.Add("Loose");
\r
767 check_turbo.CheckState = CheckState.Unchecked;
\r
768 check_turbo.Enabled = false;
\r
769 h264Tab.Enabled = false;
\r
770 rtf_x264Query.Text = "";
\r
771 check_iPodAtom.Enabled = false;
\r
772 check_iPodAtom.Checked = false;
\r
773 if (drp_anamorphic.Items.Count == 3)
\r
774 drp_anamorphic.Items.RemoveAt(2);
\r
778 private void text_bitrate_TextChanged(object sender, EventArgs e)
\r
780 text_filesize.Text = "";
\r
781 slider_videoQuality.Value = 0;
\r
782 SliderValue.Text = "0%";
\r
783 check_2PassEncode.Enabled = true;
\r
785 private void text_filesize_TextChanged(object sender, EventArgs e)
\r
787 text_bitrate.Text = "";
\r
788 slider_videoQuality.Value = 0;
\r
789 SliderValue.Text = "0%";
\r
790 check_2PassEncode.Enabled = true;
\r
792 private void slider_videoQuality_Scroll(object sender, EventArgs e)
\r
794 SliderValue.Text = slider_videoQuality.Value.ToString() + "%";
\r
795 text_bitrate.Text = "";
\r
796 text_filesize.Text = "";
\r
797 check_2PassEncode.Enabled = false;
\r
798 check_2PassEncode.CheckState = CheckState.Unchecked;
\r
800 private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)
\r
802 if (check_2PassEncode.CheckState.ToString() == "Checked")
\r
804 if (drp_videoEncoder.Text.Contains("H.264"))
\r
805 check_turbo.Enabled = true;
\r
809 check_turbo.Enabled = false;
\r
810 check_turbo.CheckState = CheckState.Unchecked;
\r
815 private void text_width_TextChanged(object sender, EventArgs e)
\r
817 maxWidth = 0; // Reset max width so that it's not using the MaxWidth -X. Quick hack to allow -X for preset usage.
\r
820 Boolean parsed = int.TryParse(text_width.Text, out width);
\r
821 if (parsed != false)
\r
823 if ((width % 16) != 0)
\r
824 text_width.BackColor = Color.LightCoral;
\r
826 text_width.BackColor = Color.LightGreen;
\r
829 if (lbl_Aspect.Text != "Select a Title" && maxWidth != 0 && maxHeight != 0)
\r
831 if (drp_anamorphic.Text == "None")
\r
833 int height = hb_common_func.cacluateNonAnamorphicHeight(width, text_top.Value, text_bottom.Value, text_left.Value, text_right.Value, selectedTitle);
\r
834 text_height.Text = height.ToString();
\r
839 private void text_height_TextChanged(object sender, EventArgs e)
\r
841 maxHeight = 0; // Reset max height so that it's not using the MaxHeight -Y. Quick hack to allow -Y for preset usage.
\r
844 Boolean parsed = int.TryParse(text_height.Text, out height);
\r
845 if (parsed != false)
\r
847 if ((height % 16) != 0)
\r
848 text_height.BackColor = Color.LightCoral;
\r
850 text_height.BackColor = Color.LightGreen;
\r
853 private void check_customCrop_CheckedChanged(object sender, EventArgs e)
\r
855 text_left.Enabled = true;
\r
856 text_right.Enabled = true;
\r
857 text_top.Enabled = true;
\r
858 text_bottom.Enabled = true;
\r
859 if (selectedTitle != null)
\r
861 text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();
\r
862 text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();
\r
863 text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();
\r
864 text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();
\r
868 text_left.Text = "0";
\r
869 text_right.Text = "0";
\r
870 text_top.Text = "0";
\r
871 text_bottom.Text = "0";
\r
874 private void check_autoCrop_CheckedChanged(object sender, EventArgs e)
\r
876 text_left.Enabled = false;
\r
877 text_right.Enabled = false;
\r
878 text_top.Enabled = false;
\r
879 text_bottom.Enabled = false;
\r
881 private void drp_anamorphic_SelectedIndexChanged(object sender, EventArgs e)
\r
883 if (drp_anamorphic.SelectedIndex == 1)
\r
885 text_height.BackColor = Color.LightGray;
\r
886 text_width.BackColor = Color.LightGray;
\r
887 text_height.Text = "";
\r
888 text_width.Text = "";
\r
889 text_height.Enabled = false;
\r
890 text_width.Enabled = false;
\r
893 if (drp_anamorphic.SelectedIndex == 2)
\r
895 text_height.Text = "";
\r
896 text_height.Enabled = false;
\r
897 text_height.BackColor = Color.LightGray;
\r
899 text_width.Enabled = true;
\r
900 text_width.BackColor = Color.White;
\r
903 if (drp_anamorphic.SelectedIndex == 0)
\r
905 text_height.BackColor = Color.White;
\r
906 text_width.BackColor = Color.White;
\r
907 text_height.Enabled = true;
\r
908 text_width.Enabled = true;
\r
911 private void slider_deblock_Scroll(object sender, EventArgs e)
\r
913 if (slider_deblock.Value == 4)
\r
914 lbl_deblockVal.Text = "Off";
\r
916 lbl_deblockVal.Text = slider_deblock.Value.ToString();
\r
920 private void drp_track2Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
922 if (drp_track2Audio.SelectedItem.Equals("None"))
\r
924 drp_audbit_2.Enabled = false;
\r
925 drp_audenc_2.Enabled = false;
\r
926 drp_audsr_2.Enabled = false;
\r
927 drp_audmix_2.Enabled = false;
\r
928 trackBar2.Enabled = false;
\r
929 drp_audbit_2.Text = "";
\r
930 drp_audenc_2.Text = "";
\r
931 drp_audsr_2.Text = "";
\r
932 drp_audmix_2.Text = "Automatic";
\r
933 trackBar2.Value = 0;
\r
935 // Disable the 3rd Track.
\r
936 drp_track3Audio.Enabled = false;
\r
937 drp_track3Audio.Text = "None";
\r
938 drp_audbit_3.Text = "";
\r
939 drp_audenc_3.Text = "";
\r
940 drp_audsr_3.Text = "";
\r
941 drp_audmix_3.Text = "Automatic";
\r
942 trackBar3.Value = 0;
\r
946 drp_audbit_2.Enabled = true;
\r
947 drp_audenc_2.Enabled = true;
\r
948 drp_audsr_2.Enabled = true;
\r
949 drp_audmix_2.Enabled = true;
\r
950 trackBar2.Enabled = true;
\r
951 drp_audbit_2.Text = "160";
\r
952 drp_audenc_2.Text = "AAC";
\r
953 drp_audsr_2.Text = "Auto";
\r
954 drp_audmix_2.Text = "Automatic";
\r
956 // Enable the 3rd Track.
\r
957 drp_track3Audio.Enabled = true;
\r
958 drp_audbit_3.Text = "";
\r
959 drp_audenc_3.Text = "";
\r
960 drp_audsr_3.Text = "";
\r
961 drp_audmix_3.Text = "Automatic";
\r
964 private void drp_track3Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
966 if (drp_track3Audio.SelectedItem.Equals("None"))
\r
968 drp_audbit_3.Enabled = false;
\r
969 drp_audenc_3.Enabled = false;
\r
970 drp_audsr_3.Enabled = false;
\r
971 drp_audmix_3.Enabled = false;
\r
972 trackBar3.Enabled = false;
\r
973 drp_audbit_3.Text = "";
\r
974 drp_audenc_3.Text = "";
\r
975 drp_audsr_3.Text = "";
\r
976 drp_audmix_3.Text = "Automatic";
\r
977 trackBar3.Value = 0;
\r
979 // Disable the 4th Track.
\r
980 drp_track4Audio.Enabled = false;
\r
981 drp_track4Audio.Text = "None";
\r
982 drp_audbit_4.Text = "";
\r
983 drp_audenc_4.Text = "";
\r
984 drp_audsr_4.Text = "";
\r
985 drp_audmix_4.Text = "Automatic";
\r
990 drp_audbit_3.Enabled = true;
\r
991 drp_audenc_3.Enabled = true;
\r
992 drp_audsr_3.Enabled = true;
\r
993 drp_audmix_3.Enabled = true;
\r
994 trackBar3.Enabled = true;
\r
995 drp_audbit_3.Text = "160";
\r
996 drp_audenc_3.Text = "AAC";
\r
997 drp_audsr_3.Text = "Auto";
\r
998 drp_audmix_3.Text = "Automatic";
\r
1000 // Enable the 4th Track.
\r
1001 drp_track4Audio.Enabled = true;
\r
1002 drp_audbit_4.Text = "";
\r
1003 drp_audenc_4.Text = "";
\r
1004 drp_audsr_4.Text = "";
\r
1005 drp_audmix_4.Text = "Automatic";
\r
1009 private void drp_track4Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
1011 if (drp_track4Audio.SelectedItem.Equals("None"))
\r
1013 drp_audbit_4.Enabled = false;
\r
1014 drp_audenc_4.Enabled = false;
\r
1015 drp_audsr_4.Enabled = false;
\r
1016 drp_audmix_4.Enabled = false;
\r
1017 trackBar4.Enabled = false;
\r
1018 drp_audbit_4.Text = "";
\r
1019 drp_audenc_4.Text = "";
\r
1020 drp_audsr_4.Text = "";
\r
1021 drp_audmix_4.Text = "Automatic";
\r
1022 trackBar4.Value = 0;
\r
1026 drp_audbit_4.Enabled = true;
\r
1027 drp_audenc_4.Enabled = true;
\r
1028 drp_audsr_4.Enabled = true;
\r
1029 drp_audmix_4.Enabled = true;
\r
1030 trackBar4.Enabled = true;
\r
1031 drp_audbit_4.Text = "160";
\r
1032 drp_audenc_4.Text = "AAC";
\r
1033 drp_audsr_4.Text = "Auto";
\r
1034 drp_audmix_4.Text = "Automatic";
\r
1038 private void drp_audmix_1_SelectedIndexChanged(object sender, EventArgs e)
\r
1040 if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))
\r
1041 setBitrateSelections384(drp_audbit_1);
\r
1042 else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete"))
\r
1044 setBitrateSelections160(drp_audbit_1);
\r
1045 drp_audbit_1.Text = "160";
\r
1048 private void drp_audmix_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1050 if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text == "6 Channel Discrete"))
\r
1051 setBitrateSelections384(drp_audbit_2);
\r
1052 else if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text != "6 Channel Discrete"))
\r
1054 setBitrateSelections160(drp_audbit_2);
\r
1055 drp_audbit_2.Text = "160";
\r
1058 private void drp_audmix_3_SelectedIndexChanged(object sender, EventArgs e)
\r
1060 if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text == "6 Channel Discrete"))
\r
1061 setBitrateSelections384(drp_audbit_3);
\r
1062 else if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text != "6 Channel Discrete"))
\r
1064 setBitrateSelections160(drp_audbit_3);
\r
1065 drp_audbit_3.Text = "160";
\r
1068 private void drp_audmix_4_SelectedIndexChanged(object sender, EventArgs e)
\r
1070 if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text == "6 Channel Discrete"))
\r
1071 setBitrateSelections384(drp_audbit_4);
\r
1072 else if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text != "6 Channel Discrete"))
\r
1074 setBitrateSelections160(drp_audbit_4);
\r
1075 drp_audbit_4.Text = "160";
\r
1079 private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)
\r
1081 if (drp_audenc_1.Text == "AC3")
\r
1083 drp_audmix_1.Enabled = false;
\r
1084 drp_audbit_1.Enabled = false;
\r
1085 drp_audsr_1.Enabled = false;
\r
1089 drp_audmix_1.Enabled = true;
\r
1090 drp_audbit_1.Enabled = true;
\r
1091 drp_audsr_1.Enabled = true;
\r
1093 drp_audmix_1.Text = "Automatic";
\r
1094 drp_audbit_1.Text = "160";
\r
1095 drp_audsr_1.Text = "Auto";
\r
1099 if (drp_audenc_1.Text == "AAC")
\r
1101 drp_audmix_1.Items.Clear();
\r
1102 drp_audmix_1.Items.Add("Mono");
\r
1103 drp_audmix_1.Items.Add("Stereo");
\r
1104 drp_audmix_1.Items.Add("Dolby Surround");
\r
1105 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1106 drp_audmix_1.Items.Add("6 Channel Discrete");
\r
1108 setBitrateSelections160(drp_audbit_1);
\r
1112 drp_audmix_1.Items.Clear();
\r
1113 drp_audmix_1.Items.Add("Stereo");
\r
1114 drp_audmix_1.Items.Add("Dolby Surround");
\r
1115 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1117 setBitrateSelections320(drp_audbit_1);
\r
1120 private void drp_audenc_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1122 if (drp_audenc_2.Text == "AC3")
\r
1124 drp_audmix_2.Enabled = false;
\r
1125 drp_audbit_2.Enabled = false;
\r
1126 drp_audsr_2.Enabled = false;
\r
1128 drp_audmix_2.Text = "Automatic";
\r
1129 drp_audbit_2.Text = "160";
\r
1130 drp_audsr_2.Text = "Auto";
\r
1134 // Just make sure not to re-enable the following boxes if the track2 is none
\r
1135 if (drp_track2Audio.Text != "None")
\r
1137 drp_audmix_2.Enabled = true;
\r
1138 drp_audbit_2.Enabled = true;
\r
1139 drp_audsr_2.Enabled = true;
\r
1141 drp_audmix_2.Text = "Automatic";
\r
1142 drp_audbit_2.Text = "160";
\r
1143 drp_audsr_2.Text = "Auto";
\r
1147 if (drp_audenc_2.Text == "AAC")
\r
1149 drp_audmix_2.Items.Clear();
\r
1150 drp_audmix_2.Items.Add("Mono");
\r
1151 drp_audmix_2.Items.Add("Stereo");
\r
1152 drp_audmix_2.Items.Add("Dolby Surround");
\r
1153 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1154 drp_audmix_2.Items.Add("6 Channel Discrete");
\r
1156 setBitrateSelections160(drp_audbit_2);
\r
1160 drp_audmix_2.Items.Clear();
\r
1161 drp_audmix_2.Items.Add("Stereo");
\r
1162 drp_audmix_2.Items.Add("Dolby Surround");
\r
1163 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1165 setBitrateSelections320(drp_audbit_2);
\r
1168 private void drp_audenc_3_SelectedIndexChanged(object sender, EventArgs e)
\r
1170 if (drp_audenc_3.Text == "AC3")
\r
1172 drp_audmix_3.Enabled = false;
\r
1173 drp_audbit_3.Enabled = false;
\r
1174 drp_audsr_3.Enabled = false;
\r
1176 drp_audmix_3.Text = "Automatic";
\r
1177 drp_audbit_3.Text = "160";
\r
1178 drp_audsr_3.Text = "Auto";
\r
1182 // Just make sure not to re-enable the following boxes if the track above is none
\r
1183 if (drp_track2Audio.Text != "None")
\r
1185 drp_audmix_3.Enabled = true;
\r
1186 drp_audbit_3.Enabled = true;
\r
1187 drp_audsr_3.Enabled = true;
\r
1189 drp_audmix_3.Text = "Automatic";
\r
1190 drp_audbit_3.Text = "160";
\r
1191 drp_audsr_3.Text = "Auto";
\r
1196 if (drp_audenc_3.Text == "AAC")
\r
1198 drp_audmix_3.Items.Clear();
\r
1199 drp_audmix_3.Items.Add("Mono");
\r
1200 drp_audmix_3.Items.Add("Stereo");
\r
1201 drp_audmix_3.Items.Add("Dolby Surround");
\r
1202 drp_audmix_3.Items.Add("Dolby Pro Logic II");
\r
1203 drp_audmix_3.Items.Add("6 Channel Discrete");
\r
1205 setBitrateSelections160(drp_audbit_3);
\r
1209 drp_audmix_3.Items.Clear();
\r
1210 drp_audmix_3.Items.Add("Stereo");
\r
1211 drp_audmix_3.Items.Add("Dolby Surround");
\r
1212 drp_audmix_3.Items.Add("Dolby Pro Logic II");
\r
1214 setBitrateSelections320(drp_audbit_3);
\r
1217 private void drp_audenc_4_SelectedIndexChanged(object sender, EventArgs e)
\r
1219 if (drp_audenc_4.Text == "AC3")
\r
1221 drp_audmix_4.Enabled = false;
\r
1222 drp_audbit_4.Enabled = false;
\r
1223 drp_audsr_4.Enabled = false;
\r
1225 drp_audmix_4.Text = "Automatic";
\r
1226 drp_audbit_4.Text = "160";
\r
1227 drp_audsr_4.Text = "Auto";
\r
1231 // Just make sure not to re-enable the following boxes if the track above is none
\r
1232 if (drp_track2Audio.Text != "None")
\r
1234 drp_audmix_4.Enabled = true;
\r
1235 drp_audbit_4.Enabled = true;
\r
1236 drp_audsr_4.Enabled = true;
\r
1238 drp_audmix_4.Text = "Automatic";
\r
1239 drp_audbit_4.Text = "160";
\r
1240 drp_audsr_4.Text = "Auto";
\r
1245 if (drp_audenc_4.Text == "AAC")
\r
1247 drp_audmix_4.Items.Clear();
\r
1248 drp_audmix_4.Items.Add("Mono");
\r
1249 drp_audmix_4.Items.Add("Stereo");
\r
1250 drp_audmix_4.Items.Add("Dolby Surround");
\r
1251 drp_audmix_4.Items.Add("Dolby Pro Logic II");
\r
1252 drp_audmix_4.Items.Add("6 Channel Discrete");
\r
1254 setBitrateSelections160(drp_audbit_4);
\r
1258 drp_audmix_4.Items.Clear();
\r
1259 drp_audmix_4.Items.Add("Stereo");
\r
1260 drp_audmix_4.Items.Add("Dolby Surround");
\r
1261 drp_audmix_4.Items.Add("Dolby Pro Logic II");
\r
1263 setBitrateSelections320(drp_audbit_4);
\r
1267 private void trackBar1_Scroll(object sender, EventArgs e)
\r
1269 double value = trackBar1.Value / 10.0;
\r
1272 lbl_drc1.Text = value.ToString();
\r
1274 private void trackBar2_Scroll(object sender, EventArgs e)
\r
1276 double value = trackBar2.Value / 10.0;
\r
1279 lbl_drc2.Text = value.ToString();
\r
1281 private void trackBar3_Scroll(object sender, EventArgs e)
\r
1283 double value = trackBar3.Value / 10.0;
\r
1286 lbl_drc3.Text = value.ToString();
\r
1288 private void trackBar4_Scroll(object sender, EventArgs e)
\r
1290 double value = trackBar4.Value / 10.0;
\r
1293 lbl_drc4.Text = value.ToString();
\r
1296 private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
1298 if (drp_subtitle.Text.Contains("None"))
\r
1300 check_forced.Enabled = false;
\r
1301 check_forced.Checked = false;
\r
1304 check_forced.Enabled = true;
\r
1307 // Chapter Marker Tab
\r
1308 private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)
\r
1310 if (Check_ChapterMarkers.Checked)
\r
1312 string destination = text_destination.Text;
\r
1313 destination = destination.Replace(".mp4", ".m4v");
\r
1314 text_destination.Text = destination;
\r
1315 data_chpt.Rows.Clear();
\r
1316 data_chpt.Enabled = true;
\r
1317 DataGridView chapterGridView = hb_common_func.chapterNaming(data_chpt, drop_chapterStart.Text, drop_chapterFinish.Text);
\r
1318 if (chapterGridView != null)
\r
1319 data_chpt = chapterGridView;
\r
1323 string destination = text_destination.Text;
\r
1324 destination = destination.Replace(".m4v", ".mp4");
\r
1325 text_destination.Text = destination;
\r
1326 data_chpt.Rows.Clear();
\r
1327 data_chpt.Enabled = false;
\r
1332 private void drop_refFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1334 x264PanelFunctions.on_x264_WidgetChange("ref", this);
\r
1336 private void check_mixedReferences_CheckedChanged(object sender, EventArgs e)
\r
1338 x264PanelFunctions.on_x264_WidgetChange("mixed-refs", this);
\r
1340 private void drop_bFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1342 x264PanelFunctions.on_x264_WidgetChange("bframes", this);
\r
1344 private void drop_directPrediction_SelectedIndexChanged(object sender, EventArgs e)
\r
1346 x264PanelFunctions.on_x264_WidgetChange("direct", this);
\r
1348 private void check_weightedBFrames_CheckedChanged(object sender, EventArgs e)
\r
1350 x264PanelFunctions.on_x264_WidgetChange("weightb", this);
\r
1352 private void check_bFrameDistortion_CheckedChanged(object sender, EventArgs e)
\r
1354 x264PanelFunctions.on_x264_WidgetChange("brdo", this);
\r
1356 private void check_BidirectionalRefinement_CheckedChanged(object sender, EventArgs e)
\r
1358 x264PanelFunctions.on_x264_WidgetChange("bime", this);
\r
1360 private void check_pyrmidalBFrames_CheckedChanged(object sender, EventArgs e)
\r
1362 x264PanelFunctions.on_x264_WidgetChange("b-pyramid", this);
\r
1364 private void drop_MotionEstimationMethod_SelectedIndexChanged(object sender, EventArgs e)
\r
1366 x264PanelFunctions.on_x264_WidgetChange("me", this);
\r
1368 private void drop_MotionEstimationRange_SelectedIndexChanged(object sender, EventArgs e)
\r
1370 x264PanelFunctions.on_x264_WidgetChange("merange", this);
\r
1372 private void drop_subpixelMotionEstimation_SelectedIndexChanged(object sender, EventArgs e)
\r
1374 x264PanelFunctions.on_x264_WidgetChange("subq", this);
\r
1376 private void drop_analysis_SelectedIndexChanged(object sender, EventArgs e)
\r
1378 x264PanelFunctions.on_x264_WidgetChange("analyse", this);
\r
1380 private void check_8x8DCT_CheckedChanged(object sender, EventArgs e)
\r
1382 x264PanelFunctions.on_x264_WidgetChange("8x8dct", this);
\r
1384 private void drop_deblockAlpha_SelectedIndexChanged(object sender, EventArgs e)
\r
1386 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1389 private void drop_deblockBeta_SelectedIndexChanged(object sender, EventArgs e)
\r
1391 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1394 private void drop_trellis_SelectedIndexChanged(object sender, EventArgs e)
\r
1396 x264PanelFunctions.on_x264_WidgetChange("trellis", this);
\r
1398 private void check_noFastPSkip_CheckedChanged(object sender, EventArgs e)
\r
1400 x264PanelFunctions.on_x264_WidgetChange("no-fast-pskip", this);
\r
1402 private void check_noDCTDecimate_CheckedChanged(object sender, EventArgs e)
\r
1404 x264PanelFunctions.on_x264_WidgetChange("no-dct-decimate", this);
\r
1407 private void check_Cabac_CheckedChanged(object sender, EventArgs e)
\r
1410 x264PanelFunctions.on_x264_WidgetChange("cabac", this);
\r
1413 private void rtf_x264Query_TextChanged(object sender, EventArgs e)
\r
1415 if (rtf_x264Query.Text.EndsWith("\n"))
\r
1417 rtf_x264Query.Text = rtf_x264Query.Text.Replace("\n", "");
\r
1418 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1419 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1421 if (rtf_x264Query.Text == string.Empty)
\r
1422 x264PanelFunctions.reset2Defaults(this);
\r
1425 private void btn_reset_Click(object sender, EventArgs e)
\r
1427 rtf_x264Query.Text = "";
\r
1428 x264PanelFunctions.reset2Defaults(this);
\r
1431 // Query Editor Tab
\r
1432 private void btn_generate_Query_Click(object sender, EventArgs e)
\r
1434 rtf_query.Text = queryGen.GenerateTheQuery(this);
\r
1436 private void btn_clear_Click(object sender, EventArgs e)
\r
1438 rtf_query.Clear();
\r
1442 private void btn_addPreset_Click(object sender, EventArgs e)
\r
1444 // Remember each nodes expanded status so we can reload it
\r
1445 List<Boolean> nodeStatus = saveTreeViewState();
\r
1446 nodeStatus.Add(true);
\r
1448 // Now add the new preset
\r
1449 Form preset = new frmAddPreset(this, queryGen.GenerateTheQuery(this), presetHandler);
\r
1450 preset.ShowDialog();
\r
1452 // Now reload the TreeView states
\r
1453 loadTreeViewStates(nodeStatus);
\r
1455 private void btn_removePreset_Click(object sender, EventArgs e)
\r
1457 DialogResult result = MessageBox.Show("
\91I
\91ð
\82µ
\82½
\83v
\83\8a\83Z
\83b
\83g
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\82©
\81H", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1458 if (result == DialogResult.Yes)
\r
1460 if (treeView_presets.SelectedNode != null)
\r
1461 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
1463 // Remember each nodes expanded status so we can reload it
\r
1464 List<Boolean> nodeStatus = saveTreeViewState();
\r
1466 // Now reload the preset panel
\r
1467 loadPresetPanel();
\r
1469 // Now reload the TreeView states
\r
1470 loadTreeViewStates(nodeStatus);
\r
1472 treeView_presets.Select();
\r
1474 private void btn_setDefault_Click(object sender, EventArgs e)
\r
1476 String query = queryGen.GenerateTheQuery(this);
\r
1477 Properties.Settings.Default.defaultUserSettings = query;
\r
1478 // Save the new default Settings
\r
1479 Properties.Settings.Default.Save();
\r
1480 MessageBox.Show("
\83f
\83t
\83H
\83\8b\83g
\90Ý
\92è
\82ª
\95Û
\91¶
\82³
\82ê
\82Ü
\82µ
\82½", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
1482 private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)
\r
1484 // Ok, so, we've selected a preset. Now we want to load it.
\r
1485 string presetName = treeView_presets.SelectedNode.Text;
\r
1486 string query = presetHandler.getCliForPreset(presetName);
\r
1488 if (query != null)
\r
1490 //Ok, Reset all the H264 widgets before changing the preset
\r
1491 x264PanelFunctions.reset2Defaults(this);
\r
1493 // Send the query from the file to the Query Parser class
\r
1494 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(query);
\r
1496 // Now load the preset
\r
1497 presetLoader.presetLoader(this, presetQuery, presetName);
\r
1499 // The x264 widgets will need updated, so do this now:
\r
1500 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1501 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1504 private void treeView_presets_deleteKey(object sender, KeyEventArgs e)
\r
1506 if (e.KeyCode == Keys.Delete)
\r
1508 DialogResult result = MessageBox.Show("
\91I
\91ð
\82µ
\82½
\83v
\83\8a\83Z
\83b
\83g
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\82©
\81H", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1509 if (result == DialogResult.Yes)
\r
1511 if (treeView_presets.SelectedNode != null)
\r
1512 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
1514 // Remember each nodes expanded status so we can reload it
\r
1515 List<Boolean> nodeStatus = new List<Boolean>();
\r
1516 foreach (TreeNode node in treeView_presets.Nodes)
\r
1517 nodeStatus.Add(node.IsExpanded);
\r
1519 // Now reload the preset panel
\r
1520 loadPresetPanel();
\r
1522 // And finally, re-expand any of the nodes if required
\r
1524 foreach (TreeNode node in treeView_presets.Nodes)
\r
1526 if (nodeStatus[i] == true)
\r
1537 #region Preset Expand / Collaspe
\r
1538 private List<Boolean> saveTreeViewState()
\r
1540 // Remember each nodes expanded status so we can reload it
\r
1541 List<Boolean> nodeStatus = new List<Boolean>();
\r
1542 foreach (TreeNode node in treeView_presets.Nodes)
\r
1544 nodeStatus.Add(node.IsExpanded);
\r
1545 foreach (TreeNode subNode in node.Nodes)
\r
1546 nodeStatus.Add(node.IsExpanded);
\r
1548 return nodeStatus;
\r
1551 private void loadTreeViewStates(List<Boolean> nodeStatus)
\r
1553 // And finally, re-expand any of the nodes if required
\r
1555 foreach (TreeNode node in treeView_presets.Nodes)
\r
1557 if (nodeStatus[i] == true)
\r
1560 foreach (TreeNode subNode in node.Nodes)
\r
1562 if (nodeStatus[i] == true)
\r
1572 private void loadNormalPreset()
\r
1574 treeView_presets.Nodes.Find("Normal", true);
\r
1576 foreach (TreeNode treenode in treeView_presets.Nodes)
\r
1578 foreach (TreeNode node in treenode.Nodes)
\r
1580 if (node.Text.ToString().Equals("Normal"))
\r
1581 treeView_presets.SelectedNode = treeView_presets.Nodes[treenode.Index].Nodes[0];
\r
1586 /// Take in a File destination and change it's file extension to a new Extension
\r
1588 /// <param name="destination"></param>
\r
1589 /// <param name="newExtension"></param>
\r
1590 /// <returns>String of the new file path and extension</returns>
\r
1591 public void setExtension(string newExtension)
\r
1593 text_destination.Text = text_destination.Text.Replace(".mp4", newExtension);
\r
1594 text_destination.Text = text_destination.Text.Replace(".m4v", newExtension);
\r
1595 text_destination.Text = text_destination.Text.Replace(".mkv", newExtension);
\r
1596 text_destination.Text = text_destination.Text.Replace(".avi", newExtension);
\r
1597 text_destination.Text = text_destination.Text.Replace(".ogm", newExtension);
\r
1601 #region Drive Detection
\r
1602 // Source Button Drive Detection
\r
1603 private delegate void ProgressUpdateHandler();
\r
1604 private void getDriveInfoThread()
\r
1608 if (this.InvokeRequired)
\r
1610 this.BeginInvoke(new ProgressUpdateHandler(getDriveInfoThread));
\r
1614 Boolean foundDrive = false;
\r
1615 DriveInfo[] theCollectionOfDrives = DriveInfo.GetDrives();
\r
1616 foreach (DriveInfo curDrive in theCollectionOfDrives)
\r
1618 if (curDrive.DriveType == DriveType.CDRom)
\r
1620 if (curDrive.IsReady)
\r
1622 if (File.Exists(curDrive.RootDirectory.ToString() + "VIDEO_TS\\VIDEO_TS.IFO"))
\r
1623 mnu_dvd_drive.Text = curDrive.RootDirectory.ToString() + "VIDEO_TS (" + curDrive.VolumeLabel + ")";
\r
1625 mnu_dvd_drive.Text = "[DVD
\83h
\83\89\83C
\83u
\82É
\83f
\83B
\83X
\83N
\82ª
\82 \82è
\82Ü
\82¹
\82ñ]";
\r
1627 foundDrive = true;
\r
1633 if (foundDrive == false)
\r
1634 mnu_dvd_drive.Text = "[DVD
\83h
\83\89\83C
\83u
\82É
\83f
\83B
\83X
\83N
\82ª
\82 \82è
\82Ü
\82¹
\82ñ]";
\r
1638 mnu_dvd_drive.Text = "[DVD
\83h
\83\89\83C
\83u
\82É
\83f
\83B
\83X
\83N
\82ª
\82 \82è
\82Ü
\82¹
\82ñ]";
\r
1643 #region Audio Panel Stuff
\r
1644 public void setAudioByContainer(String path)
\r
1646 string oldval = "";
\r
1648 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
1650 oldval = drp_audenc_1.Text;
\r
1651 drp_audenc_1.Items.Clear();
\r
1652 drp_audenc_1.Items.Add("AAC");
\r
1653 drp_audenc_1.Items.Add("AC3");
\r
1654 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1655 drp_audenc_1.SelectedIndex = 0;
\r
1657 oldval = drp_audenc_2.Text;
\r
1658 drp_audenc_2.Items.Clear();
\r
1659 drp_audenc_2.Items.Add("AAC");
\r
1660 drp_audenc_2.Items.Add("AC3");
\r
1661 if (drp_audenc_2.Enabled)
\r
1663 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1664 drp_audenc_2.SelectedIndex = 0;
\r
1667 oldval = drp_audenc_3.Text;
\r
1668 drp_audenc_3.Items.Clear();
\r
1669 drp_audenc_3.Items.Add("AAC");
\r
1670 drp_audenc_3.Items.Add("AC3");
\r
1671 if (drp_audenc_3.Enabled)
\r
1673 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1674 drp_audenc_3.SelectedIndex = 0;
\r
1677 oldval = drp_audenc_4.Text;
\r
1678 drp_audenc_4.Items.Clear();
\r
1679 drp_audenc_4.Items.Add("AAC");
\r
1680 drp_audenc_4.Items.Add("AC3");
\r
1681 if (drp_audenc_4.Enabled)
\r
1683 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1684 drp_audenc_4.SelectedIndex = 0;
\r
1687 else if (path.EndsWith(".avi"))
\r
1689 oldval = drp_audenc_1.Text;
\r
1690 drp_audenc_1.Items.Clear();
\r
1691 drp_audenc_1.Items.Add("MP3");
\r
1692 drp_audenc_1.Items.Add("AC3");
\r
1693 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1694 drp_audenc_1.SelectedIndex = 0;
\r
1696 oldval = drp_audenc_2.Text;
\r
1697 drp_audenc_2.Items.Clear();
\r
1698 drp_audenc_2.Items.Add("MP3");
\r
1699 drp_audenc_2.Items.Add("AC3");
\r
1700 if (drp_audenc_2.Enabled)
\r
1702 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1703 drp_audenc_2.SelectedIndex = 0;
\r
1707 oldval = drp_audenc_3.Text;
\r
1708 drp_audenc_3.Items.Clear();
\r
1709 drp_audenc_3.Items.Add("MP3");
\r
1710 drp_audenc_3.Items.Add("AC3");
\r
1711 if (drp_audenc_3.Enabled)
\r
1713 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1714 drp_audenc_3.SelectedIndex = 0;
\r
1717 oldval = drp_audenc_4.Text;
\r
1718 drp_audenc_4.Items.Clear();
\r
1719 drp_audenc_4.Items.Add("MP3");
\r
1720 drp_audenc_4.Items.Add("AC3");
\r
1721 if (drp_audenc_4.Enabled)
\r
1723 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1724 drp_audenc_4.SelectedIndex = 0;
\r
1727 else if (path.EndsWith(".ogm"))
\r
1729 drp_audenc_1.Items.Clear();
\r
1730 drp_audenc_1.Items.Add("Vorbis");
\r
1731 drp_audenc_1.SelectedIndex = 0;
\r
1733 drp_audenc_2.Items.Clear();
\r
1734 drp_audenc_2.Items.Add("Vorbis");
\r
1735 if (drp_audenc_2.Enabled)
\r
1736 drp_audenc_2.SelectedIndex = 0;
\r
1738 drp_audenc_3.Items.Clear();
\r
1739 drp_audenc_3.Items.Add("Vorbis");
\r
1740 if (drp_audenc_3.Enabled)
\r
1741 drp_audenc_3.SelectedIndex = 0;
\r
1743 drp_audenc_4.Items.Clear();
\r
1744 drp_audenc_4.Items.Add("Vorbis");
\r
1745 if (drp_audenc_4.Enabled)
\r
1746 drp_audenc_4.SelectedIndex = 0;
\r
1748 else if (path.EndsWith(".mkv"))
\r
1750 drp_audenc_1.Items.Clear();
\r
1751 drp_audenc_1.Items.Add("AAC");
\r
1752 drp_audenc_1.Items.Add("MP3");
\r
1753 drp_audenc_1.Items.Add("AC3");
\r
1754 drp_audenc_1.Items.Add("Vorbis");
\r
1755 if (drp_audenc_1.Text == string.Empty)
\r
1756 drp_audenc_1.SelectedIndex = 0;
\r
1759 drp_audenc_2.Items.Clear();
\r
1760 drp_audenc_2.Items.Add("AAC");
\r
1761 drp_audenc_2.Items.Add("MP3");
\r
1762 drp_audenc_2.Items.Add("AC3");
\r
1763 drp_audenc_2.Items.Add("Vorbis");
\r
1764 if (drp_audenc_2.Enabled)
\r
1766 if (drp_audenc_2.Text == string.Empty)
\r
1767 drp_audenc_2.SelectedIndex = 0;
\r
1770 drp_audenc_3.Items.Clear();
\r
1771 drp_audenc_3.Items.Add("AAC");
\r
1772 drp_audenc_3.Items.Add("MP3");
\r
1773 drp_audenc_3.Items.Add("AC3");
\r
1774 drp_audenc_3.Items.Add("Vorbis");
\r
1775 if (drp_audenc_3.Enabled)
\r
1777 if (drp_audenc_3.Text == string.Empty)
\r
1778 drp_audenc_3.SelectedIndex = 0;
\r
1781 drp_audenc_4.Items.Clear();
\r
1782 drp_audenc_4.Items.Add("AAC");
\r
1783 drp_audenc_4.Items.Add("MP3");
\r
1784 drp_audenc_4.Items.Add("AC3");
\r
1785 drp_audenc_4.Items.Add("Vorbis");
\r
1786 if (drp_audenc_4.Enabled)
\r
1788 if (drp_audenc_4.Text == string.Empty)
\r
1789 drp_audenc_4.SelectedIndex = 0;
\r
1793 public void setVideoByContainer(String path)
\r
1795 string oldval = "";
\r
1797 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\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 if (oldval == "VP3 (Theora)")
\r
1805 drp_videoEncoder.SelectedIndex = 2;
\r
1807 drp_videoEncoder.Text = oldval;
\r
1810 else if (path.EndsWith(".avi"))
\r
1812 oldval = drp_videoEncoder.Text;
\r
1813 drp_videoEncoder.Items.Clear();
\r
1814 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1815 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1816 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1817 if (oldval == "VP3 (Theora)")
\r
1818 drp_videoEncoder.SelectedIndex = 2;
\r
1820 drp_videoEncoder.Text = oldval;
\r
1822 else if (path.EndsWith(".ogm"))
\r
1824 oldval = drp_videoEncoder.Text;
\r
1825 drp_videoEncoder.Items.Clear();
\r
1826 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1827 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1828 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1829 if (oldval == "H.264 (x264)")
\r
1830 drp_videoEncoder.SelectedIndex = 2;
\r
1832 drp_videoEncoder.Text = oldval;
\r
1834 else if (path.EndsWith(".mkv"))
\r
1836 oldval = drp_videoEncoder.Text;
\r
1837 drp_videoEncoder.Items.Clear();
\r
1838 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1839 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1840 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1841 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1842 drp_videoEncoder.Text = oldval;
\r
1845 public void setBitrateSelections384(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
1858 dropDown.Items.Add("192");
\r
1859 dropDown.Items.Add("224");
\r
1860 dropDown.Items.Add("256");
\r
1861 dropDown.Items.Add("320");
\r
1862 dropDown.Items.Add("384");
\r
1864 public void setBitrateSelections320(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
1877 dropDown.Items.Add("192");
\r
1878 dropDown.Items.Add("224");
\r
1879 dropDown.Items.Add("256");
\r
1880 dropDown.Items.Add("320");
\r
1882 public void setBitrateSelections160(ComboBox dropDown)
\r
1884 dropDown.Items.Clear();
\r
1885 dropDown.Items.Add("32");
\r
1886 dropDown.Items.Add("40");
\r
1887 dropDown.Items.Add("48");
\r
1888 dropDown.Items.Add("56");
\r
1889 dropDown.Items.Add("64");
\r
1890 dropDown.Items.Add("80");
\r
1891 dropDown.Items.Add("86");
\r
1892 dropDown.Items.Add("112");
\r
1893 dropDown.Items.Add("128");
\r
1894 dropDown.Items.Add("160");
\r
1901 private delegate void UpdateUIHandler();
\r
1903 // Encoding Functions
\r
1904 private void procMonitor(object state)
\r
1906 // Make sure we are not already encoding and if we are then display an error.
\r
1907 if (hbProc != null)
\r
1908 hbProc.CloseMainWindow();
\r
1911 hbProc = cliObj.runCli(this, (string)state);
\r
1912 hbProc.WaitForExit();
\r
1913 setEncodeLabelFinished();
\r
1916 // If the window is minimized, display the notification in a popup.
\r
1917 if (FormWindowState.Minimized == this.WindowState)
\r
1919 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
1920 notifyIcon.ShowBalloonTip(500);
\r
1923 // After the encode is done, we may want to shutdown, suspend etc.
\r
1924 cliObj.addCLIQueryToLog((string)state);
\r
1925 cliObj.copyLog((string)state); // Make a copy of the log in the users desired location if necessary
\r
1926 cliObj.afterEncodeAction();
\r
1929 private void setEncodeLabelFinished()
\r
1931 if (this.InvokeRequired)
\r
1933 this.BeginInvoke(new UpdateUIHandler(setEncodeLabelFinished));
\r
1936 lbl_encode.Text = "
\83G
\83\93\83R
\81[
\83h
\8a®
\97¹";
\r
1937 btn_start.Text = "
\95Ï
\8a·
\8aJ
\8en";
\r
1938 btn_start.ToolTipText = "
\83G
\83\93\83R
\81[
\83h
\8f\88\97\9d\82ð
\8aJ
\8en
\82µ
\82Ü
\82·";
\r
1939 btn_start.Image = Properties.Resources.Play;
\r
1944 #region Public Methods
\r
1947 /// Is the mainWindow currently monitoring an encoding session
\r
1949 /// <returns>boolean</returns>
\r
1950 public Boolean isEncoding()
\r
1952 if (hbProc == null)
\r
1959 /// Action can be "encode" or "scan"
\r
1960 /// Set the last action varible in the main window.
\r
1961 /// This is used to control which log file is displayed when the Activity window is displayed.
\r
1963 /// <param name="last">String</param>
\r
1964 public void setLastAction(string last)
\r
1966 this.lastAction = last;
\r
1970 /// DVD parseing. Pass in a parsed DVD.
\r
1972 /// <param name="dvd"></param>
\r
1973 public void setStreamReader(Parsing.DVD dvd)
\r
1975 this.thisDVD = dvd;
\r
1979 /// Reload the preset panel display
\r
1981 public void loadPresetPanel()
\r
1983 presetHandler.loadPresetData();
\r
1985 treeView_presets.Nodes.Clear();
\r
1987 List<Presets.Preset> presetNameList = new List<Presets.Preset>();
\r
1988 List<string> presetNames = new List<string>();
\r
1989 TreeNode preset_treeview = new TreeNode();
\r
1991 TreeNode rootNode = new TreeNode();
\r
1992 TreeNode rootNodeTwo = new TreeNode();
\r
1993 TreeNode childNode = new TreeNode();
\r
1994 int workingLevel = 0;
\r
1995 string previousCategory = String.Empty;
\r
1996 string currentCategory = String.Empty;
\r
1998 presetNameList = presetHandler.getBuildInPresets();
\r
1999 if (presetNameList.Count != 0)
\r
2001 foreach (Presets.Preset preset in presetNameList)
\r
2003 // Handle Root Nodes
\r
2005 // First Case - No presets have been read yet so setup the root category
\r
2006 if (preset.Level == 1 && currentCategory == String.Empty)
\r
2008 rootNode = new TreeNode(preset.Category);
\r
2009 workingLevel = preset.Level;
\r
2010 currentCategory = preset.Category;
\r
2011 previousCategory = preset.Category;
\r
2014 // Second Case - This is the first sub child node.
\r
2015 if (preset.Level == 2 && workingLevel == 1 && currentCategory != preset.Category)
\r
2017 rootNodeTwo = new TreeNode(preset.Category);
\r
2018 workingLevel = preset.Level;
\r
2019 currentCategory = preset.Category;
\r
2020 rootNode.Nodes.Add(rootNodeTwo);
\r
2023 // Third Case - Any presets the sub presets detected in the above if statment.
\r
2024 if (preset.Level == 1 && workingLevel == 2)
\r
2026 workingLevel = preset.Level;
\r
2027 currentCategory = preset.Category;
\r
2030 // Fourth Case - We've finished this root node and are onto the next root node.
\r
2031 if (preset.Level == 1 && workingLevel == 1 && previousCategory != preset.Category)
\r
2033 treeView_presets.Nodes.Add(rootNode); // Add the finished node
\r
2035 rootNode = new TreeNode(preset.Category);
\r
2036 workingLevel = preset.Level;
\r
2037 currentCategory = preset.Category;
\r
2038 previousCategory = preset.Category;
\r
2041 // Handle Child Nodes
\r
2042 // Add First level child nodes to the current root node
\r
2043 if (preset.Level == 1 && workingLevel == 1 && currentCategory == preset.Category)
\r
2045 childNode = new TreeNode(preset.Name);
\r
2046 rootNode.Nodes.Add(childNode);
\r
2049 // Add Second level child nodes to the current sub root node
\r
2050 if (preset.Level == 2 && workingLevel == 2 && currentCategory == preset.Category)
\r
2052 childNode = new TreeNode(preset.Name);
\r
2053 rootNodeTwo.Nodes.Add(childNode);
\r
2057 // Add the final root node which does not get added above.
\r
2058 treeView_presets.Nodes.Add(rootNode);
\r
2063 presetNames = presetHandler.getUserPresetNames();
\r
2064 foreach (string preset in presetNames)
\r
2066 preset_treeview = new TreeNode(preset);
\r
2067 preset_treeview.ForeColor = Color.Black;
\r
2069 // Now Fill Out List View with Items
\r
2070 treeView_presets.Nodes.Add(preset_treeview);
\r
2076 #region Taskbar Tray Icon
\r
2077 private void frmMain_Resize(object sender, EventArgs e)
\r
2079 if (FormWindowState.Minimized == this.WindowState)
\r
2081 notifyIcon.Visible = true;
\r
2082 if (lbl_encode.Text != "")
\r
2083 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
2085 notifyIcon.BalloonTipText = "Not Encoding";
\r
2086 notifyIcon.ShowBalloonTip(500);
\r
2089 else if (FormWindowState.Normal == this.WindowState)
\r
2090 notifyIcon.Visible = false;
\r
2092 private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
\r
2094 this.Visible = true;
\r
2096 this.WindowState = FormWindowState.Normal;
\r
2097 notifyIcon.Visible = false;
\r
2099 private void btn_minimize_Click(object sender, EventArgs e)
\r
2101 this.WindowState = FormWindowState.Minimized;
\r
2103 private void btn_restore_Click(object sender, EventArgs e)
\r
2105 this.Visible = true;
\r
2107 this.WindowState = FormWindowState.Normal;
\r
2108 notifyIcon.Visible = false;
\r
2114 // This is the END of the road ------------------------------------------------------------------------------
\r