OSDN Git Service

117bb147f3d9f8781913433b04912d152e896e08
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmQueue.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.ComponentModel;\r
4 using System.Data;\r
5 using System.Drawing;\r
6 using System.Text;\r
7 using System.Windows.Forms;\r
8 using System.Threading;\r
9 using System.Diagnostics;\r
10 using System.Runtime.InteropServices;\r
11 \r
12 namespace Handbrake\r
13 {\r
14     public partial class frmQueue : Form\r
15     {\r
16         private delegate void ProgressUpdateHandler();\r
17 \r
18         public frmQueue()\r
19         {\r
20             InitializeComponent();\r
21         }\r
22 \r
23         #region Queue Handling\r
24 \r
25         private void btn_q_encoder_Click(object sender, EventArgs e)\r
26         {\r
27             try\r
28             {\r
29                 if (list_queue.Items.Count != 0)\r
30                 {\r
31                     progressBar.Value = 0;\r
32                     lbl_progressValue.Text = "0 %";\r
33                     progressBar.Step = 100 / list_queue.Items.Count;\r
34                     progressBar.Update();\r
35                     ThreadPool.QueueUserWorkItem(startProc);\r
36                 }\r
37             }\r
38             catch (Exception exc)\r
39             {\r
40                 MessageBox.Show(exc.ToString());\r
41             }\r
42              \r
43         }\r
44 \r
45         [DllImport("user32.dll")]\r
46         public static extern void LockWorkStation();\r
47         [DllImport("user32.dll")]\r
48         public static extern int ExitWindowsEx(int uFlags, int dwReason);\r
49 \r
50         private void startProc(object state)\r
51         {\r
52             try\r
53             {\r
54                 while (list_queue.Items.Count != 0)\r
55                 {\r
56                     string query = list_queue.Items[0].ToString();\r
57                     updateUIElements();\r
58                         \r
59                     Functions.CLI process = new Functions.CLI();\r
60                     Process hbProc = process.runCli(this, query, false, false, false, false);\r
61 \r
62                     hbProc.WaitForExit();\r
63                     hbProc.Close();\r
64                     hbProc.Dispose();\r
65                 }\r
66 \r
67                 resetQueue();\r
68 \r
69                 // Do something whent he encode ends.\r
70                 switch (Properties.Settings.Default.CompletionOption)\r
71                 {\r
72                     case "Shutdown":\r
73                         System.Diagnostics.Process.Start("Shutdown", "-s -t 60");\r
74                         break;\r
75                     case "Log Off":\r
76                         ExitWindowsEx(0, 0);\r
77                         break;\r
78                     case "Suspend":\r
79                         Application.SetSuspendState(PowerState.Suspend, true, true);\r
80                         break;\r
81                     case "Hibernate":\r
82                         Application.SetSuspendState(PowerState.Hibernate, true, true);\r
83                         break;\r
84                     case "Lock System":\r
85                         LockWorkStation();\r
86                         break;\r
87                     case "Quit HandBrake":\r
88                         Application.Exit();\r
89                         break;\r
90                     default:\r
91                         break;\r
92                 }\r
93 \r
94                 MessageBox.Show("Encode Queue Completed!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
95             }\r
96             catch (Exception exc)\r
97             {\r
98                 MessageBox.Show(exc.ToString());\r
99             }\r
100         }\r
101 \r
102         private void updateUIElements()\r
103         {\r
104             if (this.InvokeRequired)\r
105             {\r
106                 this.BeginInvoke(new ProgressUpdateHandler(updateUIElements));\r
107                 return;\r
108             }\r
109             this.list_queue.Items.RemoveAt(0);\r
110 \r
111             progressBar.PerformStep();\r
112             lbl_progressValue.Text = string.Format("{0} %", progressBar.Value);\r
113             progressBar.Update();\r
114         }\r
115 \r
116         private void resetQueue()\r
117         {\r
118             if (this.InvokeRequired)\r
119             {\r
120                 this.BeginInvoke(new ProgressUpdateHandler(resetQueue));\r
121                 return;\r
122             }\r
123             lbl_progressValue.Text = "0 %";\r
124             progressBar.Value = 0;\r
125             progressBar.Update();\r
126         }\r
127 \r
128         #endregion\r
129 \r
130         #region Queue Management\r
131         private void btn_up_Click(object sender, EventArgs e)\r
132         {\r
133             int count = list_queue.Items.Count;\r
134             int itemToMove = list_queue.SelectedIndex;\r
135             int previousItemint = 0;\r
136             String previousItem = "";\r
137 \r
138             if (itemToMove > 0)\r
139             {\r
140                 previousItemint = itemToMove - 1;\r
141                 previousItem = list_queue.Items[previousItemint].ToString();\r
142                 list_queue.Items[previousItemint] = list_queue.Items[itemToMove];\r
143                 list_queue.Items[itemToMove] = previousItem;\r
144                 list_queue.SelectedIndex = list_queue.SelectedIndex - 1;\r
145             }\r
146         }\r
147 \r
148         private void btn_down_Click(object sender, EventArgs e)\r
149         {\r
150             int count = list_queue.Items.Count;\r
151             int itemToMove = list_queue.SelectedIndex;\r
152             int itemAfterInt = 0;\r
153             String itemAfter = "";\r
154 \r
155             if (itemToMove < (count - 1))\r
156             {\r
157                 itemAfterInt = itemToMove + 1;\r
158                 itemAfter = list_queue.Items[itemAfterInt].ToString();\r
159                 list_queue.Items[itemAfterInt] = list_queue.Items[itemToMove];\r
160                 list_queue.Items[itemToMove] = itemAfter;\r
161                 list_queue.SelectedIndex = list_queue.SelectedIndex + 1;\r
162             }\r
163         }\r
164 \r
165         private void btn_delete_Click(object sender, EventArgs e)\r
166         {\r
167             list_queue.Items.Remove(list_queue.SelectedItem);\r
168         }\r
169         #endregion\r
170 \r
171 \r
172         private void btn_Close_Click(object sender, EventArgs e)\r
173         {\r
174             this.Hide();\r
175         }\r
176 \r
177         protected override void OnClosing(CancelEventArgs e)\r
178         {\r
179             e.Cancel = true;\r
180             this.Hide();\r
181             base.OnClosing(e);\r
182         }\r
183 \r
184     }\r
185 }