X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=win%2FC%23%2FfrmMain.cs;h=83ea0de121def14055c8959f83491b84510490ad;hb=8d0c431738a99cd4776cc31e195fea690f6fb20a;hp=c8753d184d93636b1be803c7b82e50c63d310fda;hpb=391e7675424309678ca22e58a17d4aad5a9075ba;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/win/C#/frmMain.cs b/win/C#/frmMain.cs index c8753d18..83ea0de1 100644 --- a/win/C#/frmMain.cs +++ b/win/C#/frmMain.cs @@ -8,23 +8,20 @@ using System; using System.Collections; using System.Collections.Generic; using System.Drawing; -using System.Text; using System.Windows.Forms; using System.IO; using System.Diagnostics; using System.Threading; -using System.Runtime.InteropServices; -using System.Globalization; -using System.Text.RegularExpressions; namespace Handbrake { public partial class frmMain : Form { // Objects which may be used by one or more other objects + private delegate void UpdateWindowHandler(); Functions.Main hb_common_func = new Functions.Main(); - Functions.Encode cliObj = new Functions.Encode(); - Queue.Queue encodeQueue = new Queue.Queue(); + Functions.Encode encodeHandler = new Functions.Encode(); + Queue.QueueHandler encodeQueue = new Queue.QueueHandler(); Presets.PresetsHandler presetHandler = new Presets.PresetsHandler(); Parsing.Title selectedTitle; Parsing.DVD thisDVD; @@ -36,7 +33,8 @@ namespace Handbrake // Globals: Mainly used for tracking. private frmQueue queueWindow; - private frmGenPreview preview; + private frmGenPreview vlcpreview; + private frmPreview qtpreview; private string lastAction = null; public int maxWidth = 0; public int maxHeight = 0; @@ -86,18 +84,35 @@ namespace Handbrake loadPresetPanel(); // Load the Preset Panel treeView_presets.ExpandAll(); lbl_encode.Text = ""; - queueWindow = new frmQueue(this); // Prepare the Queue + queueWindow = new frmQueue(encodeQueue); // Prepare the Queue if (Properties.Settings.Default.QueryEditorTab != "Checked") tabs_panel.TabPages.RemoveAt(5); // Remove the query editor tab if the user does not want it enabled. // Load the user's default settings or Normal Preset - if (Properties.Settings.Default.defaultSettings == "Checked" && Properties.Settings.Default.defaultUserSettings != "") + if (Properties.Settings.Default.defaultSettings == "Checked" && Properties.Settings.Default.defaultPreset != "") { - Functions.QueryParser presetQuery = Functions.QueryParser.Parse(Properties.Settings.Default.defaultUserSettings); - presetLoader.presetLoader(this, presetQuery, "User Defaults "); - // The x264 widgets will need updated, so do this now: - x264PanelFunctions.X264_StandardizeOptString(this); - x264PanelFunctions.X264_SetCurrentSettingsInPanel(this); + // Ok, so, we've selected a preset. Now we want to load it. + if (presetHandler.getPreset(Properties.Settings.Default.defaultPreset) != null) + { + string query = presetHandler.getPreset(Properties.Settings.Default.defaultPreset).Query; + Boolean loadPictureSettings = presetHandler.getPreset(Properties.Settings.Default.defaultPreset).PictureSettings; + + if (query != null) + { + //Ok, Reset all the H264 widgets before changing the preset + x264PanelFunctions.reset2Defaults(this); + + // Send the query from the file to the Query Parser class, then load the preset + Functions.QueryParser presetQuery = Functions.QueryParser.Parse(query); + presetLoader.presetLoader(this, presetQuery, Properties.Settings.Default.defaultPreset, loadPictureSettings); + + // The x264 widgets will need updated, so do this now: + x264PanelFunctions.X264_StandardizeOptString(this); + x264PanelFunctions.X264_SetCurrentSettingsInPanel(this); + } + } + else + loadNormalPreset(); } else loadNormalPreset(); @@ -114,8 +129,7 @@ namespace Handbrake this.Enabled = true; // Event Handlers - if (Properties.Settings.Default.MainWindowMinimize == "Checked") - this.Resize += new EventHandler(frmMain_Resize); + events(); // Queue Recovery queueRecovery(); @@ -161,6 +175,34 @@ namespace Handbrake } #endregion + #region Events + // Encoding Events for setting up the GUI + private void events() + { + // Handle Window Resize + if (Properties.Settings.Default.MainWindowMinimize == "Checked") + this.Resize += new EventHandler(frmMain_Resize); + + // Handle Encode Start + encodeQueue.OnEncodeEnded += new EventHandler(encodeEnded); + encodeQueue.OnPaused += new EventHandler(encodePaused); + encodeQueue.OnEncodeStart += new EventHandler(encodeStarted); + } + private void encodeStarted(object sender, EventArgs e) + { + setLastAction("encode"); + setEncodeStarted(); + } + private void encodeEnded(object sender, EventArgs e) + { + setEncodeFinished(); + } + private void encodePaused(object sender, EventArgs e) + { + setEncodeFinished(); + } + #endregion + // User Interface Menus / Tool Strips ********************************* #region File Menu @@ -173,7 +215,7 @@ namespace Handbrake #region Tools Menu private void mnu_encode_Click(object sender, EventArgs e) { - queueWindow.setQueue(encodeQueue); + queueWindow.setQueue(); queueWindow.Show(); } private void mnu_encodeLog_Click(object sender, EventArgs e) @@ -184,12 +226,12 @@ namespace Handbrake else file = "hb_encode_log.dat"; - frmActivityWindow dvdInfoWindow = new frmActivityWindow(file, this, queueWindow); + frmActivityWindow dvdInfoWindow = new frmActivityWindow(file, encodeHandler); dvdInfoWindow.Show(); } private void mnu_options_Click(object sender, EventArgs e) { - Form Options = new frmOptions(this); + Form Options = new frmOptions(); Options.ShowDialog(); } #endregion @@ -286,6 +328,14 @@ namespace Handbrake { treeView_presets.CollapseAll(); } + private void pmnu_saveChanges_Click(object sender, EventArgs e) + { + DialogResult result = MessageBox.Show("Do you wish to include picture settings when updating the preset: " + treeView_presets.SelectedNode.Text, "Update Preset", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); + if (result == DialogResult.Yes) + presetHandler.updatePreset(treeView_presets.SelectedNode.Text, queryGen.generateTabbedComponentsQuery(this), true); + else if (result == DialogResult.No) + presetHandler.updatePreset(treeView_presets.SelectedNode.Text, queryGen.generateTabbedComponentsQuery(this), false); + } private void pmnu_delete_click(object sender, EventArgs e) { if (treeView_presets.SelectedNode != null) @@ -303,6 +353,21 @@ namespace Handbrake } treeView_presets.Select(); } + private void presets_menu_Opening(object sender, System.ComponentModel.CancelEventArgs e) + { + // Make sure that the save menu is always disabled by default + pmnu_saveChanges.Enabled = false; + + // Now enable the save menu if the selected preset is a user preset + if (treeView_presets.SelectedNode != null) + { + if (presetHandler.checkIfUserPresetExists(treeView_presets.SelectedNode.Text)) + { + pmnu_saveChanges.Enabled = true; + } + } + treeView_presets.Select(); + } // Presets Management private void btn_addPreset_Click(object sender, EventArgs e) @@ -339,11 +404,14 @@ namespace Handbrake } private void btn_setDefault_Click(object sender, EventArgs e) { - String query = queryGen.GenerateTheQuery(this); - Properties.Settings.Default.defaultUserSettings = query; - // Save the new default Settings - Properties.Settings.Default.Save(); - MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); + if (treeView_presets.SelectedNode != null) + { + Properties.Settings.Default.defaultPreset = treeView_presets.SelectedNode.Text; + Properties.Settings.Default.Save(); + MessageBox.Show("New default preset set.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + MessageBox.Show("Please select a preset first.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } private void treeview_presets_mouseUp(object sender, MouseEventArgs e) { @@ -364,22 +432,26 @@ namespace Handbrake { // Ok, so, we've selected a preset. Now we want to load it. string presetName = treeView_presets.SelectedNode.Text; - string query = presetHandler.getCliForPreset(presetName); - - if (query != null) + if (presetHandler.getPreset(presetName) != null) { - //Ok, Reset all the H264 widgets before changing the preset - x264PanelFunctions.reset2Defaults(this); + string query = presetHandler.getPreset(presetName).Query; + Boolean loadPictureSettings = presetHandler.getPreset(presetName).PictureSettings; + + if (query != null) + { + //Ok, Reset all the H264 widgets before changing the preset + x264PanelFunctions.reset2Defaults(this); - // Send the query from the file to the Query Parser class - Functions.QueryParser presetQuery = Functions.QueryParser.Parse(query); + // Send the query from the file to the Query Parser class + Functions.QueryParser presetQuery = Functions.QueryParser.Parse(query); - // Now load the preset - presetLoader.presetLoader(this, presetQuery, presetName); + // Now load the preset + presetLoader.presetLoader(this, presetQuery, presetName, loadPictureSettings); - // The x264 widgets will need updated, so do this now: - x264PanelFunctions.X264_StandardizeOptString(this); - x264PanelFunctions.X264_SetCurrentSettingsInPanel(this); + // The x264 widgets will need updated, so do this now: + x264PanelFunctions.X264_StandardizeOptString(this); + x264PanelFunctions.X264_SetCurrentSettingsInPanel(this); + } } } } @@ -478,9 +550,20 @@ namespace Handbrake if (result == DialogResult.Yes) { - queueWindow.frmMain_cancelEncode(); - if (!queueWindow.isEncoding()) - setEncodeStatus(0); + // Pause The Queue + encodeQueue.pauseEncode(); + + // Kill the current process. + Process[] aProc = Process.GetProcessesByName("HandBrakeCLI"); + Process HandBrakeCLI; + if (aProc.Length > 0) + { + HandBrakeCLI = aProc[0]; + HandBrakeCLI.Kill(); + } + + // Update the GUI + setEncodeFinished(); } } else @@ -502,13 +585,13 @@ namespace Handbrake encodeQueue.add(query, text_source.Text, text_destination.Text); encodeQueue.write2disk("hb_queue_recovery.xml"); } - queueWindow.setQueue(encodeQueue); + queueWindow.setQueue(); if (encodeQueue.count() > 1) queueWindow.Show(); - queueWindow.frmMain_encode(); + setEncodeStarted(); // Encode is running, so setup the GUI appropriately + encodeQueue.startEncode(); // Start The Queue Encoding Process - setEncodeStatus(1); // Encode is running, so setup the GUI appropriately } else if (text_source.Text == string.Empty || text_source.Text == "Click 'Source' to continue" || text_destination.Text == string.Empty) MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); @@ -528,30 +611,50 @@ namespace Handbrake encodeQueue.add(query, text_source.Text, text_destination.Text); encodeQueue.write2disk("hb_queue_recovery.xml"); // Writes the queue to the recovery file, just incase the GUI crashes. - queueWindow.setQueue(encodeQueue); + queueWindow.setQueue(); queueWindow.Show(); } } private void btn_showQueue_Click(object sender, EventArgs e) { - queueWindow.setQueue(encodeQueue); + queueWindow.setQueue(); queueWindow.Show(); } - private void btn_vidPreview_Click(object sender, EventArgs e) + private void mnu_vlcpreview_Click(object sender, EventArgs e) + { + if (text_source.Text == "" || text_source.Text == "Click 'Source' to continue" || text_destination.Text == "") + MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); + else + { + if (vlcpreview == null) + { + vlcpreview = new frmGenPreview(this); + vlcpreview.Show(); + } + else if (vlcpreview.IsDisposed) + { + vlcpreview = new frmGenPreview(this); + vlcpreview.Show(); + } + else + MessageBox.Show("The preview window is already open!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + private void mnu_qtpreview_Click(object sender, EventArgs e) { if (text_source.Text == "" || text_source.Text == "Click 'Source' to continue" || text_destination.Text == "") MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); else { - if (preview == null) + if (qtpreview == null) { - preview = new frmGenPreview(this); - preview.Show(); + qtpreview = new frmPreview(this); + qtpreview.Show(); } - else if (preview.IsDisposed) + else if (qtpreview.IsDisposed) { - preview = new frmGenPreview(this); - preview.Show(); + qtpreview = new frmPreview(this); + qtpreview.Show(); } else MessageBox.Show("The preview window is already open!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); @@ -565,7 +668,7 @@ namespace Handbrake else file = "hb_encode_log.dat"; - frmActivityWindow ActivityWindow = new frmActivityWindow(file, this, queueWindow); + frmActivityWindow ActivityWindow = new frmActivityWindow(file, encodeHandler); ActivityWindow.Show(); } #endregion @@ -832,15 +935,15 @@ namespace Handbrake DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", ""); // Show the dialog and set the main form file path - if (text_destination.Text.EndsWith(".mp4")) + if (drop_format.SelectedIndex.Equals(0)) DVD_Save.FilterIndex = 1; - else if (text_destination.Text.EndsWith(".m4v")) + else if (drop_format.SelectedIndex.Equals(1)) DVD_Save.FilterIndex = 2; - else if (text_destination.Text.EndsWith(".avi")) + else if (drop_format.SelectedIndex.Equals(2)) DVD_Save.FilterIndex = 3; - else if (text_destination.Text.EndsWith(".ogm")) + else if (drop_format.SelectedIndex.Equals(3)) DVD_Save.FilterIndex = 4; - else if (text_destination.Text.EndsWith(".mkv")) + else if (drop_format.SelectedIndex.Equals(4)) DVD_Save.FilterIndex = 5; if (DVD_Save.ShowDialog() == DialogResult.OK) @@ -984,6 +1087,9 @@ namespace Handbrake //Picture Tab private void text_width_TextChanged(object sender, EventArgs e) { + if (text_width.Text == "") + text_width.BackColor = Color.White; + maxWidth = 0; maxHeight = 0; // Reset max width so that it's not using the MaxWidth -X. Quick hack to allow -X for preset usage. int width; @@ -1009,6 +1115,9 @@ namespace Handbrake } private void text_height_TextChanged(object sender, EventArgs e) { + if (text_height.Text == "") + text_height.BackColor = Color.White; + maxHeight = 0; // Reset max height so that it's not using the MaxHeight -Y. Quick hack to allow -Y for preset usage. int height; @@ -1143,7 +1252,7 @@ namespace Handbrake setBitrateSelections384(drp_audbit_1); else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete")) setBitrateSelections160(drp_audbit_1); drp_audbit_1.Text = "160"; - + // Update an item in the Audio list if required. if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0) { @@ -1238,7 +1347,7 @@ namespace Handbrake } } - + private void audioList_remove_Click(object sender, EventArgs e) { removeAudioTrack(); @@ -1294,7 +1403,7 @@ namespace Handbrake else check_forced.Enabled = true; } - + // Chapter Marker Tab private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e) { @@ -1649,16 +1758,16 @@ namespace Handbrake else { // Just make sure not to re-enable the following boxes if the track above is none - /* if (drp_track2Audio.Text != "None") - { - audMix.Enabled = true; - audbit.Enabled = true; - audsr.Enabled = true; + /* if (drp_track2Audio.Text != "None") + { + audMix.Enabled = true; + audbit.Enabled = true; + audsr.Enabled = true; - audMix.Text = "Automatic"; - audbit.Text = "160"; - audsr.Text = "Auto"; - }*/ + audMix.Text = "Automatic"; + audbit.Text = "160"; + audsr.Text = "Auto"; + }*/ } } #endregion @@ -1671,10 +1780,16 @@ namespace Handbrake /// 0 = Encode Finished. /// /// Int - public void setEncodeStatus(int i) + public void setEncodeFinished() { - if (i == 0) + try { + if (this.InvokeRequired) + { + this.BeginInvoke(new UpdateWindowHandler(setEncodeFinished)); + return; + } + lbl_encode.Text = "Encoding Finished"; btn_start.Text = "Start"; btn_start.ToolTipText = "Start the encoding process"; @@ -1686,15 +1801,33 @@ namespace Handbrake notifyIcon.BalloonTipText = lbl_encode.Text; notifyIcon.ShowBalloonTip(500); } + } - else + catch (Exception exc) + { + MessageBox.Show(exc.ToString()); + } + } + public void setEncodeStarted() + { + try { + if (this.InvokeRequired) + { + this.BeginInvoke(new UpdateWindowHandler(setEncodeStarted)); + return; + } + lbl_encode.Visible = true; lbl_encode.Text = "Encoding in Progress"; btn_start.Text = "Stop"; 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."; btn_start.Image = Properties.Resources.stop; } + catch (Exception exc) + { + MessageBox.Show(exc.ToString()); + } } /// @@ -1814,6 +1947,9 @@ namespace Handbrake #endregion + + + // This is the END of the road ------------------------------------------------------------------------------ } } \ No newline at end of file