OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain.cs
index 584764f..6624915 100644 (file)
@@ -69,12 +69,12 @@ namespace Handbrake
                 DateTime lastCheck = Properties.Settings.Default.lastUpdateCheckDate;\r
                 TimeSpan elapsed = now.Subtract(lastCheck);\r
                 if (elapsed.TotalDays > Properties.Settings.Default.daysBetweenUpdateCheck)\r
-                {\r
+               {\r
                     lblStatus.Text = "Checking for updates ...";\r
                     Application.DoEvents();\r
 \r
                     Main.BeginCheckForUpdates(new AsyncCallback(UpdateCheckDone), false);\r
-                }\r
+               }\r
             }\r
 \r
             // Setup the GUI components\r
@@ -186,7 +186,7 @@ namespace Handbrake
         private void events()\r
         {\r
             // Handle Widget changes when preset is selected.\r
-            registerPresetEventHandler();\r
+            RegisterPresetEventHandler();\r
 \r
             // Handle Window Resize\r
             if (Properties.Settings.Default.MainWindowMinimize)\r
@@ -203,7 +203,7 @@ namespace Handbrake
         }\r
 \r
         // Change the preset label to custom when a user changes a setting. Don't want to give the impression that users can change settings and still be using a preset\r
-        public void registerPresetEventHandler()\r
+        private void RegisterPresetEventHandler()\r
         {\r
             // Output Settings\r
             drop_format.SelectedIndexChanged += new EventHandler(changePresetLabel);\r
@@ -231,7 +231,7 @@ namespace Handbrake
             // Advanced Tab\r
             x264Panel.rtf_x264Query.TextChanged += new EventHandler(changePresetLabel);\r
         }\r
-        public void unRegisterPresetEventHandler()\r
+        private void UnRegisterPresetEventHandler()\r
         {\r
             // Output Settings \r
             drop_format.SelectedIndexChanged -= new EventHandler(changePresetLabel);\r
@@ -343,7 +343,7 @@ namespace Handbrake
         }\r
         private void mnu_options_Click(object sender, EventArgs e)\r
         {\r
-            Form options = new frmOptions();\r
+            Form options = new frmOptions(this);\r
             options.ShowDialog();\r
         }\r
         #endregion\r
@@ -371,33 +371,7 @@ namespace Handbrake
         }\r
         private void mnu_importMacPreset_Click(object sender, EventArgs e)\r
         {\r
-            Import imp = new Import();\r
-            if (openPreset.ShowDialog() == DialogResult.OK)\r
-            {\r
-                QueryParser parsed = imp.importMacPreset(openPreset.FileName);\r
-                if (presetHandler.checkIfUserPresetExists(parsed.PresetName + " (Imported)"))\r
-                {\r
-                    DialogResult result = MessageBox.Show("This preset appears to already exist. Would you like to overwrite it?", "Overwrite preset?",\r
-                                                           MessageBoxButtons.YesNo, MessageBoxIcon.Warning);\r
-                    if (result == DialogResult.Yes)\r
-                    {\r
-                        PresetLoader.presetLoader(this, parsed, parsed.PresetName, parsed.UsesPictureSettings);\r
-                        presetHandler.updatePreset(parsed.PresetName + " (Imported)", queryGen.generateCLIQuery(this, 0, null),\r
-                                                   parsed.UsesPictureSettings);\r
-                    }\r
-                }\r
-                else\r
-                {\r
-                    PresetLoader.presetLoader(this, parsed, parsed.PresetName, parsed.UsesPictureSettings);\r
-                    presetHandler.addPreset(parsed.PresetName, queryGen.generateCLIQuery(this, 0, null), parsed.UsesPictureSettings);\r
-\r
-                    if (presetHandler.addPreset(parsed.PresetName + " (Imported)", queryGen.generateCLIQuery(this, 0, null), parsed.UsesPictureSettings))\r
-                    {\r
-                        TreeNode preset_treeview = new TreeNode(parsed.PresetName + " (Imported)") { ForeColor = Color.Black };\r
-                        treeView_presets.Nodes.Add(preset_treeview);\r
-                    }\r
-                }\r
-            }\r
+            importPreset();\r
         }\r
         private void btn_new_preset_Click(object sender, EventArgs e)\r
         {\r
@@ -473,6 +447,10 @@ namespace Handbrake
         {\r
             treeView_presets.CollapseAll();\r
         }\r
+        private void pmnu_import_Click(object sender, EventArgs e)\r
+        {\r
+            importPreset();\r
+        }\r
         private void pmnu_saveChanges_Click(object sender, EventArgs e)\r
         {\r
             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);\r
@@ -626,6 +604,36 @@ namespace Handbrake
                 }\r
             }\r
         }\r
+        private void importPreset()\r
+        {\r
+            Import imp = new Import();\r
+            if (openPreset.ShowDialog() == DialogResult.OK)\r
+            {\r
+                QueryParser parsed = imp.importMacPreset(openPreset.FileName);\r
+                if (presetHandler.checkIfUserPresetExists(parsed.PresetName + " (Imported)"))\r
+                {\r
+                    DialogResult result = MessageBox.Show("This preset appears to already exist. Would you like to overwrite it?", "Overwrite preset?",\r
+                                                           MessageBoxButtons.YesNo, MessageBoxIcon.Warning);\r
+                    if (result == DialogResult.Yes)\r
+                    {\r
+                        PresetLoader.presetLoader(this, parsed, parsed.PresetName, parsed.UsesPictureSettings);\r
+                        presetHandler.updatePreset(parsed.PresetName + " (Imported)", queryGen.generateCLIQuery(this, 0, null),\r
+                                                   parsed.UsesPictureSettings);\r
+                    }\r
+                }\r
+                else\r
+                {\r
+                    PresetLoader.presetLoader(this, parsed, parsed.PresetName, parsed.UsesPictureSettings);\r
+                    presetHandler.addPreset(parsed.PresetName, queryGen.generateCLIQuery(this, 0, null), parsed.UsesPictureSettings);\r
+\r
+                    if (presetHandler.addPreset(parsed.PresetName + " (Imported)", queryGen.generateCLIQuery(this, 0, null), parsed.UsesPictureSettings))\r
+                    {\r
+                        TreeNode preset_treeview = new TreeNode(parsed.PresetName + " (Imported)") { ForeColor = Color.Black };\r
+                        treeView_presets.Nodes.Add(preset_treeview);\r
+                    }\r
+                }\r
+            }\r
+        }\r
         #endregion\r
 \r
         #region ToolStrip\r
@@ -875,7 +883,7 @@ namespace Handbrake
         }\r
         private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
-            unRegisterPresetEventHandler();\r
+            UnRegisterPresetEventHandler();\r
 \r
             PictureSettings.lbl_Aspect.Text = "Select a Title"; // Reset some values on the form\r
             drop_chapterStart.Items.Clear();\r
@@ -918,7 +926,7 @@ namespace Handbrake
                     drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();\r
 \r
                 // Populate the Audio Channels Dropdown\r
-                AudioSettings.setTrackList(selectedTitle);\r
+                AudioSettings.SetTrackList(selectedTitle);\r
 \r
                 // Populate the Subtitles dropdown\r
                 Subtitles.drp_subtitleTracks.Items.Clear();\r
@@ -931,7 +939,7 @@ namespace Handbrake
             // Run the autoName & chapterNaming functions\r
             if (Properties.Settings.Default.autoNaming)\r
             {\r
-                string autoPath = Main.autoName(drp_dvdtitle, drop_chapterStart.Text, drop_chapterFinish.Text, sourcePath, text_destination.Text, drop_format.SelectedIndex);\r
+                string autoPath = Main.autoName(this);\r
                 if (autoPath != null)\r
                     text_destination.Text = autoPath;\r
                 else\r
@@ -955,7 +963,7 @@ namespace Handbrake
             data_chpt.Columns[0].Width = 166;\r
             data_chpt.Columns[0].Width = 165;\r
 \r
-            registerPresetEventHandler();\r
+            RegisterPresetEventHandler();\r
         }\r
         private void chapersChanged(object sender, EventArgs e)\r
         {\r
@@ -1006,16 +1014,24 @@ namespace Handbrake
 \r
             // Run the Autonaming function\r
             if (Properties.Settings.Default.autoNaming)\r
-                text_destination.Text = Main.autoName(drp_dvdtitle, drop_chapterStart.Text, drop_chapterFinish.Text, sourcePath, text_destination.Text, drop_format.SelectedIndex);\r
+                text_destination.Text = Main.autoName(this);\r
 \r
             // Disable chapter markers if only 1 chapter is selected.\r
             if (chapterStart == chapterEnd)\r
             {\r
-                Check_ChapterMarkers.Checked = false;\r
                 Check_ChapterMarkers.Enabled = false;\r
+                btn_importChapters.Enabled = false;\r
+                data_chpt.Enabled = false;\r
             }\r
             else\r
-                Check_ChapterMarkers.Enabled = true;  \r
+            {\r
+                Check_ChapterMarkers.Enabled = true;\r
+                if (Check_ChapterMarkers.Checked)\r
+                {\r
+                    btn_importChapters.Enabled = true;\r
+                    data_chpt.Enabled = true;\r
+                }\r
+            }\r
         }\r
 \r
         //Destination\r
@@ -1046,13 +1062,13 @@ namespace Handbrake
                         case 1:\r
                             if (!Path.GetExtension(DVD_Save.FileName).Equals(".mp4", StringComparison.InvariantCultureIgnoreCase))\r
                                 if (Properties.Settings.Default.useM4v)\r
-                                    DVD_Save.FileName += ".m4v";\r
+                                    DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", ".m4v").Replace(".mkv",".m4v");\r
                                 else\r
-                                    DVD_Save.FileName += ".mp4";\r
+                                    DVD_Save.FileName = DVD_Save.FileName.Replace(".m4v", ".mp4").Replace(".mkv", ".mp4");\r
                             break;\r
                         case 2:\r
                             if (!Path.GetExtension(DVD_Save.FileName).Equals(".mkv", StringComparison.InvariantCultureIgnoreCase))\r
-                                DVD_Save.FileName += ".mkv";\r
+                                DVD_Save.FileName = DVD_Save.FileName .Replace(".mp4", ".mkv").Replace(".m4v",".mkv");\r
                             break;\r
                         default:\r
                             //do nothing  \r
@@ -1081,7 +1097,7 @@ namespace Handbrake
             switch (drop_format.SelectedIndex)\r
             {\r
                 case 0:\r
-                    if (Properties.Settings.Default.useM4v)\r
+                    if (Properties.Settings.Default.useM4v || Check_ChapterMarkers.Checked || AudioSettings.RequiresM4V() || Subtitles.RequiresM4V())\r
                         setExtension(".m4v");\r
                     else\r
                         setExtension(".mp4");\r
@@ -1091,7 +1107,7 @@ namespace Handbrake
                     break;\r
             }\r
 \r
-            AudioSettings.setAudioByContainer(drop_format.Text);\r
+            AudioSettings.SetContainer(drop_format.Text);\r
             Subtitles.setContainer(drop_format.SelectedIndex);\r
 \r
             if ((drop_format.Text.Contains("MP4")) || (drop_format.Text.Contains("M4V")))\r
@@ -1153,7 +1169,9 @@ namespace Handbrake
                     slider_videoQuality.TickFrequency = 1;\r
 \r
                     CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");\r
-                    double multiplier = 1.0 / Properties.Settings.Default.x264cqstep;\r
+                    double cqStep;\r
+                    double.TryParse(Properties.Settings.Default.x264cqstep, out cqStep);\r
+                    double multiplier = 1.0 / cqStep;\r
                     double value = slider_videoQuality.Value * multiplier;\r
 \r
                     switch (Properties.Settings.Default.x264cqstep.ToString(culture))\r
@@ -1165,7 +1183,7 @@ namespace Handbrake
                             slider_videoQuality.Maximum = 204;\r
                             break;\r
                         case "0.50":\r
-                            slider_videoQuality.Maximum = 40;\r
+                            slider_videoQuality.Maximum = 102;\r
                             break;\r
                         case "1.0":\r
                             slider_videoQuality.Maximum = 51;\r
@@ -1207,8 +1225,58 @@ namespace Handbrake
                 check_iPodAtom.Checked = false;\r
             }\r
         }\r
+        private string _cachedCqStep = Properties.Settings.Default.x264cqstep;   \r
+        /// <summary>\r
+        /// Update the CQ slider for x264 for a new CQ step. This is set from option\r
+        /// </summary>\r
+        public void setQualityFromSlider()\r
+        {\r
+            // Work out the current RF value.\r
+            double cqStep;\r
+            double.TryParse(_cachedCqStep, out cqStep);\r
+            double rfValue = 51.0 - slider_videoQuality.Value * cqStep;\r
+            \r
+            // Change the maximum value for the slider\r
+            CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");\r
+            switch (Properties.Settings.Default.x264cqstep.ToString(culture))\r
+            {\r
+                case "0.20":\r
+                    slider_videoQuality.Maximum = 255;\r
+                    break;\r
+                case "0.25":\r
+                    slider_videoQuality.Maximum = 204;\r
+                    break;\r
+                case "0.50":\r
+                    slider_videoQuality.Maximum = 102;\r
+                    break;\r
+                case "1.0":\r
+                    slider_videoQuality.Maximum = 51;\r
+                    break;\r
+                default:\r
+                    slider_videoQuality.Maximum = 51;\r
+                    break;\r
+            }\r
+\r
+            // Reset the CQ slider to RF0\r
+            slider_videoQuality.Value = slider_videoQuality.Maximum;\r
+\r
+            // Reset the CQ slider back to the previous value as close as possible\r
+            double cqStepNew;\r
+            double.TryParse(Properties.Settings.Default.x264cqstep, out cqStepNew);\r
+            double rfValueCurrent = 51.0 - slider_videoQuality.Value * cqStepNew;\r
+            while (rfValueCurrent < rfValue)\r
+            {\r
+                slider_videoQuality.Value--;\r
+                rfValueCurrent = 51.0 - slider_videoQuality.Value * cqStepNew;\r
+            }\r
+\r
+            // Cache the CQ step for the next calculation\r
+            _cachedCqStep = Properties.Settings.Default.x264cqstep;\r
+        }\r
         private void slider_videoQuality_Scroll(object sender, EventArgs e)\r
         {\r
+            double cqStep;\r
+            double.TryParse(Properties.Settings.Default.x264cqstep, out cqStep);\r
             switch (drp_videoEncoder.Text)\r
             {\r
                 case "MPEG-4 (FFmpeg)":\r
@@ -1219,8 +1287,8 @@ namespace Handbrake
                     SliderValue.Text = Math.Round((val * 100), 2) + "% QP:" + (32 - slider_videoQuality.Value);\r
                     break;\r
                 case "H.264 (x264)":\r
-                    rfValue = 51.0 - slider_videoQuality.Value * Properties.Settings.Default.x264cqstep;\r
-                    max = slider_videoQuality.Maximum * Properties.Settings.Default.x264cqstep;\r
+                    rfValue = 51.0 - slider_videoQuality.Value * cqStep;\r
+                    max = slider_videoQuality.Maximum * cqStep;\r
                     min = slider_videoQuality.Minimum;\r
                     val = ((max - min) - (rfValue - min)) / (max - min);\r
                     rfValue = Math.Round(rfValue, 2);\r
@@ -1279,18 +1347,13 @@ namespace Handbrake
             {\r
                 if (drop_format.SelectedIndex != 1)\r
                     setExtension(".m4v");\r
-                data_chpt.Rows.Clear();\r
                 data_chpt.Enabled = true;\r
                 btn_importChapters.Enabled = true;\r
-                DataGridView chapterGridView = Main.chapterNaming(data_chpt, drop_chapterFinish.Text);\r
-                if (chapterGridView != null)\r
-                    data_chpt = chapterGridView;\r
             }\r
             else\r
             {\r
                 if (drop_format.SelectedIndex != 1 && !Properties.Settings.Default.useM4v)\r
                     setExtension(".mp4");\r
-                data_chpt.Rows.Clear();\r
                 data_chpt.Enabled = false;\r
                 btn_importChapters.Enabled = false;\r
             }\r
@@ -1305,6 +1368,15 @@ namespace Handbrake
                     data_chpt = imported;\r
             }\r
         }\r
+        private void mnu_resetChapters_Click(object sender, EventArgs e)\r
+        {\r
+            data_chpt.Rows.Clear();\r
+            DataGridView chapterGridView = Main.chapterNaming(data_chpt, drop_chapterFinish.Text);\r
+            if (chapterGridView != null)\r
+            {\r
+                data_chpt = chapterGridView;\r
+            }\r
+        }\r
 \r
         // Query Editor Tab\r
         private void btn_generate_Query_Click(object sender, EventArgs e)\r