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
40 this.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);
\r
43 private void onDownloadEvent(object sender, DownloadEventArgs a)
\r
45 if (InvokeRequired) {
\r
46 Invoke(new EventHandler<DownloadEventArgs>(onDownloadEvent), sender, a);
\r
51 if (a.TaskProgressPercent >= 0) {
\r
52 progressBarSub.Value = (int) a.TaskProgressPercent;
\r
53 progressBarSub.Style = ProgressBarStyle.Continuous;
\r
55 progressBarSub.Style = ProgressBarStyle.Marquee;
\r
59 case DownloadEventType.INITED:
\r
60 case DownloadEventType.CONNECTED:
\r
61 progressSubLabel.Text = a.TaskMessage;
\r
63 progressBarSub.Visible = true;
\r
64 progressSubLabel.Visible = true;
\r
66 case DownloadEventType.DOWNLOADING:
\r
67 progressSubLabel.Text = a.TaskMessage;
\r
69 case DownloadEventType.COMPLETED:
\r
70 progressBarSub.Visible = false;
\r
71 progressSubLabel.Visible = false;
\r
73 case DownloadEventType.ERROR:
\r
74 progressBarSub.Visible = false;
\r
75 progressSubLabel.Visible = false;
\r
77 logBox.SelectionColor = System.Drawing.Color.Red;
\r
78 logBox.AppendText(" [エラー] " + a.TaskMessage + System.Environment.NewLine);
\r
79 logBox.SelectionColor = logBox.ForeColor;
\r
84 #region NaGetTaskSet関連
\r
86 private void onTaskSetRaised(object sender, NaGetTaskSetEventArgs e)
\r
88 NaGetTaskSet taskSet = (NaGetTaskSet) sender;
\r
90 if (e.TaskProgressPercent >= 0) {
\r
91 progressBar.Value = (int) e.TaskProgressPercent;
\r
92 progressBar.Style = ProgressBarStyle.Continuous;
\r
94 progressBar.Style = ProgressBarStyle.Marquee;
\r
96 progressLabel.Text = e.TaskMessage ?? string.Empty;
\r
98 cancelButton.Enabled = taskSet.Running && taskSet.Cancelable;
\r
101 case NaGetTaskSetEventType.COMPLETED:
\r
102 logBox.AppendText("完了." + System.Environment.NewLine);
\r
103 if (taskSet.Done) {
\r
104 okButton.Enabled = true;
\r
105 cancelButton.Enabled = false;
\r
108 case NaGetTaskSetEventType.STARTED_TASKSET:
\r
109 subtitleLabel.Text = taskSet.TaskSetNames[taskSet.CurrentTaskSetIndex];
\r
110 logBox.AppendText(" " + e.TaskMessage + System.Environment.NewLine);
\r
112 case NaGetTaskSetEventType.COMPLETED_TASKSET:
\r
113 if (progressBarSub.Visible) progressBarSub.Hide();
\r
114 if (progressSubLabel.Visible) progressSubLabel.Hide();
\r
116 NativeMethods.ProgressBar_SetState(progressBar, 1); // VistaProgress色:ノーマル
\r
118 logBox.AppendText(string.Format(" ... 完了. [{0}%]", (int) e.TaskProgressPercent));
\r
119 logBox.AppendText(System.Environment.NewLine);
\r
121 case NaGetTaskSetEventType.INFO:
\r
122 logBox.AppendText(" " + e.TaskMessage + System.Environment.NewLine);
\r
124 case NaGetTaskSetEventType.ERROR:
\r
125 logBox.SelectionColor = System.Drawing.Color.Red;
\r
126 logBox.AppendText(" [エラー] " + e.TaskMessage + System.Environment.NewLine);
\r
127 logBox.SelectionColor = logBox.ForeColor;
\r
129 NativeMethods.ProgressBar_SetState(progressBar, 2); // VistaProgress色:エラー
\r
131 okButton.Enabled = true;
\r
132 cancelButton.Enabled = false;
\r
134 case NaGetTaskSetEventType.CANCELED:
\r
135 logBox.SelectionColor = System.Drawing.Color.Red;
\r
136 logBox.AppendText(e.TaskMessage + System.Environment.NewLine);
\r
137 logBox.SelectionColor = logBox.ForeColor;
\r
139 NativeMethods.ProgressBar_SetState(progressBar, 1); // VistaProgress色:中断
\r
141 okButton.Enabled = true;
\r
142 cancelButton.Enabled = false;
\r
144 case NaGetTaskSetEventType.WARNING:
\r
145 logBox.SelectionColor = System.Drawing.Color.Red;
\r
146 logBox.AppendText(" [エラー] " + e.TaskMessage + System.Environment.NewLine);
\r
147 logBox.SelectionColor = logBox.ForeColor;
\r
152 if (taskSet.Done) {
\r
153 if ((ActionOnDone & ActionOnDoneFlags.FlashWindow) != 0) {
\r
154 NativeMethods.Form_FlashWindow(this,
\r
155 NativeMethods.FlashFlag.All | NativeMethods.FlashFlag.TimerNoFG,
\r
158 if (okButton.Enabled && (ActionOnDone & ActionOnDoneFlags.AutoCloseOnSuccess) != 0) {
\r
159 this.DialogResult = DialogResult.OK;
\r
166 private NaGetTaskQueryResult onTaskQueryRaised(object sender, NaGetTaskQueryArgs e)
\r
168 MessageBoxButtons buttons = MessageBoxButtons.OKCancel;
\r
169 if (e.SelectionFlag == (NaGetTaskQueryResult.CONTINUE | NaGetTaskQueryResult.RETRY | NaGetTaskQueryResult.CANCEL)) {
\r
170 buttons = MessageBoxButtons.AbortRetryIgnore;
\r
171 } else if (e.SelectionFlag == (NaGetTaskQueryResult.RETRY | NaGetTaskQueryResult.CANCEL)) {
\r
172 buttons = MessageBoxButtons.RetryCancel;
\r
173 } else if (e.SelectionFlag == NaGetTaskQueryResult.CONTINUE) {
\r
174 buttons = MessageBoxButtons.OK;
\r
177 DialogResult result = MessageBox.Show(e.Message, this.Text, buttons);
\r
180 case DialogResult.OK:
\r
181 case DialogResult.Ignore:
\r
182 return NaGetTaskQueryResult.CONTINUE;
\r
183 case DialogResult.Cancel:
\r
184 case DialogResult.Abort:
\r
185 return NaGetTaskQueryResult.CANCEL;
\r
186 case DialogResult.Retry:
\r
187 return NaGetTaskQueryResult.RETRY;
\r
189 return NaGetTaskQueryResult.CANCELED_AUTOMATICALLY;
\r
193 public void SetTaskSet(NaGetTaskSet taskSet)
\r
195 this.taskSet = taskSet;
\r
197 taskSet.TaskSetRaised += delegate(object sender, NaGetTaskSetEventArgs e) {
\r
198 if (InvokeRequired) {
\r
199 Invoke(new EventHandler<NaGetTaskSetEventArgs>(onTaskSetRaised), taskSet, e);
\r
201 onTaskSetRaised(taskSet, e);
\r
205 System.Reflection.PropertyInfo fDownloader = taskSet.GetType().GetProperty("Downloader");
\r
206 if (fDownloader != null && (fDownloader.PropertyType == typeof(Downloader))) {
\r
207 ((Downloader) fDownloader.GetValue(taskSet, null)).DownloadEventRaised += onDownloadEvent;
\r
210 taskSet.TaskQueryRaised += onTaskQueryRaised;
\r
213 public void StartTaskSet()
\r
215 tasksetRunningThread = new Thread(taskSet.Run);
\r
216 tasksetRunningThread.Start();
\r
221 void OkButtonClick(object sender, EventArgs e)
\r
223 if (taskSet == null || taskSet.Done) {
\r
229 void CancelButtonClick(object sender, EventArgs e)
\r
231 if (InvokeRequired) {
\r
232 Invoke(new EventHandler(CancelButtonClickConcrete), sender, e);
\r
234 CancelButtonClickConcrete(sender,e);
\r
238 void CancelButtonClickConcrete(object sender, EventArgs e)
\r
240 if (taskSet != null && taskSet.Running && taskSet.Cancelable) {
\r
241 cancelButton.Enabled = false;
\r
243 NativeMethods.ProgressBar_SetState(progressBar, 3); // VistaProgress色:中断
\r
249 void ExecutionProgressViewerShown(object sender, EventArgs e)
\r
251 this.BringToFront();
\r