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         int initialListCount = 0;\r
24         bool started = false;\r
25 \r
26       \r
27         private void btn_q_encoder_Click(object sender, EventArgs e)\r
28         {\r
29             progressBar.Value = 0;\r
30             lbl_progressValue.Text = "0 %";\r
31             progressBar.Step = 100 / list_queue.Items.Count;\r
32             progressBar.Update();\r
33             ThreadPool.QueueUserWorkItem(startProc);\r
34         }\r
35 \r
36         /*\r
37          * \r
38          * Code to Handle the CLI and updating of the UI as each process is completed.\r
39          * \r
40          */\r
41 \r
42         [DllImport("user32.dll")]\r
43         public static extern void LockWorkStation();\r
44         [DllImport("user32.dll")]\r
45         public static extern int ExitWindowsEx(int uFlags, int dwReason); \r
46 \r
47 \r
48         private void startProc(object state)\r
49         {\r
50             started = true;\r
51             initialListCount = list_queue.Items.Count;\r
52             for (int i = 0; i < initialListCount; i++)\r
53             {\r
54                 string query = list_queue.Items[0].ToString();\r
55 \r
56                 Functions.CLI process = new Functions.CLI();\r
57                 Process hbProc = process.runCli(this, query, false, false, false, false);\r
58                 \r
59                 hbProc.WaitForExit();\r
60                 hbProc.Close();\r
61                 hbProc.Dispose();\r
62                 updateUIElements();\r
63 \r
64                 if ((initialListCount - i) != (list_queue.Items.Count))\r
65                 {\r
66                     initialListCount++;\r
67                 }\r
68             }\r
69             started = false;\r
70             resetQueue();\r
71 \r
72             // Do something whent he encode ends.\r
73             switch (Properties.Settings.Default.CompletionOption)\r
74             {\r
75                 case "Shutdown":\r
76                     System.Diagnostics.Process.Start("Shutdown", "-s -t 60");\r
77                     break;\r
78                 case "Log Off":\r
79                     ExitWindowsEx(0, 0);\r
80                     break;\r
81                 case "Suspend":\r
82                     Application.SetSuspendState(PowerState.Suspend, true, true);\r
83                     break;\r
84                 case "Hibernate":\r
85                     Application.SetSuspendState(PowerState.Hibernate, true, true);\r
86                     break;\r
87                 case "Lock System":\r
88                     LockWorkStation();\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 \r
97         private void updateUIElements()\r
98         {\r
99             if (this.InvokeRequired)\r
100             {\r
101                 this.BeginInvoke(new ProgressUpdateHandler(updateUIElements));\r
102                 return;\r
103             }\r
104             this.list_queue.Items.RemoveAt(0);\r
105 \r
106             progressBar.PerformStep();\r
107             lbl_progressValue.Text = string.Format("{0} %", progressBar.Value);\r
108             progressBar.Update();\r
109         }\r
110 \r
111         private void resetQueue()\r
112         {\r
113             if (this.InvokeRequired)\r
114             {\r
115                 this.BeginInvoke(new ProgressUpdateHandler(resetQueue));\r
116                 return;\r
117             }\r
118             lbl_progressValue.Text = "0 %";\r
119             progressBar.Value = 0;\r
120             progressBar.Update();\r
121         }\r
122 \r
123         /*\r
124          * \r
125          * Code to Re-arrange / Delete items from the Queue\r
126          * \r
127          */\r
128         #region Queue Management\r
129 \r
130         private void btn_up_Click(object sender, EventArgs e)\r
131         {\r
132             int count = list_queue.Items.Count;\r
133             int itemToMove = list_queue.SelectedIndex;\r
134             int previousItemint = 0;\r
135             String previousItem = "";\r
136 \r
137             if (itemToMove > 0)\r
138             {\r
139                 previousItemint = itemToMove - 1;\r
140                 previousItem = list_queue.Items[previousItemint].ToString();\r
141                 list_queue.Items[previousItemint] = list_queue.Items[itemToMove];\r
142                 list_queue.Items[itemToMove] = previousItem;\r
143                 list_queue.SelectedIndex = list_queue.SelectedIndex - 1;\r
144             }\r
145         }\r
146 \r
147         private void btn_down_Click(object sender, EventArgs e)\r
148         {\r
149             int count = list_queue.Items.Count;\r
150             int itemToMove = list_queue.SelectedIndex;\r
151             int itemAfterInt = 0;\r
152             String itemAfter = "";\r
153 \r
154             if (itemToMove < (count - 1))\r
155             {\r
156                 itemAfterInt = itemToMove + 1;\r
157                 itemAfter = list_queue.Items[itemAfterInt].ToString();\r
158                 list_queue.Items[itemAfterInt] = list_queue.Items[itemToMove];\r
159                 list_queue.Items[itemToMove] = itemAfter;\r
160                 list_queue.SelectedIndex = list_queue.SelectedIndex + 1;\r
161             }\r
162         }\r
163 \r
164         private void btn_delete_Click(object sender, EventArgs e)\r
165         {\r
166             list_queue.Items.Remove(list_queue.SelectedItem);\r
167             if (started == true)\r
168                 initialListCount--;\r
169         }\r
170         #endregion\r
171 \r
172         /*\r
173          * Hide the Queue Window\r
174          */\r
175         private void btn_Close_Click(object sender, EventArgs e)\r
176         {\r
177             this.Hide();\r
178         }\r
179 \r
180         private void btn_minimise_Click(object sender, EventArgs e)\r
181         {\r
182             this.WindowState = FormWindowState.Minimized;\r
183         }\r
184     }\r
185 }