OSDN Git Service

LinGui: enable libdvdnav by default
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain.cs
index b6b156c..a377aca 100644 (file)
@@ -35,6 +35,9 @@ namespace Handbrake
         private Form splash;\r
         public string sourcePath;\r
         private string lastAction;\r
+        private SourceType selectedSourceType;\r
+        private string dvdDrivePath;\r
+        private string dvdDriveLabel;\r
 \r
         // Delegates **********************************************************\r
         private delegate void UpdateWindowHandler();\r
@@ -88,12 +91,12 @@ namespace Handbrake
                 tabs_panel.TabPages.RemoveAt(7); // Remove the query editor tab if the user does not want it enabled.\r
 \r
             // Load the user's default settings or Normal Preset\r
-            if (Properties.Settings.Default.defaultSettings && Properties.Settings.Default.defaultPreset != "")\r
+            if (Properties.Settings.Default.defaultPreset != "")\r
             {\r
-                if (presetHandler.getPreset(Properties.Settings.Default.defaultPreset) != null)\r
+                if (presetHandler.GetPreset(Properties.Settings.Default.defaultPreset) != null)\r
                 {\r
-                    string query = presetHandler.getPreset(Properties.Settings.Default.defaultPreset).Query;\r
-                    Boolean loadPictureSettings = presetHandler.getPreset(Properties.Settings.Default.defaultPreset).PictureSettings;\r
+                    string query = presetHandler.GetPreset(Properties.Settings.Default.defaultPreset).Query;\r
+                    Boolean loadPictureSettings = presetHandler.GetPreset(Properties.Settings.Default.defaultPreset).PictureSettings;\r
 \r
                     if (query != null)\r
                     {\r
@@ -157,14 +160,14 @@ namespace Handbrake
             catch (Exception ex)\r
             {\r
                 if ((bool)result.AsyncState)\r
-                    MessageBox.Show("Unable to check for updates, Please try again later. \n" + ex, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+                    MessageBox.Show("Unable to check for updates, Please try again later.\n\nDetailed Error Information:\n" + ex, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
             }\r
         }\r
 \r
         // Startup Functions   \r
         private void queueRecovery()\r
         {\r
-            if (Main.check_queue_recovery())\r
+            if (Main.checkQueueRecovery())\r
             {\r
                 DialogResult result = MessageBox.Show("HandBrake has detected unfinished items on the queue from the last time the application was launched. Would you like to recover these?", "Queue Recovery Possible", MessageBoxButtons.YesNo, MessageBoxIcon.Question);\r
 \r
@@ -181,12 +184,27 @@ namespace Handbrake
         }\r
         #endregion\r
 \r
+        #region Properties\r
+        public string SourceName\r
+        {\r
+            get\r
+            {\r
+                if (this.selectedSourceType == SourceType.DvdDrive)\r
+                {\r
+                    return this.dvdDriveLabel;\r
+                }\r
+\r
+                return Path.GetFileNameWithoutExtension(this.sourcePath);\r
+            }\r
+        }\r
+        #endregion\r
+\r
         #region Events\r
         // Encoding Events for setting up the GUI\r
         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 +221,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 +249,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
@@ -279,7 +297,7 @@ namespace Handbrake
                 if (fileList[0].StartsWith("\\"))\r
                 {\r
                     MessageBox.Show(\r
-                        "Sorry, HandBrake does not support UNC file paths. \nTry mounting the share as a network drive in My Computer",\r
+                        "Sorry, HandBrake does not support UNC file paths. \nTry mounting the network share as a network drive in My Computer",\r
                         "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
                     UpdateSourceLabel();\r
                 }\r
@@ -343,7 +361,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
@@ -351,7 +369,7 @@ namespace Handbrake
         #region Presets Menu\r
         private void mnu_presetReset_Click(object sender, EventArgs e)\r
         {\r
-            presetHandler.updateBuiltInPresets();\r
+            presetHandler.UpdateBuiltInPresets();\r
             loadPresetPanel();\r
             if (treeView_presets.Nodes.Count == 0)\r
                 MessageBox.Show("Unable to load the presets.xml 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
@@ -362,7 +380,7 @@ namespace Handbrake
         }\r
         private void mnu_delete_preset_Click(object sender, EventArgs e)\r
         {\r
-            presetHandler.removeBuiltInPresets();\r
+            presetHandler.RemoveBuiltInPresets();\r
             loadPresetPanel(); // Reload the preset panel\r
         }\r
         private void mnu_SelectDefault_Click(object sender, EventArgs e)\r
@@ -371,37 +389,11 @@ 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
-            Form preset = new frmAddPreset(this, queryGen.generateCLIQuery(this, 0, null), presetHandler);\r
+            Form preset = new frmAddPreset(this, queryGen.GenerateCLIQuery(this, 0, null), presetHandler);\r
             preset.ShowDialog();\r
         }\r
         #endregion\r
@@ -451,7 +443,7 @@ namespace Handbrake
             catch (Exception ex)\r
             {\r
                 if ((bool)result.AsyncState)\r
-                    MessageBox.Show("Unable to check for updates, Please try again later. \n" + ex, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+                    MessageBox.Show("Unable to check for updates, Please try again later.\n\nDetailed Error Information:\n" + ex, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
             }\r
         }\r
         private void mnu_about_Click(object sender, EventArgs e)\r
@@ -473,19 +465,23 @@ 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
             if (result == DialogResult.Yes)\r
-                presetHandler.updatePreset(treeView_presets.SelectedNode.Text, QueryGenerator.generateTabbedComponentsQuery(this), true);\r
+                presetHandler.Update(treeView_presets.SelectedNode.Text, QueryGenerator.GenerateTabbedComponentsQuery(this), true);\r
             else if (result == DialogResult.No)\r
-                presetHandler.updatePreset(treeView_presets.SelectedNode.Text, QueryGenerator.generateTabbedComponentsQuery(this), false);\r
+                presetHandler.Update(treeView_presets.SelectedNode.Text, QueryGenerator.GenerateTabbedComponentsQuery(this), false);\r
         }\r
         private void pmnu_delete_click(object sender, EventArgs e)\r
         {\r
             if (treeView_presets.SelectedNode != null)\r
             {\r
-                presetHandler.remove(treeView_presets.SelectedNode.Text);\r
+                presetHandler.Remove(treeView_presets.SelectedNode.Text);\r
                 treeView_presets.Nodes.Remove(treeView_presets.SelectedNode);\r
             }\r
             treeView_presets.Select();\r
@@ -497,7 +493,7 @@ namespace Handbrake
 \r
             // Now enable the save menu if the selected preset is a user preset\r
             if (treeView_presets.SelectedNode != null)\r
-                if (presetHandler.checkIfUserPresetExists(treeView_presets.SelectedNode.Text))\r
+                if (presetHandler.CheckIfUserPresetExists(treeView_presets.SelectedNode.Text))\r
                     pmnu_saveChanges.Enabled = true;\r
 \r
             treeView_presets.Select();\r
@@ -506,7 +502,7 @@ namespace Handbrake
         // Presets Management\r
         private void btn_addPreset_Click(object sender, EventArgs e)\r
         {\r
-            Form preset = new frmAddPreset(this, QueryGenerator.generateTabbedComponentsQuery(this), presetHandler);\r
+            Form preset = new frmAddPreset(this, QueryGenerator.GenerateTabbedComponentsQuery(this), presetHandler);\r
             preset.ShowDialog();\r
         }\r
         private void btn_removePreset_Click(object sender, EventArgs e)\r
@@ -516,7 +512,7 @@ namespace Handbrake
             {\r
                 if (treeView_presets.SelectedNode != null)\r
                 {\r
-                    presetHandler.remove(treeView_presets.SelectedNode.Text);\r
+                    presetHandler.Remove(treeView_presets.SelectedNode.Text);\r
                     treeView_presets.Nodes.Remove(treeView_presets.SelectedNode);\r
                 }\r
             }\r
@@ -564,7 +560,7 @@ namespace Handbrake
                 if (result == DialogResult.Yes)\r
                 {\r
                     if (treeView_presets.SelectedNode != null)\r
-                        presetHandler.remove(treeView_presets.SelectedNode.Text);\r
+                        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
@@ -592,10 +588,10 @@ namespace Handbrake
             {\r
                 // Ok, so, we've selected a preset. Now we want to load it.\r
                 string presetName = treeView_presets.SelectedNode.Text;\r
-                if (presetHandler.getPreset(presetName) != null)\r
+                if (presetHandler.GetPreset(presetName) != null)\r
                 {\r
-                    string query = presetHandler.getPreset(presetName).Query;\r
-                    Boolean loadPictureSettings = presetHandler.getPreset(presetName).PictureSettings;\r
+                    string query = presetHandler.GetPreset(presetName).Query;\r
+                    Boolean loadPictureSettings = presetHandler.GetPreset(presetName).PictureSettings;\r
 \r
                     if (query != null)\r
                     {\r
@@ -626,19 +622,44 @@ 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.Update(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.Add(parsed.PresetName, queryGen.GenerateCLIQuery(this, 0, null), parsed.UsesPictureSettings);\r
+\r
+                    if (presetHandler.Add(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
         private void btn_source_Click(object sender, EventArgs e)\r
         {\r
-            if (Properties.Settings.Default.drive_detection)\r
-            {\r
-                mnu_dvd_drive.Visible = true;\r
-                Thread driveInfoThread = new Thread(getDriveInfoThread);\r
-                driveInfoThread.Start();\r
-            }\r
-            else\r
-                mnu_dvd_drive.Visible = false;\r
+            mnu_dvd_drive.Visible = true;\r
+            Thread driveInfoThread = new Thread(getDriveInfoThread);\r
+            driveInfoThread.Start();\r
         }\r
         private void btn_start_Click(object sender, EventArgs e)\r
         {\r
@@ -663,8 +684,8 @@ namespace Handbrake
             {\r
                 if (encodeQueue.Count != 0 || (!string.IsNullOrEmpty(sourcePath) && !string.IsNullOrEmpty(text_destination.Text)))\r
                 {\r
-                    string generatedQuery = queryGen.generateCLIQuery(this, 0, null);\r
-                    string specifiedQuery = rtf_query.Text != "" ? rtf_query.Text : queryGen.generateCLIQuery(this, 0, null);\r
+                    string generatedQuery = queryGen.GenerateCLIQuery(this, 0, null);\r
+                    string specifiedQuery = rtf_query.Text != "" ? rtf_query.Text : queryGen.GenerateCLIQuery(this, 0, null);\r
                     string query = string.Empty;\r
 \r
                     // Check to make sure the generated query matches the GUI settings\r
@@ -708,17 +729,19 @@ namespace Handbrake
                     if (overwrite == DialogResult.Yes)\r
                     {\r
                         if (encodeQueue.Count == 0)\r
-                            encodeQueue.AddJob(query, sourcePath, text_destination.Text);\r
+                            encodeQueue.AddJob(query, sourcePath, text_destination.Text, (rtf_query.Text != ""));\r
 \r
                         queueWindow.setQueue();\r
                         if (encodeQueue.Count > 1)\r
                             queueWindow.Show(false);\r
 \r
                         setEncodeStarted(); // Encode is running, so setup the GUI appropriately\r
-                        if (ActivityWindow != null)\r
-                            ActivityWindow.setLogView(false);\r
                         encodeQueue.StartEncodeQueue(); // Start The Queue Encoding Process\r
                         lastAction = "encode";   // Set the last action to encode - Used for activity window.\r
+\r
+                        if (ActivityWindow != null)\r
+                            ActivityWindow.SetLogView(false);\r
+\r
                     }\r
                     this.Focus();\r
                 }\r
@@ -732,7 +755,7 @@ namespace Handbrake
                 MessageBox.Show("No source or destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
             else\r
             {\r
-                String query = queryGen.generateCLIQuery(this, 0, null);\r
+                String query = queryGen.GenerateCLIQuery(this, 0, null);\r
                 if (rtf_query.Text != "")\r
                     query = rtf_query.Text;\r
 \r
@@ -741,11 +764,13 @@ namespace Handbrake
                     DialogResult result = MessageBox.Show("There is already a queue item for this destination path. \n\n If you continue, the encode will be overwritten. Do you wish to continue?",\r
                   "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);\r
                     if (result == DialogResult.Yes)\r
-                        encodeQueue.AddJob(query, sourcePath, text_destination.Text);\r
+                        encodeQueue.AddJob(query, sourcePath, text_destination.Text, (rtf_query.Text != ""));\r
 \r
                 }\r
                 else\r
-                    encodeQueue.AddJob(query, sourcePath, text_destination.Text);\r
+                    encodeQueue.AddJob(query, sourcePath, text_destination.Text, (rtf_query.Text != ""));\r
+\r
+                lbl_encode.Text = encodeQueue.Count + " encode(s) pending in the queue";\r
 \r
                 queueWindow.Show();\r
             }\r
@@ -753,6 +778,7 @@ namespace Handbrake
         private void btn_showQueue_Click(object sender, EventArgs e)\r
         {\r
             queueWindow.Show();\r
+            queueWindow.Activate();\r
         }\r
         private void tb_preview_Click(object sender, EventArgs e)\r
         {\r
@@ -780,6 +806,8 @@ namespace Handbrake
             if (ActivityWindow == null)\r
                 ActivityWindow = new frmActivityWindow(file, encodeQueue, this);\r
 \r
+            ActivityWindow.SetLogView(!encodeQueue.isEncoding);\r
+\r
             ActivityWindow.Show();\r
         }\r
         #endregion\r
@@ -817,24 +845,30 @@ namespace Handbrake
         private void btn_dvd_source_Click(object sender, EventArgs e)\r
         {\r
             if (DVD_Open.ShowDialog() == DialogResult.OK)\r
-                selectSource(DVD_Open.SelectedPath, 1);\r
+            {\r
+                this.selectedSourceType = SourceType.Folder;\r
+                selectSource(DVD_Open.SelectedPath);\r
+            }\r
             else\r
                 UpdateSourceLabel();\r
         }\r
         private void btn_file_source_Click(object sender, EventArgs e)\r
         {\r
             if (ISO_Open.ShowDialog() == DialogResult.OK)\r
-                selectSource(ISO_Open.FileName, 2);\r
+            {\r
+                this.selectedSourceType = SourceType.VideoFile;\r
+                selectSource(ISO_Open.FileName);\r
+            }\r
             else\r
                 UpdateSourceLabel();\r
         }\r
         private void mnu_dvd_drive_Click(object sender, EventArgs e)\r
         {\r
-            if (!mnu_dvd_drive.Text.Contains("VIDEO_TS")) return;\r
-            string[] path = mnu_dvd_drive.Text.Split(' ');\r
-            selectSource(path[0], 3);\r
+            if (this.dvdDrivePath == null) return;\r
+            this.selectedSourceType = SourceType.DvdDrive;\r
+            selectSource(this.dvdDrivePath);\r
         }\r
-        private void selectSource(string file, int type)\r
+        private void selectSource(string file)\r
         {\r
             Check_ChapterMarkers.Enabled = true;\r
             lastAction = "scan";\r
@@ -855,18 +889,8 @@ namespace Handbrake
                 return;\r
             }\r
 \r
-            switch (type) // Start the scan\r
-            {\r
-                case 1: // btn_dvd_source_Click()\r
-                case 3: // mnu_dvd_drive_Click()\r
-                    sourcePath = Path.GetFullPath(file);\r
-                    startScan(file);\r
-                    break;\r
-                case 2: // btn_file_source_Click()\r
-                    sourcePath = Path.GetFileName(file);\r
-                    startScan(file);\r
-                    break;\r
-            }\r
+            sourcePath = Path.GetFileName(file);\r
+            startScan(file);\r
         }\r
         private void drp_dvdtitle_Click(object sender, EventArgs e)\r
         {\r
@@ -875,7 +899,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,24 +942,25 @@ 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
                 Subtitles.drp_subtitleTracks.Items.Add("Foreign Audio Search (Bitmap)");\r
                 Subtitles.drp_subtitleTracks.Items.AddRange(selectedTitle.Subtitles.ToArray());\r
                 Subtitles.drp_subtitleTracks.SelectedIndex = 0;\r
+                Subtitles.Clear();\r
                 Subtitles.setSubtitleTrackAuto();\r
             }\r
 \r
             // 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
-                    MessageBox.Show("You currently have automatic file naming enabled for the destination box, but you do not have a default direcotry set. You should set this in the program options (see Tools Menu)", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
+                    MessageBox.Show("You currently have \"Automatically name output files\" enabled for the destination file box, but you do not have a default directory set.\n\nYou should set a \"Default Path\" in HandBrakes preferences. (See 'Tools' menu -> 'Options' -> 'General' Tab -> 'Default Path')", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
             }\r
 \r
             data_chpt.Rows.Clear();\r
@@ -955,11 +980,11 @@ 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
-            Control ctl = (Control) sender;\r
+            Control ctl = (Control)sender;\r
             int chapterStart, chapterEnd;\r
             int.TryParse(drop_chapterStart.Text, out chapterStart);\r
             int.TryParse(drop_chapterFinish.Text, out chapterEnd);\r
@@ -1006,16 +1031,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 +1079,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
@@ -1062,7 +1095,7 @@ namespace Handbrake
 \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 && DVD_Save.FilterIndex != 2)\r
-                        setExtension(".m4v");\r
+                        SetExtension(".m4v");\r
                 }\r
             }\r
         }\r
@@ -1081,20 +1114,20 @@ namespace Handbrake
             switch (drop_format.SelectedIndex)\r
             {\r
                 case 0:\r
-                    if (Properties.Settings.Default.useM4v)\r
-                        setExtension(".m4v");\r
+                    if (Properties.Settings.Default.useM4v || Check_ChapterMarkers.Checked || AudioSettings.RequiresM4V() || Subtitles.RequiresM4V())\r
+                        SetExtension(".m4v");\r
                     else\r
-                        setExtension(".mp4");\r
+                        SetExtension(".mp4");\r
                     break;\r
                 case 1:\r
-                    setExtension(".mkv");\r
+                    SetExtension(".mkv");\r
                     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
+            if (drop_format.Text.Contains("MP4"))\r
             {\r
                 if (drp_videoEncoder.Items.Contains("VP3 (Theora)"))\r
                 {\r
@@ -1105,11 +1138,16 @@ namespace Handbrake
             else if (drop_format.Text.Contains("MKV"))\r
                 drp_videoEncoder.Items.Add("VP3 (Theora)");\r
         }\r
-        private void setExtension(string newExtension)\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
+            if (newExtension == ".mp4" || newExtension == ".m4v")\r
+                if (Properties.Settings.Default.useM4v || Check_ChapterMarkers.Checked || AudioSettings.RequiresM4V() || Subtitles.RequiresM4V())\r
+                    newExtension = ".m4v";\r
+                else\r
+                    newExtension = ".mp4";\r
+\r
+            if (Path.HasExtension(newExtension))\r
+                text_destination.Text = Path.ChangeExtension(text_destination.Text, newExtension);\r
         }\r
 \r
         //Video Tab\r
@@ -1153,21 +1191,22 @@ 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 = Properties.Settings.Default.x264cqstep;\r
+                    double multiplier = 1.0 / cqStep;\r
                     double value = slider_videoQuality.Value * multiplier;\r
 \r
                     switch (Properties.Settings.Default.x264cqstep.ToString(culture))\r
                     {\r
-                        case "0.20":\r
+                        case "0.2":\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 = 40;\r
+                        case "0.5":\r
+                            slider_videoQuality.Maximum = 102;\r
                             break;\r
-                        case "1.0":\r
+                        case "1":\r
                             slider_videoQuality.Maximum = 51;\r
                             break;\r
                         default:\r
@@ -1207,8 +1246,54 @@ namespace Handbrake
                 check_iPodAtom.Checked = false;\r
             }\r
         }\r
+        private double _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 = _cachedCqStep;\r
+            double rfValue = 51.0 - slider_videoQuality.Value * cqStep;\r
+\r
+            // Change the maximum value for the slider\r
+            switch (Properties.Settings.Default.x264cqstep.ToString(new CultureInfo("en-US")))\r
+            {\r
+                case "0.2":\r
+                    slider_videoQuality.Maximum = 255;\r
+                    break;\r
+                case "0.25":\r
+                    slider_videoQuality.Maximum = 204;\r
+                    break;\r
+                case "0.5":\r
+                    slider_videoQuality.Maximum = 102;\r
+                    break;\r
+                case "1":\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 = Properties.Settings.Default.x264cqstep;\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 = Properties.Settings.Default.x264cqstep;\r
             switch (drp_videoEncoder.Text)\r
             {\r
                 case "MPEG-4 (FFmpeg)":\r
@@ -1216,20 +1301,20 @@ namespace Handbrake
                     double max = slider_videoQuality.Maximum;\r
                     double min = slider_videoQuality.Minimum;\r
                     double val = ((max - min) - (rfValue - min)) / (max - min);\r
-                    SliderValue.Text = Math.Round((val * 100), 2) + "% QP:" + (32 - slider_videoQuality.Value);\r
+                    SliderValue.Text = Math.Round((val * 100), 2).ToString(new CultureInfo("en-US")) + "% 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
-                    SliderValue.Text = Math.Round((val * 100), 2) + "% RF:" + rfValue;\r
+                    SliderValue.Text = Math.Round((val * 100), 2).ToString(new CultureInfo("en-US")) + "% RF:" + rfValue.ToString(new CultureInfo("en-US"));\r
                     break;\r
                 case "VP3 (Theora)":\r
                     rfValue = slider_videoQuality.Value;\r
                     double value = rfValue / 63;\r
-                    SliderValue.Text = Math.Round((value * 100), 2) + "% QP:" + slider_videoQuality.Value;\r
+                    SliderValue.Text = Math.Round((value * 100), 2).ToString(new CultureInfo("en-US")) + "% QP:" + slider_videoQuality.Value;\r
                     break;\r
             }\r
         }\r
@@ -1278,19 +1363,14 @@ namespace Handbrake
             if (Check_ChapterMarkers.Checked)\r
             {\r
                 if (drop_format.SelectedIndex != 1)\r
-                    setExtension(".m4v");\r
-                data_chpt.Rows.Clear();\r
+                    SetExtension(".m4v");\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
+                    SetExtension(".mp4");\r
                 data_chpt.Enabled = false;\r
                 btn_importChapters.Enabled = false;\r
             }\r
@@ -1305,11 +1385,20 @@ 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
         {\r
-            rtf_query.Text = queryGen.generateCLIQuery(this, 0, null);\r
+            rtf_query.Text = queryGen.GenerateCLIQuery(this, 0, null);\r
         }\r
         private void btn_clear_Click(object sender, EventArgs e)\r
         {\r
@@ -1327,10 +1416,9 @@ namespace Handbrake
             // Setup the GUI components for the scan.\r
             sourcePath = filename;\r
             foreach (Control ctrl in Controls)\r
-            {\r
                 if (!(ctrl is StatusStrip || ctrl is MenuStrip || ctrl is ToolStrip))\r
                     ctrl.Enabled = false;\r
-            }\r
+\r
             lbl_encode.Visible = true;\r
             lbl_encode.Text = "Scanning ...";\r
             btn_source.Enabled = false;\r
@@ -1344,7 +1432,7 @@ namespace Handbrake
             try\r
             {\r
                 if (ActivityWindow != null)\r
-                    ActivityWindow.setLogView(true);\r
+                    ActivityWindow.SetLogView(true);\r
                 isScanning = true;\r
                 ThreadPool.QueueUserWorkItem(scanProcess);\r
             }\r
@@ -1512,7 +1600,7 @@ namespace Handbrake
         }\r
         private void UpdateSourceLabel()\r
         {\r
-            labelSource.Text = string.IsNullOrEmpty(sourcePath) ? "Select \"Source\" to continue." : Path.GetFileName(sourcePath);\r
+            labelSource.Text = string.IsNullOrEmpty(sourcePath) ? "Select \"Source\" to continue." : this.SourceName;\r
         }\r
         #endregion\r
 \r
@@ -1563,7 +1651,7 @@ namespace Handbrake
                 }\r
 \r
                 lbl_encode.Visible = true;\r
-                lbl_encode.Text = "Encoding in Progress";\r
+                lbl_encode.Text = "Encoding with " + encodeQueue.Count + " encode(s) pending";\r
                 btn_start.Text = "Stop";\r
                 btn_start.ToolTipText = "Stop the encoding process.";\r
                 btn_start.Image = Properties.Resources.stop;\r
@@ -1594,7 +1682,9 @@ namespace Handbrake
                     {\r
                         if (File.Exists(curDrive.RootDirectory + "VIDEO_TS\\VIDEO_TS.IFO"))\r
                         {\r
-                            mnu_dvd_drive.Text = curDrive.RootDirectory + "VIDEO_TS (" + curDrive.VolumeLabel + ")";\r
+                            this.dvdDrivePath = curDrive.RootDirectory + "VIDEO_TS";\r
+                            this.dvdDriveLabel = curDrive.VolumeLabel;\r
+                            mnu_dvd_drive.Text = this.dvdDrivePath + " (" + this.dvdDriveLabel + ")";\r
                             foundDrive = true;\r
                             break;\r
                         }\r
@@ -1617,13 +1707,13 @@ namespace Handbrake
         /// </summary>\r
         public void loadPresetPanel()\r
         {\r
-            if (presetHandler.checkIfPresetsAreOutOfDate())\r
+            if (presetHandler.CheckIfPresetsAreOutOfDate())\r
                 if (!Properties.Settings.Default.presetNotification)\r
                     MessageBox.Show(splash,\r
                     "HandBrake has determined your built-in presets are out of date... These presets will now be updated.",\r
                     "Preset Update", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
 \r
-            presetHandler.getPresetPanel(ref treeView_presets);\r
+            presetHandler.GetPresetPanel(ref treeView_presets);\r
             treeView_presets.Update();\r
         }\r
         #endregion\r
@@ -1674,6 +1764,15 @@ namespace Handbrake
         }\r
         #endregion\r
 \r
+        #region enum\r
+        private enum SourceType\r
+        {\r
+            None = 0,\r
+            Folder,\r
+            DvdDrive,\r
+            VideoFile\r
+        }\r
+        #endregion\r
         // This is the END of the road ****************************************\r
     }\r
 }
\ No newline at end of file