2 using System.Drawing;
\r
3 using System.Windows.Forms;
\r
4 using System.Threading;
\r
5 using NaGet.SubCommands;
\r
8 namespace AppliStation.Util
\r
11 /// Description of ExecutionProgressViewer.
\r
13 public partial class ExecutionProgressViewer : Form
\r
15 private NaGetTaskSet taskSet;
\r
17 private Thread tasksetRunningThread = null;
\r
22 public enum ActionOnDoneFlags {
\r
25 AutoCloseOnSuccess = 2,
\r
31 public ActionOnDoneFlags ActionOnDone = ActionOnDoneFlags.FlashWindow;
\r
33 public ExecutionProgressViewer()
\r
36 // The InitializeComponent() call is required for Windows Forms designer support.
\r
38 InitializeComponent();
\r
41 private void onDownloadEvent(object sender, DownloadEventArgs a)
\r
43 if (InvokeRequired) {
\r
44 Invoke(new EventHandler<DownloadEventArgs>(onDownloadEvent), sender, a);
\r
49 if (a.TaskProgressPercent >= 0) {
\r
50 progressBarSub.Value = (int) a.TaskProgressPercent;
\r
51 progressBarSub.Style = ProgressBarStyle.Continuous;
\r
53 progressBarSub.Style = ProgressBarStyle.Marquee;
\r
57 case DownloadEventType.INITED:
\r
58 case DownloadEventType.CONNECTED:
\r
59 progressSubLabel.Text = a.TaskMessage;
\r
61 progressBarSub.Visible = true;
\r
62 progressSubLabel.Visible = true;
\r
64 case DownloadEventType.DOWNLOADING:
\r
65 progressSubLabel.Text = a.TaskMessage;
\r
67 case DownloadEventType.COMPLETED:
\r
68 progressBarSub.Visible = false;
\r
69 progressSubLabel.Visible = false;
\r
71 case DownloadEventType.ERROR:
\r
72 progressBarSub.Visible = false;
\r
73 progressSubLabel.Visible = false;
\r
75 logBox.SelectionColor = System.Drawing.Color.Red;
\r
76 logBox.AppendText(" [エラー] " + a.TaskMessage + System.Environment.NewLine);
\r
77 logBox.SelectionColor = logBox.ForeColor;
\r
82 #region NaGetTaskSet関連
\r
84 private void onTaskSetRaised(object sender, NaGetTaskSetEventArgs e)
\r
86 NaGetTaskSet taskSet = (NaGetTaskSet) sender;
\r
88 if (e.TaskProgressPercent >= 0) {
\r
89 progressBar.Value = (int) e.TaskProgressPercent;
\r
90 progressBar.Style = ProgressBarStyle.Continuous;
\r
92 progressBar.Style = ProgressBarStyle.Marquee;
\r
94 progressLabel.Text = e.TaskMessage ?? string.Empty;
\r
96 cancelButton.Enabled = taskSet.Running && taskSet.Cancelable;
\r
99 case NaGetTaskSetEventType.COMPLETED:
\r
100 logBox.AppendText("完了." + System.Environment.NewLine);
\r
101 if (taskSet.Done) {
\r
102 okButton.Enabled = true;
\r
103 cancelButton.Enabled = false;
\r
106 case NaGetTaskSetEventType.STARTED_TASKSET:
\r
107 subtitleLabel.Text = taskSet.TaskSetNames[taskSet.CurrentTaskSetIndex];
\r
108 logBox.AppendText(" " + e.TaskMessage + System.Environment.NewLine);
\r
110 case NaGetTaskSetEventType.COMPLETED_TASKSET:
\r
111 if (progressBarSub.Visible) progressBarSub.Hide();
\r
112 if (progressSubLabel.Visible) progressSubLabel.Hide();
\r
114 NativeMethods.ProgressBar_SetState(progressBar, 1); // VistaProgress色:ノーマル
\r
116 logBox.AppendText(string.Format(" ... 完了. [{0}%]", (int) e.TaskProgressPercent));
\r
117 logBox.AppendText(System.Environment.NewLine);
\r
119 case NaGetTaskSetEventType.INFO:
\r
120 logBox.AppendText(" " + e.TaskMessage + System.Environment.NewLine);
\r
122 case NaGetTaskSetEventType.ERROR:
\r
123 logBox.SelectionColor = System.Drawing.Color.Red;
\r
124 logBox.AppendText(" [エラー] " + e.TaskMessage + System.Environment.NewLine);
\r
125 logBox.SelectionColor = logBox.ForeColor;
\r
127 NativeMethods.ProgressBar_SetState(progressBar, 2); // VistaProgress色:エラー
\r
129 okButton.Enabled = true;
\r
130 cancelButton.Enabled = false;
\r
132 case NaGetTaskSetEventType.CANCELED:
\r
133 logBox.SelectionColor = System.Drawing.Color.Red;
\r
134 logBox.AppendText(e.TaskMessage + System.Environment.NewLine);
\r
135 logBox.SelectionColor = logBox.ForeColor;
\r
137 NativeMethods.ProgressBar_SetState(progressBar, 1); // VistaProgress色:中断
\r
139 okButton.Enabled = true;
\r
140 cancelButton.Enabled = false;
\r
142 case NaGetTaskSetEventType.WARNING:
\r
143 logBox.SelectionColor = System.Drawing.Color.Red;
\r
144 logBox.AppendText(" [エラー] " + e.TaskMessage + System.Environment.NewLine);
\r
145 logBox.SelectionColor = logBox.ForeColor;
\r
150 if (taskSet.Done) {
\r
151 if ((ActionOnDone & ActionOnDoneFlags.FlashWindow) != 0) {
\r
152 NativeMethods.Form_FlashWindow(this,
\r
153 NativeMethods.FlashFlag.All | NativeMethods.FlashFlag.TimerNoFG,
\r
156 if (okButton.Enabled && (ActionOnDone & ActionOnDoneFlags.AutoCloseOnSuccess) != 0) {
\r
157 this.DialogResult = DialogResult.OK;
\r
164 private NaGetTaskQueryResult onTaskQueryRaised(object sender, NaGetTaskQueryArgs e)
\r
166 MessageBoxButtons buttons = MessageBoxButtons.OKCancel;
\r
167 if (e.SelectionFlag == (NaGetTaskQueryResult.CONTINUE | NaGetTaskQueryResult.RETRY | NaGetTaskQueryResult.CANCEL)) {
\r
168 buttons = MessageBoxButtons.AbortRetryIgnore;
\r
169 } else if (e.SelectionFlag == (NaGetTaskQueryResult.RETRY | NaGetTaskQueryResult.CANCEL)) {
\r
170 buttons = MessageBoxButtons.RetryCancel;
\r
171 } else if (e.SelectionFlag == NaGetTaskQueryResult.CONTINUE) {
\r
172 buttons = MessageBoxButtons.OK;
\r
175 DialogResult result = MessageBox.Show(e.Message, this.Text, buttons);
\r
178 case DialogResult.OK:
\r
179 case DialogResult.Ignore:
\r
180 return NaGetTaskQueryResult.CONTINUE;
\r
181 case DialogResult.Cancel:
\r
182 case DialogResult.Abort:
\r
183 return NaGetTaskQueryResult.CANCEL;
\r
184 case DialogResult.Retry:
\r
185 return NaGetTaskQueryResult.RETRY;
\r
187 return NaGetTaskQueryResult.CANCELED_AUTOMATICALLY;
\r
191 public void SetTaskSet(NaGetTaskSet taskSet)
\r
193 this.taskSet = taskSet;
\r
195 taskSet.TaskSetRaised += delegate(object sender, NaGetTaskSetEventArgs e) {
\r
196 if (InvokeRequired) {
\r
197 Invoke(new EventHandler<NaGetTaskSetEventArgs>(onTaskSetRaised), taskSet, e);
\r
199 onTaskSetRaised(taskSet, e);
\r
203 System.Reflection.PropertyInfo fDownloader = taskSet.GetType().GetProperty("Downloader");
\r
204 if (fDownloader != null && (fDownloader.PropertyType == typeof(Downloader))) {
\r
205 ((Downloader) fDownloader.GetValue(taskSet, null)).DownloadEventRaised += onDownloadEvent;
\r
208 taskSet.TaskQueryRaised += onTaskQueryRaised;
\r
211 public void StartTaskSet()
\r
213 tasksetRunningThread = new Thread(taskSet.Run);
\r
214 tasksetRunningThread.Start();
\r
219 void OkButtonClick(object sender, EventArgs e)
\r
221 if (taskSet == null || taskSet.Done) {
\r
227 void CancelButtonClick(object sender, EventArgs e)
\r
229 if (InvokeRequired) {
\r
230 Invoke(new EventHandler(CancelButtonClickConcrete), sender, e);
\r
232 CancelButtonClickConcrete(sender,e);
\r
236 void CancelButtonClickConcrete(object sender, EventArgs e)
\r
238 if (taskSet != null && taskSet.Running && taskSet.Cancelable) {
\r
239 cancelButton.Enabled = false;
\r
241 NativeMethods.ProgressBar_SetState(progressBar, 3); // VistaProgress色:中断
\r
247 void ExecutionProgressViewerShown(object sender, EventArgs e)
\r
249 this.BringToFront();
\r