OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain.cs
index d3595e4..d66692d 100644 (file)
@@ -39,6 +39,8 @@ namespace Handbrake
         private frmQueue queueWindow;\r
         private delegate void updateStatusChanger();\r
         private string lastAction = null;\r
+        public int maxWidth = 0;\r
+        public int maxHeight = 0;\r
 \r
         // Applicaiton Startup ************************************************\r
 \r
@@ -237,6 +239,8 @@ namespace Handbrake
                 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
             else\r
                 MessageBox.Show("Presets have been updated!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
+\r
+            treeView_presets.ExpandAll();\r
         }\r
         private void mnu_delete_preset_Click(object sender, EventArgs e)\r
         {\r
@@ -265,8 +269,15 @@ namespace Handbrake
         }\r
         private void btn_new_preset_Click(object sender, EventArgs e)\r
         {\r
+            // Remember each nodes expanded status so we can reload it\r
+            List<Boolean> nodeStatus = saveTreeViewState();\r
+            nodeStatus.Add(true);\r
+\r
             Form preset = new frmAddPreset(this, queryGen.GenerateTheQuery(this), presetHandler);\r
             preset.ShowDialog();\r
+\r
+            // Now reload the TreeView states\r
+            loadTreeViewStates(nodeStatus);\r
         }\r
         #endregion\r
 \r
@@ -323,30 +334,19 @@ namespace Handbrake
                 presetHandler.remove(treeView_presets.SelectedNode.Text);\r
 \r
                 // Remember each nodes expanded status so we can reload it\r
-                List<Boolean> nodeStatus = new List<Boolean>();\r
-                foreach (TreeNode node in treeView_presets.Nodes)\r
-                {\r
-                    nodeStatus.Add(node.IsExpanded);\r
-                }\r
+                List<Boolean> nodeStatus = saveTreeViewState();\r
 \r
+                // Now reload the preset panel\r
                 loadPresetPanel();\r
 \r
-                int i = 0;\r
-                foreach (TreeNode node in treeView_presets.Nodes)\r
-                {\r
-                    if (nodeStatus[i] == true)\r
-                        node.Expand();\r
-\r
-                    i++;\r
-                }\r
+                // Now reload the TreeView states\r
+                loadTreeViewStates(nodeStatus);\r
             }\r
             treeView_presets.Select();\r
         }\r
         #endregion\r
 \r
-\r
         // MainWindow Components, Actions and Functions ***********************\r
-\r
         #region Actions\r
 \r
         // ToolBar\r
@@ -424,6 +424,9 @@ namespace Handbrake
         //Source\r
         private void btn_dvd_source_Click(object sender, EventArgs e)\r
         {\r
+            // Enable the creation of chapter markers.\r
+            Check_ChapterMarkers.Enabled = true;\r
+\r
             // Set the last action to scan. \r
             // This is used for tracking which file to load in the activity window\r
             lastAction = "scan";\r
@@ -486,10 +489,23 @@ namespace Handbrake
                     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
 \r
                 lbl_encode.Text = "";\r
+\r
+                // Enable the creation of chapter markers if the file is an image of a dvd.\r
+                if (filename.ToLower().Contains(".iso"))\r
+                    Check_ChapterMarkers.Enabled = true;\r
+                else\r
+                {\r
+                    Check_ChapterMarkers.Enabled = false;\r
+                    Check_ChapterMarkers.Checked = false;\r
+                    data_chpt.Rows.Clear();\r
+                }\r
             }\r
         }\r
         private void mnu_dvd_drive_Click(object sender, EventArgs e)\r
         {\r
+            // Enable the creation of chapter markers.\r
+            Check_ChapterMarkers.Enabled = true;\r
+\r
             // Set the last action to scan. \r
             // This is used for tracking which file to load in the activity window\r
             lastAction = "scan";\r
@@ -648,18 +664,31 @@ namespace Handbrake
             DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", "");\r
 \r
             // Show the dialog and set the main form file path\r
-            DVD_Save.ShowDialog();\r
-            if (DVD_Save.FileName.StartsWith("\\"))\r
-                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
-            else\r
-            {\r
-                setAudioByContainer(DVD_Save.FileName);\r
 \r
-                text_destination.Text = DVD_Save.FileName;\r
+            if (text_destination.Text.EndsWith(".mp4"))\r
+                DVD_Save.FilterIndex = 1;\r
+            else if (text_destination.Text.EndsWith(".m4v"))\r
+                DVD_Save.FilterIndex = 2;\r
+            else if (text_destination.Text.EndsWith(".avi"))\r
+                DVD_Save.FilterIndex = 3;\r
+            else if (text_destination.Text.EndsWith(".ogm"))\r
+                DVD_Save.FilterIndex = 4;\r
+            else if (text_destination.Text.EndsWith(".mkv"))\r
+                DVD_Save.FilterIndex = 5;\r
+\r
+            if (DVD_Save.ShowDialog() == DialogResult.OK)\r
+            {\r
+                if (DVD_Save.FileName.StartsWith("\\"))\r
+                    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
+                else\r
+                {\r
+                    setAudioByContainer(DVD_Save.FileName);\r
+                    text_destination.Text = DVD_Save.FileName;\r
 \r
-                // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)\r
-                if (Check_ChapterMarkers.Checked)\r
-                    text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v");\r
+                    // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)\r
+                    if (Check_ChapterMarkers.Checked)\r
+                        text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v");\r
+                }\r
             }\r
         }\r
         private void text_destination_TextChanged(object sender, EventArgs e)\r
@@ -684,15 +713,16 @@ namespace Handbrake
         private void drop_format_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
             if (drop_format.SelectedIndex == 0)\r
-                text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".mp4");\r
+                setExtension(".mp4");\r
             else if (drop_format.SelectedIndex == 1)\r
-                text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".m4v");\r
+                setExtension(".m4v");\r
             else if (drop_format.SelectedIndex == 2)\r
-                text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".mkv");\r
+                setExtension(".mkv");\r
             else if (drop_format.SelectedIndex == 3)\r
-                text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".avi");\r
+                setExtension(".avi");\r
             else if (drop_format.SelectedIndex == 4)\r
-                text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".ogm");\r
+                setExtension(".ogm");\r
+\r
         }\r
 \r
         //Video Tab\r
@@ -781,6 +811,8 @@ namespace Handbrake
         //Picture Tab\r
         private void text_width_TextChanged(object sender, EventArgs e)\r
         {\r
+            maxWidth = 0;  // Reset max width so that it's not using the MaxWidth -X. Quick hack to allow -X for preset usage.\r
+\r
             int width;\r
             Boolean parsed = int.TryParse(text_width.Text, out width);\r
             if (parsed != false)\r
@@ -791,7 +823,7 @@ namespace Handbrake
                     text_width.BackColor = Color.LightGreen;\r
 \r
 \r
-                if (lbl_Aspect.Text != "Select a Title")\r
+                if (lbl_Aspect.Text != "Select a Title" && maxWidth != 0 && maxHeight != 0)\r
                 {\r
                     if (drp_anamorphic.Text == "None")\r
                     {\r
@@ -803,6 +835,8 @@ namespace Handbrake
         }\r
         private void text_height_TextChanged(object sender, EventArgs e)\r
         {\r
+            maxHeight = 0;  // Reset max height so that it's not using the MaxHeight -Y. Quick hack to allow -Y for preset usage.\r
+\r
             int height;\r
             Boolean parsed = int.TryParse(text_height.Text, out height);\r
             if (parsed != false)\r
@@ -1405,24 +1439,15 @@ namespace Handbrake
         private void btn_addPreset_Click(object sender, EventArgs e)\r
         {\r
             // Remember each nodes expanded status so we can reload it\r
-            List<Boolean> nodeStatus = new List<Boolean>();\r
-            foreach (TreeNode node in treeView_presets.Nodes)\r
-                nodeStatus.Add(node.IsExpanded);\r
+            List<Boolean> nodeStatus = saveTreeViewState();\r
             nodeStatus.Add(true);\r
 \r
             // Now add the new preset\r
             Form preset = new frmAddPreset(this, queryGen.GenerateTheQuery(this), presetHandler);\r
             preset.ShowDialog();\r
 \r
-            // And finally, re-expand any of the nodes if required\r
-            int i = 0;\r
-            foreach (TreeNode node in treeView_presets.Nodes)\r
-            {\r
-                if (nodeStatus[i] == true)\r
-                    node.Expand();\r
-\r
-                i++;\r
-            }\r
+            // Now reload the TreeView states\r
+            loadTreeViewStates(nodeStatus);\r
         }\r
         private void btn_removePreset_Click(object sender, EventArgs e)\r
         {\r
@@ -1431,24 +1456,15 @@ namespace Handbrake
             {\r
                 if (treeView_presets.SelectedNode != null)\r
                     presetHandler.remove(treeView_presets.SelectedNode.Text);\r
-               \r
+\r
                 // Remember each nodes expanded status so we can reload it\r
-                List<Boolean> nodeStatus = new List<Boolean>();\r
-                foreach (TreeNode node in treeView_presets.Nodes)\r
-                    nodeStatus.Add(node.IsExpanded);\r
+                List<Boolean> nodeStatus = saveTreeViewState();\r
 \r
                 // Now reload the preset panel\r
                 loadPresetPanel();\r
 \r
-                // And finally, re-expand any of the nodes if required\r
-                int i = 0;\r
-                foreach (TreeNode node in treeView_presets.Nodes)\r
-                {\r
-                    if (nodeStatus[i] == true)\r
-                        node.Expand();\r
-\r
-                    i++;\r
-                }\r
+                // Now reload the TreeView states\r
+                loadTreeViewStates(nodeStatus);\r
             }\r
             treeView_presets.Select();\r
         }\r
@@ -1515,15 +1531,68 @@ namespace Handbrake
 \r
         #endregion\r
 \r
+        #region Preset Expand / Collaspe\r
+        private List<Boolean> saveTreeViewState()\r
+        {\r
+            // Remember each nodes expanded status so we can reload it\r
+            List<Boolean> nodeStatus = new List<Boolean>();\r
+            foreach (TreeNode node in treeView_presets.Nodes)\r
+            {\r
+                nodeStatus.Add(node.IsExpanded);\r
+                foreach (TreeNode subNode in node.Nodes)\r
+                    nodeStatus.Add(node.IsExpanded);\r
+            }\r
+            return nodeStatus;\r
+        }\r
+\r
+        private void loadTreeViewStates(List<Boolean> nodeStatus)\r
+        {\r
+            // And finally, re-expand any of the nodes if required\r
+            int i = 0;\r
+            foreach (TreeNode node in treeView_presets.Nodes)\r
+            {\r
+                if (nodeStatus[i] == true)\r
+                    node.Expand();\r
+\r
+                foreach (TreeNode subNode in node.Nodes)\r
+                {\r
+                    if (nodeStatus[i] == true)\r
+                        subNode.Expand();\r
+                }\r
+\r
+                i++;\r
+            }\r
+        }\r
+        #endregion\r
+\r
         #region Functions\r
         private void loadNormalPreset()\r
         {\r
+            treeView_presets.Nodes.Find("Normal", true);\r
+\r
             foreach (TreeNode treenode in treeView_presets.Nodes)\r
             {\r
-                if (treenode.Text.ToString().Equals("Normal"))\r
-                    treeView_presets.SelectedNode = treeView_presets.Nodes[treenode.Index];\r
+                foreach (TreeNode node in treenode.Nodes)\r
+                {\r
+                    if (node.Text.ToString().Equals("Normal"))\r
+                        treeView_presets.SelectedNode = treeView_presets.Nodes[treenode.Index].Nodes[0];\r
+                }\r
             }\r
         }\r
+        /// <summary>\r
+        /// Take in a File destination and change it's file extension to a new Extension\r
+        /// </summary>\r
+        /// <param name="destination"></param>\r
+        /// <param name="newExtension"></param>\r
+        /// <returns>String of the new file path and extension</returns>\r
+        public void setExtension(string newExtension)\r
+        {\r
+            text_destination.Text = text_destination.Text.Replace(".mp4", newExtension);\r
+            text_destination.Text = text_destination.Text.Replace(".m4v", newExtension);\r
+            text_destination.Text = text_destination.Text.Replace(".mkv", newExtension);\r
+            text_destination.Text = text_destination.Text.Replace(".avi", newExtension);\r
+            text_destination.Text = text_destination.Text.Replace(".ogm", newExtension);\r
+        }\r
         #endregion\r
 \r
         #region Drive Detection\r
@@ -1849,7 +1918,8 @@ namespace Handbrake
                 }\r
 \r
                 // After the encode is done, we may want to shutdown, suspend etc.\r
-                cliObj.copyLog((string)state);\r
+                cliObj.addCLIQueryToLog((string)state);\r
+                cliObj.copyLog((string)state); // Make a copy of the log in the users desired location if necessary\r
                 cliObj.afterEncodeAction();\r
             }\r
         }\r