OSDN Git Service

WinGui:
authorsr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 5 Jan 2009 22:28:52 +0000 (22:28 +0000)
committersr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 5 Jan 2009 22:28:52 +0000 (22:28 +0000)
- Queue Encoding code moved from frmQueue.cs to QueueHandler.cs
- QueueHandler now works has events to allow frmMain and frmQueue to update their UI elements based on event triggers (e.g an encode starting or ending).

git-svn-id: svn://localhost/HandBrake/trunk@2063 b64f7644-9d1e-0410-96f1-a4d463321fa5

win/C#/Queue/QueueHandler.cs
win/C#/frmMain.Designer.cs
win/C#/frmMain.cs
win/C#/frmMain.resx
win/C#/frmQueue.Designer.cs
win/C#/frmQueue.cs

index 9568014..aabce4f 100644 (file)
@@ -17,9 +17,10 @@ namespace Handbrake.Queue
         int id = 0; // Unique identifer number for each job\r
         private QueueItem lastItem;\r
 \r
+        #region Queue Handling\r
         public List<QueueItem> getQueue()\r
         {\r
-             return queue;\r
+            return queue;\r
         }\r
 \r
         /// <summary>\r
@@ -199,9 +200,138 @@ namespace Handbrake.Queue
 \r
                         foreach (QueueItem item in list)\r
                             queue.Add(item);\r
+\r
+                        if (file != "hb_queue_recovery.xml")\r
+                            write2disk("hb_queue_recovery.xml");\r
+                    }\r
+                }\r
+            }\r
+        }\r
+        #endregion\r
+\r
+        //------------------------------------------------------------------------\r
+        Functions.Encode encodeHandler = new Functions.Encode();\r
+        private Boolean started = false;\r
+        private Boolean paused = false;\r
+        private Boolean encoding = false;\r
+\r
+        #region Encoding\r
+\r
+        public Boolean isEncodeStarted\r
+        {\r
+            get { return started; }\r
+        }\r
+        public Boolean isPaused\r
+        {\r
+            get { return paused; }\r
+        }\r
+        public Boolean isEncoding\r
+        {\r
+            get { return encoding; }\r
+        }\r
+\r
+        public void startEncode()\r
+        {\r
+            Thread theQueue;\r
+            if (this.count() != 0)\r
+            {\r
+                if (paused == true)\r
+                    paused = false;\r
+                else\r
+                {\r
+                    paused = false;\r
+                    try\r
+                    {\r
+                        theQueue = new Thread(startProc);\r
+                        theQueue.IsBackground = true;\r
+                        theQueue.Start();\r
+                    }\r
+                    catch (Exception exc)\r
+                    {\r
+                        MessageBox.Show(exc.ToString());\r
+                    }\r
+                }\r
+            }\r
+        }\r
+        public void pauseEncode()\r
+        {\r
+            paused = true;\r
+            EncodePaused(null);\r
+        }\r
+\r
+        private void startProc(object state)\r
+        {\r
+            Process hbProc = new Process();\r
+            try\r
+            {\r
+                // Run through each item on the queue\r
+                while (this.count() != 0)\r
+                {\r
+                    string query = getNextItemForEncoding();\r
+                    write2disk("hb_queue_recovery.xml"); // Update the queue recovery file\r
+\r
+                    EncodeStarted(null);\r
+                    hbProc = encodeHandler.runCli(this, query);\r
+                    hbProc.WaitForExit();\r
+\r
+                    encodeHandler.addCLIQueryToLog(query);\r
+                    encodeHandler.copyLog(query, getLastQueryItem().Destination);\r
+\r
+                    hbProc.Close();\r
+                    hbProc.Dispose();\r
+                    hbProc = null;\r
+                    query = "";\r
+                    EncodeFinished(null);\r
+\r
+                    while (paused == true) // Need to find a better way of doing this.\r
+                    {\r
+                        Thread.Sleep(10000);\r
                     }\r
                 }\r
+                EncodeQueueFinished(null);\r
+\r
+                // After the encode is done, we may want to shutdown, suspend etc.\r
+                encodeHandler.afterEncodeAction();\r
+            }\r
+            catch (Exception exc)\r
+            {\r
+                throw new Exception(exc.ToString());\r
             }\r
         }\r
-   }\r
-}\r
+        #endregion\r
+\r
+        #region Events\r
+        public event EventHandler OnEncodeStart;\r
+        public event EventHandler OnPaused;\r
+        public event EventHandler OnEncodeEnded;\r
+        public event EventHandler OnQueueFinished;\r
+\r
+        // Invoke the Changed event; called whenever encodestatus changes:\r
+        protected virtual void EncodeStarted(EventArgs e)\r
+        {\r
+            if (OnEncodeStart != null)\r
+                OnEncodeStart(this, e);\r
+\r
+            encoding = true;\r
+        }\r
+        protected virtual void EncodePaused(EventArgs e)\r
+        {\r
+            if (OnPaused != null)\r
+                OnPaused(this, e);\r
+        }\r
+        protected virtual void EncodeFinished(EventArgs e)\r
+        {\r
+            if (OnEncodeEnded != null)\r
+                OnEncodeEnded(this, e);\r
+\r
+            encoding = false;\r
+        }\r
+        protected virtual void EncodeQueueFinished(EventArgs e)\r
+        {\r
+            if (OnQueueFinished != null)\r
+                OnQueueFinished(this, e);\r
+        }\r
+        #endregion\r
+\r
+    }\r
+}
\ No newline at end of file
index 37dcd05..d814262 100644 (file)
@@ -38,7 +38,7 @@ namespace Handbrake
             System.Windows.Forms.Label Label38;\r
             System.Windows.Forms.ContextMenuStrip notifyIconMenu;\r
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMain));\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();\r
             this.btn_restore = new System.Windows.Forms.ToolStripMenuItem();\r
             this.DVD_Save = new System.Windows.Forms.SaveFileDialog();\r
             this.File_Save = new System.Windows.Forms.SaveFileDialog();\r
@@ -171,6 +171,7 @@ namespace Handbrake
             this.Label46 = new System.Windows.Forms.Label();\r
             this.Label40 = new System.Windows.Forms.Label();\r
             this.TabPage1 = new System.Windows.Forms.TabPage();\r
+            this.lbl_test = new System.Windows.Forms.Label();\r
             this.slider_deblock = new System.Windows.Forms.TrackBar();\r
             this.label8 = new System.Windows.Forms.Label();\r
             this.lbl_deblockVal = new System.Windows.Forms.Label();\r
@@ -244,13 +245,13 @@ namespace Handbrake
             this.btn_add2Queue = new System.Windows.Forms.ToolStripButton();\r
             this.btn_showQueue = new System.Windows.Forms.ToolStripButton();\r
             this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();\r
+            this.tb_preview = new System.Windows.Forms.ToolStripDropDownButton();\r
+            this.mnu_qtpreview = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.mnu_vlcpreview = new System.Windows.Forms.ToolStripMenuItem();\r
             this.btn_ActivityWindow = new System.Windows.Forms.ToolStripButton();\r
             this.notifyIcon = new System.Windows.Forms.NotifyIcon(this.components);\r
             this.StatusStrip = new System.Windows.Forms.StatusStrip();\r
             this.lbl_encode = new System.Windows.Forms.ToolStripStatusLabel();\r
-            this.tb_preview = new System.Windows.Forms.ToolStripDropDownButton();\r
-            this.mnu_qtpreview = new System.Windows.Forms.ToolStripMenuItem();\r
-            this.mnu_vlcpreview = new System.Windows.Forms.ToolStripMenuItem();\r
             Label38 = new System.Windows.Forms.Label();\r
             notifyIconMenu = new System.Windows.Forms.ContextMenuStrip(this.components);\r
             notifyIconMenu.SuspendLayout();\r
@@ -644,9 +645,9 @@ namespace Handbrake
             // \r
             // number\r
             // \r
-            dataGridViewCellStyle3.Format = "N0";\r
-            dataGridViewCellStyle3.NullValue = null;\r
-            this.number.DefaultCellStyle = dataGridViewCellStyle3;\r
+            dataGridViewCellStyle1.Format = "N0";\r
+            dataGridViewCellStyle1.NullValue = null;\r
+            this.number.DefaultCellStyle = dataGridViewCellStyle1;\r
             this.number.HeaderText = "Chapter Number";\r
             this.number.MaxInputLength = 3;\r
             this.number.Name = "number";\r
@@ -1963,6 +1964,7 @@ namespace Handbrake
             // TabPage1\r
             // \r
             this.TabPage1.BackColor = System.Drawing.Color.Transparent;\r
+            this.TabPage1.Controls.Add(this.lbl_test);\r
             this.TabPage1.Controls.Add(this.slider_deblock);\r
             this.TabPage1.Controls.Add(this.label8);\r
             this.TabPage1.Controls.Add(this.lbl_deblockVal);\r
@@ -2002,6 +2004,15 @@ namespace Handbrake
             this.TabPage1.TabIndex = 0;\r
             this.TabPage1.Text = "Picture Settings";\r
             // \r
+            // lbl_test\r
+            // \r
+            this.lbl_test.AutoSize = true;\r
+            this.lbl_test.Location = new System.Drawing.Point(83, 217);\r
+            this.lbl_test.Name = "lbl_test";\r
+            this.lbl_test.Size = new System.Drawing.Size(48, 13);\r
+            this.lbl_test.TabIndex = 39;\r
+            this.lbl_test.Text = "label12";\r
+            // \r
             // slider_deblock\r
             // \r
             this.slider_deblock.Location = new System.Drawing.Point(407, 264);\r
@@ -2844,6 +2855,32 @@ namespace Handbrake
             this.toolStripSeparator4.Name = "toolStripSeparator4";\r
             this.toolStripSeparator4.Size = new System.Drawing.Size(6, 39);\r
             // \r
+            // tb_preview\r
+            // \r
+            this.tb_preview.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
+            this.mnu_qtpreview,\r
+            this.mnu_vlcpreview});\r
+            this.tb_preview.Image = global::Handbrake.Properties.Resources.picture;\r
+            this.tb_preview.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
+            this.tb_preview.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tb_preview.Name = "tb_preview";\r
+            this.tb_preview.Size = new System.Drawing.Size(90, 36);\r
+            this.tb_preview.Text = "Preview";\r
+            // \r
+            // mnu_qtpreview\r
+            // \r
+            this.mnu_qtpreview.Name = "mnu_qtpreview";\r
+            this.mnu_qtpreview.Size = new System.Drawing.Size(185, 22);\r
+            this.mnu_qtpreview.Text = "Preview in QuickTime";\r
+            this.mnu_qtpreview.Click += new System.EventHandler(this.mnu_qtpreview_Click);\r
+            // \r
+            // mnu_vlcpreview\r
+            // \r
+            this.mnu_vlcpreview.Name = "mnu_vlcpreview";\r
+            this.mnu_vlcpreview.Size = new System.Drawing.Size(185, 22);\r
+            this.mnu_vlcpreview.Text = "Preview in VLC";\r
+            this.mnu_vlcpreview.Click += new System.EventHandler(this.mnu_vlcpreview_Click);\r
+            // \r
             // btn_ActivityWindow\r
             // \r
             this.btn_ActivityWindow.Image = global::Handbrake.Properties.Resources.ActivityWindow;\r
@@ -2883,32 +2920,6 @@ namespace Handbrake
             this.lbl_encode.Size = new System.Drawing.Size(31, 17);\r
             this.lbl_encode.Text = "{0}";\r
             // \r
-            // tb_preview\r
-            // \r
-            this.tb_preview.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
-            this.mnu_qtpreview,\r
-            this.mnu_vlcpreview});\r
-            this.tb_preview.Image = global::Handbrake.Properties.Resources.picture;\r
-            this.tb_preview.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
-            this.tb_preview.ImageTransparentColor = System.Drawing.Color.Magenta;\r
-            this.tb_preview.Name = "tb_preview";\r
-            this.tb_preview.Size = new System.Drawing.Size(90, 36);\r
-            this.tb_preview.Text = "Preview";\r
-            // \r
-            // mnu_qtpreview\r
-            // \r
-            this.mnu_qtpreview.Name = "mnu_qtpreview";\r
-            this.mnu_qtpreview.Size = new System.Drawing.Size(185, 22);\r
-            this.mnu_qtpreview.Text = "Preview in QuickTime";\r
-            this.mnu_qtpreview.Click += new System.EventHandler(this.mnu_qtpreview_Click);\r
-            // \r
-            // mnu_vlcpreview\r
-            // \r
-            this.mnu_vlcpreview.Name = "mnu_vlcpreview";\r
-            this.mnu_vlcpreview.Size = new System.Drawing.Size(185, 22);\r
-            this.mnu_vlcpreview.Text = "Preview in VLC";\r
-            this.mnu_vlcpreview.Click += new System.EventHandler(this.mnu_vlcpreview_Click);\r
-            // \r
             // frmMain\r
             // \r
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
@@ -3187,6 +3198,7 @@ namespace Handbrake
         private System.Windows.Forms.ToolStripDropDownButton tb_preview;\r
         private System.Windows.Forms.ToolStripMenuItem mnu_qtpreview;\r
         private System.Windows.Forms.ToolStripMenuItem mnu_vlcpreview;\r
+        private System.Windows.Forms.Label lbl_test;\r
 \r
     }\r
 }
\ No newline at end of file
index 7fcd2fb..ff9c69a 100644 (file)
@@ -88,7 +88,7 @@ namespace Handbrake
             loadPresetPanel();                       // Load the Preset Panel\r
             treeView_presets.ExpandAll();\r
             lbl_encode.Text = "";\r
-            queueWindow = new frmQueue(this);        // Prepare the Queue\r
+            queueWindow = new frmQueue(encodeQueue);        // Prepare the Queue\r
             if (Properties.Settings.Default.QueryEditorTab != "Checked")\r
                 tabs_panel.TabPages.RemoveAt(5); // Remove the query editor tab if the user does not want it enabled.\r
 \r
@@ -133,11 +133,10 @@ namespace Handbrake
             this.Enabled = true;\r
 \r
             // Event Handlers\r
-            if (Properties.Settings.Default.MainWindowMinimize == "Checked")\r
-                this.Resize += new EventHandler(frmMain_Resize);\r
+            events();\r
 \r
             // Queue Recovery\r
-            queueRecovery();\r
+            queueRecovery();    \r
         }\r
 \r
         // Startup Functions\r
@@ -180,6 +179,34 @@ namespace Handbrake
         }\r
         #endregion\r
 \r
+        #region Events\r
+        // Encoding Events for setting up the GUI\r
+        private void events()\r
+        {\r
+            // Handle Window Resize\r
+            if (Properties.Settings.Default.MainWindowMinimize == "Checked")\r
+                this.Resize += new EventHandler(frmMain_Resize);\r
+\r
+            // Handle Encode Start\r
+            encodeQueue.OnEncodeEnded += new EventHandler(encodeEnded);\r
+            encodeQueue.OnPaused += new EventHandler(encodePaused);\r
+            encodeQueue.OnEncodeStart += new EventHandler(encodeStarted);\r
+        }\r
+        private void encodeStarted(object sender, EventArgs e)\r
+        {\r
+            setLastAction("encode");\r
+            setEncodeStarted();\r
+        }\r
+        private void encodeEnded(object sender, EventArgs e)\r
+        {\r
+            setEncodeFinished();\r
+        }\r
+        private void encodePaused(object sender, EventArgs e)\r
+        {\r
+            setEncodeFinished();\r
+        }\r
+        #endregion\r
+\r
         // User Interface Menus / Tool Strips *********************************\r
 \r
         #region File Menu\r
@@ -192,7 +219,7 @@ namespace Handbrake
         #region Tools Menu\r
         private void mnu_encode_Click(object sender, EventArgs e)\r
         {\r
-            queueWindow.setQueue(encodeQueue);\r
+            queueWindow.setQueue();\r
             queueWindow.Show();\r
         }\r
         private void mnu_encodeLog_Click(object sender, EventArgs e)\r
@@ -504,6 +531,10 @@ namespace Handbrake
 \r
                 if (result == DialogResult.Yes)\r
                 {\r
+                    // Pause The Queue\r
+                    encodeQueue.pauseEncode();\r
+\r
+                    // Kill the current process.\r
                     Process[] aProc = Process.GetProcessesByName("HandBrakeCLI");\r
                     Process HandBrakeCLI;\r
                     if (aProc.Length > 0)\r
@@ -511,8 +542,9 @@ namespace Handbrake
                         HandBrakeCLI = aProc[0];\r
                         HandBrakeCLI.Kill();\r
                     }\r
-                    if (!queueWindow.isEncoding())\r
-                        setEncodeFinished();\r
+                    \r
+                    // Update the GUI\r
+                    setEncodeFinished();\r
                 }\r
             }\r
             else\r
@@ -534,13 +566,13 @@ namespace Handbrake
                         encodeQueue.add(query, text_source.Text, text_destination.Text);\r
                         encodeQueue.write2disk("hb_queue_recovery.xml");\r
                     }\r
-                    queueWindow.setQueue(encodeQueue);\r
+                    queueWindow.setQueue();\r
                     if (encodeQueue.count() > 1)\r
                         queueWindow.Show();\r
 \r
-                    queueWindow.frmMain_encode();\r
-\r
                     setEncodeStarted(); // Encode is running, so setup the GUI appropriately\r
+                    encodeQueue.startEncode(); // Start The Queue Encoding Process\r
+                    \r
                 }\r
                 else if (text_source.Text == string.Empty || text_source.Text == "Click 'Source' to continue" || text_destination.Text == string.Empty)\r
                     MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
@@ -560,13 +592,13 @@ namespace Handbrake
                 encodeQueue.add(query, text_source.Text, text_destination.Text);\r
                 encodeQueue.write2disk("hb_queue_recovery.xml"); // Writes the queue to the recovery file, just incase the GUI crashes.\r
 \r
-                queueWindow.setQueue(encodeQueue);\r
+                queueWindow.setQueue();\r
                 queueWindow.Show();\r
             }\r
         }\r
         private void btn_showQueue_Click(object sender, EventArgs e)\r
         {\r
-            queueWindow.setQueue(encodeQueue);\r
+            queueWindow.setQueue();\r
             queueWindow.Show();\r
         }\r
         private void mnu_vlcpreview_Click(object sender, EventArgs e)\r
index 0039ebd..d6bf08e 100644 (file)
@@ -155,12 +155,6 @@ Make sure you have selected a "Title" from the "Source" box above otherwise
 the list will not be populated with the correct amount of chapters.\r
 Note: Do not change any of the chapter numbers!</value>\r
   </data>\r
-  <metadata name="number.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
-    <value>True</value>\r
-  </metadata>\r
-  <metadata name="name.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
-    <value>True</value>\r
-  </metadata>\r
   <data name="check_Cabac.ToolTip" xml:space="preserve">\r
     <value>CABAC, or context adaptive binary arithmetic coding, is used by x264 to reduce the bitrate needed for a given quality by 15%. \r
 This makes it very cool and very useful, and it should be left on whenever possible. However, it is incompatible with the iPod 5.5G, and makes the AppleTV struggle. \r
index 0682c3c..a775c96 100644 (file)
@@ -51,7 +51,7 @@ namespace Handbrake
             this.label3 = new System.Windows.Forms.Label();\r
             this.toolStrip1 = new System.Windows.Forms.ToolStrip();\r
             this.btn_encode = new System.Windows.Forms.ToolStripButton();\r
-            this.btn_stop = new System.Windows.Forms.ToolStripButton();\r
+            this.btn_pause = new System.Windows.Forms.ToolStripButton();\r
             this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\r
             this.drop_button_queue = new System.Windows.Forms.ToolStripDropDownButton();\r
             this.mnu_batch = new System.Windows.Forms.ToolStripMenuItem();\r
@@ -218,7 +218,7 @@ namespace Handbrake
             this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\r
             this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
             this.btn_encode,\r
-            this.btn_stop,\r
+            this.btn_pause,\r
             this.toolStripSeparator1,\r
             this.drop_button_queue});\r
             this.toolStrip1.Location = new System.Drawing.Point(0, 0);\r
@@ -234,21 +234,21 @@ namespace Handbrake
             this.btn_encode.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
             this.btn_encode.ImageTransparentColor = System.Drawing.Color.Magenta;\r
             this.btn_encode.Name = "btn_encode";\r
-            this.btn_encode.Size = new System.Drawing.Size(84, 36);\r
+            this.btn_encode.Size = new System.Drawing.Size(78, 36);\r
             this.btn_encode.Text = "Encode";\r
             this.btn_encode.Click += new System.EventHandler(this.btn_encode_Click);\r
             // \r
-            // btn_stop\r
+            // btn_pause\r
             // \r
-            this.btn_stop.Image = global::Handbrake.Properties.Resources.Pause;\r
-            this.btn_stop.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
-            this.btn_stop.ImageTransparentColor = System.Drawing.Color.Magenta;\r
-            this.btn_stop.Name = "btn_stop";\r
-            this.btn_stop.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never;\r
-            this.btn_stop.Size = new System.Drawing.Size(75, 36);\r
-            this.btn_stop.Text = "Pause";\r
-            this.btn_stop.Visible = false;\r
-            this.btn_stop.Click += new System.EventHandler(this.btn_stop_Click);\r
+            this.btn_pause.Image = global::Handbrake.Properties.Resources.Pause;\r
+            this.btn_pause.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
+            this.btn_pause.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.btn_pause.Name = "btn_pause";\r
+            this.btn_pause.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never;\r
+            this.btn_pause.Size = new System.Drawing.Size(72, 36);\r
+            this.btn_pause.Text = "Pause";\r
+            this.btn_pause.Visible = false;\r
+            this.btn_pause.Click += new System.EventHandler(this.btn_pause_Click);\r
             // \r
             // toolStripSeparator1\r
             // \r
@@ -265,14 +265,14 @@ namespace Handbrake
             this.drop_button_queue.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
             this.drop_button_queue.ImageTransparentColor = System.Drawing.Color.Magenta;\r
             this.drop_button_queue.Name = "drop_button_queue";\r
-            this.drop_button_queue.Size = new System.Drawing.Size(89, 36);\r
+            this.drop_button_queue.Size = new System.Drawing.Size(84, 36);\r
             this.drop_button_queue.Text = "Queue";\r
             // \r
             // mnu_batch\r
             // \r
             this.mnu_batch.Image = global::Handbrake.Properties.Resources.Output_Small;\r
             this.mnu_batch.Name = "mnu_batch";\r
-            this.mnu_batch.Size = new System.Drawing.Size(207, 22);\r
+            this.mnu_batch.Size = new System.Drawing.Size(190, 22);\r
             this.mnu_batch.Text = "Generate Batch Script";\r
             this.mnu_batch.Click += new System.EventHandler(this.mnu_batch_Click);\r
             // \r
@@ -280,7 +280,7 @@ namespace Handbrake
             // \r
             this.mnu_import.Image = global::Handbrake.Properties.Resources.folder;\r
             this.mnu_import.Name = "mnu_import";\r
-            this.mnu_import.Size = new System.Drawing.Size(207, 22);\r
+            this.mnu_import.Size = new System.Drawing.Size(190, 22);\r
             this.mnu_import.Text = "Import Queue";\r
             this.mnu_import.Click += new System.EventHandler(this.mnu_import_Click);\r
             // \r
@@ -288,7 +288,7 @@ namespace Handbrake
             // \r
             this.mnu_export.Image = global::Handbrake.Properties.Resources.save;\r
             this.mnu_export.Name = "mnu_export";\r
-            this.mnu_export.Size = new System.Drawing.Size(207, 22);\r
+            this.mnu_export.Size = new System.Drawing.Size(190, 22);\r
             this.mnu_export.Text = "Export Queue";\r
             this.mnu_export.Click += new System.EventHandler(this.mnu_export_Click);\r
             // \r
@@ -364,7 +364,7 @@ namespace Handbrake
             this.lbl_encodesPending.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;\r
             this.lbl_encodesPending.Margin = new System.Windows.Forms.Padding(0, 3, 10, 2);\r
             this.lbl_encodesPending.Name = "lbl_encodesPending";\r
-            this.lbl_encodesPending.Size = new System.Drawing.Size(122, 17);\r
+            this.lbl_encodesPending.Size = new System.Drawing.Size(105, 17);\r
             this.lbl_encodesPending.Text = "0 encode(s) pending";\r
             // \r
             // OpenFile\r
@@ -475,7 +475,7 @@ namespace Handbrake
         private System.Windows.Forms.ToolStrip toolStrip1;\r
         private System.Windows.Forms.ToolStripButton btn_encode;\r
         private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\r
-        private System.Windows.Forms.ToolStripButton btn_stop;\r
+        private System.Windows.Forms.ToolStripButton btn_pause;\r
         private System.Windows.Forms.SaveFileDialog SaveFile;\r
         private System.Windows.Forms.ListView list_queue;\r
         private System.Windows.Forms.ColumnHeader Title;\r
index 43f198a..2fb6169 100644 (file)
@@ -21,173 +21,113 @@ namespace Handbrake
 {\r
     public partial class frmQueue : Form\r
     {\r
-        private delegate void ProgressUpdateHandler();\r
-        private delegate void setEncoding();\r
-        Functions.Encode cliObj = new Functions.Encode();\r
-        Boolean paused = false;\r
-        Process hbProc = null;\r
+        private delegate void UpdateHandler();\r
         Queue.QueueHandler queue;\r
-        frmMain mainWindow = null;\r
-        Thread theQ;\r
 \r
-        public frmQueue(frmMain main)\r
+        public frmQueue(Queue.QueueHandler q)\r
         {\r
             InitializeComponent();\r
-            mainWindow = main;\r
-        }\r
 \r
-        /// <summary>\r
-        /// Initializes the Queue list with the Arraylist from the Queue class\r
-        /// </summary>\r
-        /// <param name="qw"></param>\r
-        public void setQueue(Queue.QueueHandler qw)\r
+            this.queue = q;\r
+            queue.OnEncodeStart += new EventHandler(queue_OnEncodeStart);\r
+            queue.OnQueueFinished += new EventHandler(queue_OnQueueFinished);\r
+            queue.OnPaused += new EventHandler(queue_OnPaused);\r
+        }\r
+        void queue_OnPaused(object sender, EventArgs e)\r
         {\r
-            queue = qw;\r
-            redrawQueue();\r
-            lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";\r
+            setUIEncodeFinished();\r
+            updateUIElements();\r
         }\r
-\r
-        /// <summary>\r
-        /// Returns if there is currently an item being encoded by the queue\r
-        /// </summary>\r
-        /// <returns>Boolean true if encoding</returns>\r
-        public Boolean isEncoding()\r
+        void queue_OnQueueFinished(object sender, EventArgs e)\r
+        {\r
+            setUIEncodeFinished();\r
+            resetQueue(); // Reset the Queue Window\r
+        }\r
+        void queue_OnEncodeStart(object sender, EventArgs e)\r
         {\r
-            if (hbProc == null)\r
-                return false;\r
-            else\r
-                return true;\r
+            setUIEncodeStarted(); // make sure the UI is set correctly\r
+            setCurrentEncodeInformation();\r
+            updateUIElements(); // Redraw the Queue, a new encode has started.\r
         }\r
 \r
         /// <summary>\r
-        /// Allows frmMain to start an encode.\r
-        /// Should probably find a cleaner way of doing this.\r
+        /// Initializes the Queue list with the Arraylist from the Queue class\r
         /// </summary>\r
-        public void frmMain_encode()\r
+        /// <param name="qw"></param>\r
+        public void setQueue()\r
         {\r
-            btn_encode_Click(this, null);\r
+            updateUIElements();\r
         }\r
 \r
         // Start and Stop Controls\r
         private void btn_encode_Click(object sender, EventArgs e)\r
         {\r
-            if (queue.count() != 0)\r
+            if (queue.isPaused == true)\r
             {\r
-                if (paused == true)\r
-                {\r
-                    paused = false;\r
-                    btn_encode.Enabled = false;\r
-                    btn_stop.Visible = true;\r
-                }\r
-                else\r
-                {\r
-                    paused = false;\r
-                    btn_encode.Enabled = false;\r
-                    mainWindow.setLastAction("encode");\r
-                    mainWindow.setEncodeStarted();\r
+                setUIEncodeStarted();\r
+                MessageBox.Show("Encoding restarted", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
+            }\r
 \r
-                    // Start the encode\r
-                    try\r
-                    {\r
-                        // Setup or reset some values\r
-                        btn_encode.Enabled = false;\r
-                        btn_stop.Visible = true;\r
+            if (!queue.isEncodeStarted)\r
+                queue.startEncode();\r
 \r
-                        theQ = new Thread(startProc);\r
-                        theQ.IsBackground = true;\r
-                        theQ.Start();\r
-                    }\r
-                    catch (Exception exc)\r
-                    {\r
-                        MessageBox.Show(exc.ToString());\r
-                    }\r
-                }\r
-            }\r
         }\r
-        private void btn_stop_Click(object sender, EventArgs e)\r
+        private void btn_pause_Click(object sender, EventArgs e)\r
         {\r
-            paused = true;\r
-            btn_stop.Visible = false;\r
-            btn_encode.Enabled = true;\r
-            mainWindow.setEncodeFinished();\r
+            queue.pauseEncode();\r
+            setUIEncodeFinished();\r
             resetQueue();\r
             MessageBox.Show("No further items on the queue will start. The current encode process will continue until it is finished. \nClick 'Encode Video' when you wish to continue encoding the queue.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
         }\r
 \r
-        // Starts the encoding process\r
-        private void startProc(object state)\r
+        // Window Display Management\r
+        private void setUIEncodeStarted()\r
         {\r
-            try\r
+            if (this.InvokeRequired)\r
             {\r
-                // Run through each item on the queue\r
-                while (queue.count() != 0)\r
-                {\r
-                    string query = queue.getNextItemForEncoding();\r
-                    queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file\r
-\r
-                    setCurrentEncodeInformation();\r
-                    if (this.Created)\r
-                        updateUIElements();\r
-\r
-                    hbProc = cliObj.runCli(this, query);\r
-\r
-                    hbProc.WaitForExit();\r
-                    cliObj.addCLIQueryToLog(query);\r
-                    cliObj.copyLog(query, queue.getLastQueryItem().Destination);\r
-\r
-                    hbProc.Close();\r
-                    hbProc.Dispose();\r
-                    hbProc = null;\r
-                    query = "";\r
-\r
-                    while (paused == true) // Need to find a better way of doing this.\r
-                    {\r
-                        Thread.Sleep(10000);\r
-                    }\r
-                }\r
-\r
-                resetQueue();\r
-                \r
-                // After the encode is done, we may want to shutdown, suspend etc.\r
-                cliObj.afterEncodeAction();\r
+                this.BeginInvoke(new UpdateHandler(setUIEncodeStarted));\r
+                return;\r
             }\r
-            catch (Exception exc)\r
+            btn_encode.Enabled = false;\r
+            btn_pause.Visible = true;\r
+        }\r
+        private void setUIEncodeFinished()\r
+        {\r
+            if (this.InvokeRequired)\r
             {\r
-                MessageBox.Show(exc.ToString());\r
+                this.BeginInvoke(new UpdateHandler(setUIEncodeFinished));\r
+                return;\r
             }\r
+            btn_pause.Visible = false;\r
+            btn_encode.Enabled = true;\r
         }\r
-\r
-        // Window Display Management\r
-        private void resetQueue() \r
+        private void resetQueue()\r
         {\r
-            try\r
+            if (this.InvokeRequired)\r
             {\r
-                if (this.InvokeRequired)\r
-                {\r
-                    this.BeginInvoke(new ProgressUpdateHandler(resetQueue));\r
-                    return;\r
-                }\r
-                btn_stop.Visible = false;\r
-                btn_encode.Enabled = true;\r
-\r
-                lbl_source.Text = "-";\r
-                lbl_dest.Text = "-";\r
-                lbl_vEnc.Text = "-";\r
-                lbl_aEnc.Text = "-";\r
-                lbl_title.Text = "-";\r
-                lbl_chapt.Text = "-";\r
+                this.BeginInvoke(new UpdateHandler(resetQueue));\r
+                return;\r
+            }\r
+            btn_pause.Visible = false;\r
+            btn_encode.Enabled = true;\r
 \r
-                lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";\r
+            lbl_source.Text = "-";\r
+            lbl_dest.Text = "-";\r
+            lbl_vEnc.Text = "-";\r
+            lbl_aEnc.Text = "-";\r
+            lbl_title.Text = "-";\r
+            lbl_chapt.Text = "-";\r
 \r
-                mainWindow.setEncodeFinished(); // Tell the main window encodes have finished.\r
-            }\r
-            catch (Exception exc)\r
-            {\r
-                MessageBox.Show(exc.ToString());\r
-            }\r
+            lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";\r
         }\r
-        private void redrawQueue()  \r
+        private void redrawQueue()\r
         {\r
+            if (this.InvokeRequired)\r
+            {\r
+                this.BeginInvoke(new UpdateHandler(redrawQueue));\r
+                return;\r
+            }\r
+\r
             list_queue.Items.Clear();\r
             List<Queue.QueueItem> theQueue = queue.getQueue();\r
             foreach (Queue.QueueItem queue_item in theQueue)\r
@@ -224,31 +164,24 @@ namespace Handbrake
                 list_queue.Items.Add(item);\r
             }\r
         }\r
-        private void updateUIElements() \r
+        private void updateUIElements()\r
         {\r
-            try\r
+            if (this.InvokeRequired)\r
             {\r
-                if (this.InvokeRequired)\r
-                {\r
-                    this.BeginInvoke(new ProgressUpdateHandler(updateUIElements));\r
-                    return;\r
-                }\r
-\r
-                redrawQueue();\r
-                lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";\r
-            }\r
-            catch (Exception exc)\r
-            {\r
-                MessageBox.Show(exc.ToString());\r
+                this.BeginInvoke(new UpdateHandler(updateUIElements));\r
+                return;\r
             }\r
+\r
+            redrawQueue();\r
+            lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";\r
         }\r
-        private void setCurrentEncodeInformation() \r
+        private void setCurrentEncodeInformation()\r
         {\r
             try\r
             {\r
                 if (this.InvokeRequired)\r
                 {\r
-                    this.BeginInvoke(new setEncoding(setCurrentEncodeInformation));\r
+                    this.BeginInvoke(new UpdateHandler(setCurrentEncodeInformation));\r
                 }\r
 \r
                 // found query is a global varible\r
@@ -256,7 +189,6 @@ namespace Handbrake
                 lbl_source.Text = queue.getLastQueryItem().Source;\r
                 lbl_dest.Text = queue.getLastQueryItem().Destination;\r
 \r
-\r
                 if (parsed.DVDTitle == 0)\r
                     lbl_title.Text = "Auto";\r
                 else\r
@@ -293,7 +225,7 @@ namespace Handbrake
 \r
                 queue.moveUp(selected);\r
                 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file\r
-                redrawQueue();\r
+                updateUIElements();\r
 \r
                 if (selected - 1 > 0)\r
                     list_queue.Items[selected - 1].Selected = true;\r
@@ -309,7 +241,7 @@ namespace Handbrake
 \r
                 queue.moveDown(list_queue.SelectedIndices[0]);\r
                 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file\r
-                redrawQueue();\r
+                updateUIElements();\r
 \r
                 if (selected + 1 < list_queue.Items.Count)\r
                     list_queue.Items[selected + 1].Selected = true;\r
@@ -323,7 +255,7 @@ namespace Handbrake
             {\r
                 queue.remove(list_queue.SelectedIndices[0]);\r
                 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file\r
-                redrawQueue();\r
+                updateUIElements();\r
                 lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";\r
             }\r
         }\r
@@ -335,7 +267,7 @@ namespace Handbrake
                 {\r
                     queue.remove(list_queue.SelectedIndices[0]);\r
                     queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file\r
-                    redrawQueue();\r
+                    updateUIElements();\r
                 }\r
             }\r
         }\r
@@ -363,7 +295,7 @@ namespace Handbrake
             OpenFile.ShowDialog();\r
             if (OpenFile.FileName != String.Empty)\r
                 queue.recoverQueue(OpenFile.FileName);\r
-            redrawQueue();\r
+            updateUIElements();\r
         }\r
 \r
         // Hide's the window when the user tries to "x" out of the window instead of closing it.\r
@@ -373,6 +305,5 @@ namespace Handbrake
             this.Hide();\r
             base.OnClosing(e);\r
         }\r
-\r
     }\r
 }
\ No newline at end of file