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