OSDN Git Service

Change the fifo size from being statically tuned for a Mac Pro with 4 CPUs to dynamic...
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmQueue.cs
index 16a7ae6..a08591c 100644 (file)
@@ -5,24 +5,176 @@ using System.Data;
 using System.Drawing;\r
 using System.Text;\r
 using System.Windows.Forms;\r
+using System.Threading;\r
+using System.Diagnostics;\r
+using System.Runtime.InteropServices;\r
 \r
 namespace Handbrake\r
 {\r
     public partial class frmQueue : Form\r
     {\r
+        private delegate void ProgressUpdateHandler();\r
+\r
         public frmQueue()\r
         {\r
             InitializeComponent();\r
         }\r
 \r
-        public void addItem(String item)\r
+        #region Queue Handling\r
+\r
+        private void btn_q_encoder_Click(object sender, EventArgs e)\r
+        {\r
+            if (list_queue.Items.Count != 0)\r
+            {\r
+                progressBar.Value = 0;\r
+                lbl_progressValue.Text = "0 %";\r
+                progressBar.Step = 100 / list_queue.Items.Count;\r
+                progressBar.Update();\r
+                ThreadPool.QueueUserWorkItem(startProc);\r
+            }\r
+             \r
+        }\r
+\r
+        [DllImport("user32.dll")]\r
+        public static extern void LockWorkStation();\r
+        [DllImport("user32.dll")]\r
+        public static extern int ExitWindowsEx(int uFlags, int dwReason);\r
+\r
+        private void startProc(object state)\r
+        {\r
+            try\r
+            {\r
+                while (list_queue.Items.Count != 0)\r
+                {\r
+                    string query = list_queue.Items[0].ToString();\r
+                    updateUIElements();\r
+                        \r
+                    Functions.CLI process = new Functions.CLI();\r
+                    Process hbProc = process.runCli(this, query, false, false, false, false);\r
+\r
+                    hbProc.WaitForExit();\r
+                    hbProc.Close();\r
+                    hbProc.Dispose();\r
+                }\r
+\r
+                resetQueue();\r
+\r
+                // Do something whent he encode ends.\r
+                switch (Properties.Settings.Default.CompletionOption)\r
+                {\r
+                    case "Shutdown":\r
+                        System.Diagnostics.Process.Start("Shutdown", "-s -t 60");\r
+                        break;\r
+                    case "Log Off":\r
+                        ExitWindowsEx(0, 0);\r
+                        break;\r
+                    case "Suspend":\r
+                        Application.SetSuspendState(PowerState.Suspend, true, true);\r
+                        break;\r
+                    case "Hibernate":\r
+                        Application.SetSuspendState(PowerState.Hibernate, true, true);\r
+                        break;\r
+                    case "Lock System":\r
+                        LockWorkStation();\r
+                        break;\r
+                    case "Quit HandBrake":\r
+                        Application.Exit();\r
+                        break;\r
+                    default:\r
+                        break;\r
+                }\r
+\r
+                MessageBox.Show("Encode Queue Completed!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
+            }\r
+            catch (Exception exc)\r
+            {\r
+                MessageBox.Show(exc.ToString());\r
+            }\r
+        }\r
+\r
+        private void updateUIElements()\r
+        {\r
+            if (this.InvokeRequired)\r
+            {\r
+                this.BeginInvoke(new ProgressUpdateHandler(updateUIElements));\r
+                return;\r
+            }\r
+            this.list_queue.Items.RemoveAt(0);\r
+\r
+            progressBar.PerformStep();\r
+            lbl_progressValue.Text = string.Format("{0} %", progressBar.Value);\r
+            progressBar.Update();\r
+        }\r
+\r
+        private void resetQueue()\r
+        {\r
+            if (this.InvokeRequired)\r
+            {\r
+                this.BeginInvoke(new ProgressUpdateHandler(resetQueue));\r
+                return;\r
+            }\r
+            lbl_progressValue.Text = "0 %";\r
+            progressBar.Value = 0;\r
+            progressBar.Update();\r
+        }\r
+\r
+        #endregion\r
+\r
+        #region Queue Management\r
+\r
+        private void btn_up_Click(object sender, EventArgs e)\r
+        {\r
+            int count = list_queue.Items.Count;\r
+            int itemToMove = list_queue.SelectedIndex;\r
+            int previousItemint = 0;\r
+            String previousItem = "";\r
+\r
+            if (itemToMove > 0)\r
+            {\r
+                previousItemint = itemToMove - 1;\r
+                previousItem = list_queue.Items[previousItemint].ToString();\r
+                list_queue.Items[previousItemint] = list_queue.Items[itemToMove];\r
+                list_queue.Items[itemToMove] = previousItem;\r
+                list_queue.SelectedIndex = list_queue.SelectedIndex - 1;\r
+            }\r
+        }\r
+\r
+        private void btn_down_Click(object sender, EventArgs e)\r
+        {\r
+            int count = list_queue.Items.Count;\r
+            int itemToMove = list_queue.SelectedIndex;\r
+            int itemAfterInt = 0;\r
+            String itemAfter = "";\r
+\r
+            if (itemToMove < (count - 1))\r
+            {\r
+                itemAfterInt = itemToMove + 1;\r
+                itemAfter = list_queue.Items[itemAfterInt].ToString();\r
+                list_queue.Items[itemAfterInt] = list_queue.Items[itemToMove];\r
+                list_queue.Items[itemToMove] = itemAfter;\r
+                list_queue.SelectedIndex = list_queue.SelectedIndex + 1;\r
+            }\r
+        }\r
+\r
+        private void btn_delete_Click(object sender, EventArgs e)\r
         {\r
-            list_queue.Items.Add(item);\r
+            list_queue.Items.Remove(list_queue.SelectedItem);\r
         }\r
+        #endregion\r
+\r
+        #region Window Management\r
 \r
         private void btn_Close_Click(object sender, EventArgs e)\r
         {\r
-            this.Close();\r
+            this.Hide();\r
         }\r
+\r
+        private void btn_minimise_Click(object sender, EventArgs e)\r
+        {\r
+            this.WindowState = FormWindowState.Minimized;\r
+        }\r
+\r
+        #endregion\r
+\r
     }\r
 }
\ No newline at end of file