OSDN Git Service

WinGUI:
[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         Boolean cancel = false;\r
25         private void btn_q_encoder_Click(object sender, EventArgs e)\r
26         {\r
27             // Reset some values\r
28             \r
29             lbl_status.Visible = false;\r
30             cancel = false;\r
31 \r
32             // Start the encode\r
33             try\r
34             {\r
35                 if (list_queue.Items.Count != 0)\r
36                 {\r
37                     // Setup or reset some values\r
38                     btn_cancel.Visible = true;\r
39                     progressBar.Value = 0;\r
40                     lbl_progressValue.Text = "0 %";\r
41                     progressBar.Step = 100 / list_queue.Items.Count;\r
42                     progressBar.Update();\r
43                     //ThreadPool.QueueUserWorkItem(startProc);\r
44                     // Testing a new way of launching a thread. Hopefully will fix a random freeze up of the main thread.\r
45                     Thread theQ = new Thread(startProc);\r
46                     theQ.Start();\r
47                  }\r
48             }\r
49             catch (Exception exc)\r
50             {\r
51                 MessageBox.Show(exc.ToString());\r
52             }\r
53              \r
54         }\r
55         private void btn_cancel_Click(object sender, EventArgs e)\r
56         {\r
57             cancel = true;\r
58             btn_cancel.Visible = false;\r
59             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
60         }\r
61 \r
62         [DllImport("user32.dll")]\r
63         public static extern void LockWorkStation();\r
64         [DllImport("user32.dll")]\r
65         public static extern int ExitWindowsEx(int uFlags, int dwReason);\r
66 \r
67         private void startProc(object state)\r
68         {\r
69             try\r
70             {\r
71                 while (list_queue.Items.Count != 0)\r
72                 {\r
73                     string query = list_queue.Items[0].ToString();\r
74                     \r
75                     updateUIElements();\r
76                    \r
77                     Functions.CLI process = new Functions.CLI();\r
78                     Process hbProc = process.runCli(this, query, false, false, false, false);\r
79 \r
80                     hbProc.WaitForExit();\r
81                     hbProc.Close();\r
82                     hbProc.Dispose();\r
83 \r
84                     query = "";\r
85 \r
86                     if (cancel == true)\r
87                     {\r
88                         break;\r
89                     }\r
90                     \r
91                 }\r
92 \r
93                 resetQueue();\r
94                 \r
95 \r
96                 // Do something whent he encode ends.\r
97                 switch (Properties.Settings.Default.CompletionOption)\r
98                 {\r
99                     case "Shutdown":\r
100                         System.Diagnostics.Process.Start("Shutdown", "-s -t 60");\r
101                         break;\r
102                     case "Log Off":\r
103                         ExitWindowsEx(0, 0);\r
104                         break;\r
105                     case "Suspend":\r
106                         Application.SetSuspendState(PowerState.Suspend, true, true);\r
107                         break;\r
108                     case "Hibernate":\r
109                         Application.SetSuspendState(PowerState.Hibernate, true, true);\r
110                         break;\r
111                     case "Lock System":\r
112                         LockWorkStation();\r
113                         break;\r
114                     case "Quit HandBrake":\r
115                         Application.Exit();\r
116                         break;\r
117                     default:\r
118                         break;\r
119                 }\r
120             }\r
121             catch (Exception exc)\r
122             {\r
123                 MessageBox.Show(exc.ToString());\r
124             }\r
125         }\r
126 \r
127         private void updateUIElements()\r
128         {\r
129             try\r
130             {\r
131                 if (this.InvokeRequired)\r
132                 {\r
133                     this.BeginInvoke(new ProgressUpdateHandler(updateUIElements));\r
134                     return;\r
135                 }\r
136                 this.list_queue.Items.RemoveAt(0);\r
137 \r
138                 progressBar.PerformStep();\r
139                 lbl_progressValue.Text = string.Format("{0} %", progressBar.Value);\r
140                 progressBar.Update();\r
141             }\r
142             catch (Exception exc)\r
143             {\r
144                 MessageBox.Show(exc.ToString());\r
145             }\r
146         }\r
147 \r
148         private void resetQueue()\r
149         {\r
150             try\r
151             {\r
152                 if (this.InvokeRequired)\r
153                 {\r
154                     this.BeginInvoke(new ProgressUpdateHandler(resetQueue));\r
155                     return;\r
156                 }\r
157 \r
158                 if (cancel == true)\r
159                 {\r
160                     lbl_status.Visible = true;\r
161                     lbl_status.Text = "Encode Queue Cancelled!";\r
162                     text_edit.Text = "";\r
163                 }\r
164                 else\r
165                 {\r
166                     lbl_status.Visible = true;\r
167                     lbl_status.Text = "Encode Queue Completed!";\r
168                     text_edit.Text = "";\r
169                 }\r
170                 btn_cancel.Visible = false;\r
171 \r
172                 lbl_progressValue.Text = "0 %";\r
173                 progressBar.Value = 0;\r
174                 progressBar.Update();\r
175             }\r
176             catch (Exception exc)\r
177             {\r
178                 MessageBox.Show(exc.ToString());\r
179             }\r
180         }\r
181 \r
182         #endregion\r
183 \r
184         #region Queue Management\r
185         private void btn_up_Click(object sender, EventArgs e)\r
186         {\r
187             int count = list_queue.Items.Count;\r
188             int itemToMove = list_queue.SelectedIndex;\r
189             int previousItemint = 0;\r
190             String previousItem = "";\r
191 \r
192             if (itemToMove > 0)\r
193             {\r
194                 previousItemint = itemToMove - 1;\r
195                 previousItem = list_queue.Items[previousItemint].ToString();\r
196                 list_queue.Items[previousItemint] = list_queue.Items[itemToMove];\r
197                 list_queue.Items[itemToMove] = previousItem;\r
198                 list_queue.SelectedIndex = list_queue.SelectedIndex - 1;\r
199             }\r
200         }\r
201 \r
202         private void btn_down_Click(object sender, EventArgs e)\r
203         {\r
204             int count = list_queue.Items.Count;\r
205             int itemToMove = list_queue.SelectedIndex;\r
206             int itemAfterInt = 0;\r
207             String itemAfter = "";\r
208 \r
209             if (itemToMove < (count - 1))\r
210             {\r
211                 itemAfterInt = itemToMove + 1;\r
212                 itemAfter = list_queue.Items[itemAfterInt].ToString();\r
213                 list_queue.Items[itemAfterInt] = list_queue.Items[itemToMove];\r
214                 list_queue.Items[itemToMove] = itemAfter;\r
215                 list_queue.SelectedIndex = list_queue.SelectedIndex + 1;\r
216             }\r
217         }\r
218 \r
219         private void btn_delete_Click(object sender, EventArgs e)\r
220         {\r
221             list_queue.Items.Remove(list_queue.SelectedItem);\r
222         }\r
223         #endregion\r
224 \r
225         #region Queue Item Modification\r
226 \r
227         int listCount = 0;\r
228 \r
229         private void btn_updateQuery_Click(object sender, EventArgs e)\r
230         {\r
231             if (text_edit.Text != "")\r
232             {\r
233                 if (list_queue.Items.Count != listCount)\r
234                 {\r
235                     MessageBox.Show("Unable to modify the selected item. The number of items on the list has changed.  \nPlease avoid modifying an item when a new encode is about to start!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
236                 }\r
237                 else\r
238                 {\r
239                     if (list_queue.SelectedItem != null)\r
240                         list_queue.Items[list_queue.SelectedIndex] = text_edit.Text;\r
241                 }\r
242             }\r
243         }\r
244 \r
245         private void list_queue_SelectedIndexChanged(object sender, EventArgs e)\r
246         {\r
247             if (list_queue.SelectedItem != null)\r
248                 text_edit.Text = list_queue.SelectedItem.ToString();\r
249 \r
250             listCount = list_queue.Items.Count;\r
251         }\r
252         #endregion\r
253 \r
254         private void btn_Close_Click(object sender, EventArgs e)\r
255         {\r
256             this.Hide();\r
257         }\r
258 \r
259         protected override void OnClosing(CancelEventArgs e)\r
260         {\r
261             e.Cancel = true;\r
262             this.Hide();\r
263             base.OnClosing(e);\r
264         }\r
265 \r
266     }\r
267 }