OSDN Git Service

initial build for opensource
[applistation/AppliStation.git] / AppliStation / AppliStation.Util / ExecutionProgressViewer.cs
1 using System;\r
2 using System.Drawing;\r
3 using System.Windows.Forms;\r
4 using System.Threading;\r
5 using NaGet.SubCommands;\r
6 using NaGet.Net;\r
7 \r
8 namespace AppliStation.Util\r
9 {\r
10         /// <summary>\r
11         /// Description of ExecutionProgressViewer.\r
12         /// </summary>\r
13         public partial class ExecutionProgressViewer : Form\r
14         {\r
15                 private NaGetTaskSet taskSet;\r
16                 \r
17                 private Downloader downloader;\r
18                 \r
19                 private Thread tasksetRunningThread = null;\r
20                 \r
21                 public Downloader Downloader {\r
22                         get { return downloader; }\r
23                 }\r
24                 \r
25                 public ExecutionProgressViewer()\r
26                 {\r
27                         //\r
28                         // The InitializeComponent() call is required for Windows Forms designer support.\r
29                         //\r
30                         InitializeComponent();\r
31                         \r
32                         downloader = new Downloader();\r
33                         downloader.DownloadEventRaised += delegate(object sender, DownloadEventArgs e) {\r
34                                 if (InvokeRequired) {\r
35                                         Invoke(new EventHandler<DownloadEventArgs>(onDownloadEvent), sender, e);\r
36                                 } else {\r
37                                         onDownloadEvent(sender, e);\r
38                                 }\r
39                         };\r
40                 }\r
41                 \r
42                 private void onDownloadEvent(object sender, DownloadEventArgs a)\r
43                 {\r
44                         if (a.TaskProgressPercent >= 0) {\r
45                                 progressBarSub.Value = (int) a.TaskProgressPercent;\r
46                                 progressBarSub.Style = ProgressBarStyle.Continuous;\r
47                         } else {\r
48                                 progressBarSub.Style = ProgressBarStyle.Marquee;\r
49                         }\r
50                         \r
51                         switch (a.Type) {\r
52                                 case DownloadEventType.INITED:\r
53                                 case DownloadEventType.CONNECTED:\r
54                                         progressSubLabel.Text = a.TaskMessage;\r
55                                         \r
56                                         progressBarSub.Visible = true;\r
57                                         progressSubLabel.Visible = true;\r
58                                         break;\r
59                                 case DownloadEventType.DOWNLOADING:\r
60                                         progressSubLabel.Text = a.TaskMessage;\r
61                                         break;\r
62                                 case DownloadEventType.COMPLETED:\r
63                                         progressBarSub.Visible = false;\r
64                                         progressSubLabel.Visible = false;\r
65                                         break;\r
66                                 case DownloadEventType.ERROR:\r
67                                         progressBarSub.Visible = false;\r
68                                         progressSubLabel.Visible = false;\r
69                                         \r
70                                         logBox.SelectionColor = System.Drawing.Color.Red;\r
71                                         logBox.AppendText("   [\83G\83\89\81[] " + a.TaskMessage + System.Environment.NewLine);\r
72                                         logBox.SelectionColor = logBox.ForeColor;\r
73                                         break;\r
74                         }\r
75                 }\r
76                 \r
77                 #region NaGetTaskSet\8aÖ\98A\r
78                 \r
79                 private void onTaskSetRaised(object sender, NaGetTaskSetEventArgs e)\r
80                 {\r
81                         NaGetTaskSet taskSet = (NaGetTaskSet) sender;\r
82                         \r
83                         if (e.TaskProgressPercent >= 0) {\r
84                                 progressBar.Value = (int) e.TaskProgressPercent;\r
85                                 progressBar.Style = ProgressBarStyle.Continuous;\r
86                         } else {\r
87                                 progressBar.Style = ProgressBarStyle.Marquee;\r
88                         }\r
89                         progressLabel.Text = e.TaskMessage ?? string.Empty;\r
90                         \r
91                         cancelButton.Enabled = taskSet.Running && taskSet.Cancelable;\r
92                         \r
93                         switch (e.Type) {\r
94                                 case NaGetTaskSetEventType.COMPLETED:\r
95                                         logBox.AppendText("\8a®\97¹." + System.Environment.NewLine);\r
96                                         if (taskSet.Done) {\r
97                                                 okButton.Enabled = true;\r
98                                                 cancelButton.Enabled = false;\r
99                                         }\r
100                                         break;\r
101                                 case NaGetTaskSetEventType.STARTED_TASKSET:\r
102                                         subtitleLabel.Text = taskSet.TaskSetNames[taskSet.CurrentTaskSetIndex];\r
103                                         logBox.AppendText("  " + e.TaskMessage + System.Environment.NewLine);\r
104                                         break;\r
105                                 case NaGetTaskSetEventType.COMPLETED_TASKSET:\r
106                                         if (progressBarSub.Visible) progressBarSub.Hide();\r
107                                         if (progressSubLabel.Visible) progressSubLabel.Hide();\r
108                                         \r
109                                         NativeMethods.ProgressBar_SetState(progressBar, 1); // VistaProgress\90F\81F\83m\81[\83}\83\8b\r
110                                         \r
111                                         logBox.AppendText(string.Format(" ... \8a®\97¹. [{0}%]", (int) e.TaskProgressPercent));\r
112                                         logBox.AppendText(System.Environment.NewLine);\r
113                                         break;\r
114                                 case NaGetTaskSetEventType.INFO:\r
115                                         logBox.AppendText("  " + e.TaskMessage + System.Environment.NewLine);\r
116                                         break;\r
117                                 case NaGetTaskSetEventType.ERROR:\r
118                                         logBox.SelectionColor = System.Drawing.Color.Red;\r
119                                         logBox.AppendText("  [\83G\83\89\81[] " + e.TaskMessage + System.Environment.NewLine);\r
120                                         logBox.SelectionColor = logBox.ForeColor;\r
121                                         \r
122                                         NativeMethods.ProgressBar_SetState(progressBar, 2); // VistaProgress\90F\81F\83G\83\89\81[\r
123                                         \r
124                                         okButton.Enabled = true;\r
125                                         cancelButton.Enabled = false;\r
126                                         break;\r
127                                 case NaGetTaskSetEventType.CANCELED:\r
128                                         logBox.SelectionColor = System.Drawing.Color.Red;\r
129                                         logBox.AppendText(e.TaskMessage + System.Environment.NewLine);\r
130                                         logBox.SelectionColor = logBox.ForeColor;\r
131                                         \r
132                                         NativeMethods.ProgressBar_SetState(progressBar, 1); // VistaProgress\90F\81F\92\86\92f\r
133                                         \r
134                                         okButton.Enabled = true;\r
135                                         cancelButton.Enabled = false;\r
136                                         break;\r
137                                 case NaGetTaskSetEventType.WARNING:\r
138                                         logBox.SelectionColor = System.Drawing.Color.Red;\r
139                                         logBox.AppendText("  [\83G\83\89\81[] " + e.TaskMessage + System.Environment.NewLine);\r
140                                         logBox.SelectionColor = logBox.ForeColor;\r
141                                         \r
142                                         break;\r
143                         }\r
144                         \r
145                         if (taskSet.Done) {\r
146                                 NativeMethods.Form_FlashWindow(this,\r
147                                                                NativeMethods.FlashFlag.All | NativeMethods.FlashFlag.TimerNoFG,\r
148                                                                uint.MaxValue, 0);\r
149                         }\r
150                 }\r
151                 \r
152                 public void SetTaskSet(NaGetTaskSet taskSet)\r
153                 {\r
154                         this.taskSet = taskSet;\r
155                         \r
156                         taskSet.TaskSetRaised += delegate(object sender, NaGetTaskSetEventArgs e) {\r
157                                 if (InvokeRequired) {\r
158                                         Invoke(new EventHandler<NaGetTaskSetEventArgs>(onTaskSetRaised), taskSet, e);\r
159                                 } else {\r
160                                         onTaskSetRaised(taskSet, e);\r
161                                 }\r
162                         };\r
163                 }\r
164 \r
165                 public void StartTaskSet()\r
166                 {\r
167                         tasksetRunningThread = new Thread(taskSet.Run);\r
168                         tasksetRunningThread.Start();\r
169                 }\r
170                 \r
171                 #endregion\r
172                 \r
173                 void OkButtonClick(object sender, EventArgs e)\r
174                 {\r
175                         if (taskSet == null || taskSet.Done) {\r
176                                 this.Close();\r
177                                 this.Dispose();\r
178                         }\r
179                 }\r
180                 \r
181                 void CancelButtonClick(object sender, EventArgs e)\r
182                 {\r
183                         if (InvokeRequired) {\r
184                                 Invoke(new EventHandler(CancelButtonClickConcrete), sender, e);\r
185                         } else {\r
186                                 CancelButtonClickConcrete(sender,e);\r
187                         }\r
188                 }\r
189                 \r
190                 void CancelButtonClickConcrete(object sender, EventArgs e)\r
191                 {\r
192                         if (taskSet != null && taskSet.Running && taskSet.Cancelable) {\r
193                                 cancelButton.Enabled = false;\r
194                                 \r
195                                 NativeMethods.ProgressBar_SetState(progressBar, 3); // VistaProgress\90F\81F\92\86\92f\r
196                                 \r
197                                 taskSet.Cancel();\r
198                         }\r
199                 }\r
200                 \r
201                 void ExecutionProgressViewerShown(object sender, EventArgs e)\r
202                 {\r
203                         this.BringToFront();\r
204                 }\r
205         }\r
206 }\r