OSDN Git Service

AppliStation-GUI,タスク進捗ダイアログの自動クローズ機能を追加。
[applistation/AppliStation.git] / AppliStation / AppliStation.Util / ExecutionProgressViewer.cs
index 9f704ba..7f2d33d 100644 (file)
@@ -38,6 +38,8 @@ namespace AppliStation.Util
                        InitializeComponent();\r
                        \r
                        this.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);\r
+                       toolTip.SetToolTip(autoCloseCheckBox,\r
+                                          string.Format("エラーがなく正常に終了した場合、{0}秒後に自動的にこのダイアログを閉じます", autoCloseTimer.Interval/1000));\r
                }\r
                                \r
                private void onDownloadEvent(object sender, DownloadEventArgs a)\r
@@ -103,6 +105,9 @@ namespace AppliStation.Util
                                        if (taskSet.Done) {\r
                                                okButton.Enabled = true;\r
                                                cancelButton.Enabled = false;\r
+                                               \r
+                                               // タスクが完了したらしばらく待って閉じるために、自動クローズタイマーを起動する\r
+                                               autoCloseTimer.Start();\r
                                        }\r
                                        break;\r
                                case NaGetTaskSetEventType.STARTED_TASKSET:\r
@@ -128,6 +133,7 @@ namespace AppliStation.Util
                                        \r
                                        NativeMethods.ProgressBar_SetState(progressBar, 2); // VistaProgress色:エラー\r
                                        \r
+                                       autoCloseCheckBox.Enabled = false;\r
                                        okButton.Enabled = true;\r
                                        cancelButton.Enabled = false;\r
                                        break;\r
@@ -138,6 +144,7 @@ namespace AppliStation.Util
                                        \r
                                        NativeMethods.ProgressBar_SetState(progressBar, 1); // VistaProgress色:中断\r
                                        \r
+                                       autoCloseCheckBox.Enabled = false;\r
                                        okButton.Enabled = true;\r
                                        cancelButton.Enabled = false;\r
                                        break;\r
@@ -146,6 +153,7 @@ namespace AppliStation.Util
                                        logBox.AppendText("  [エラー] " + e.TaskMessage + System.Environment.NewLine);\r
                                        logBox.SelectionColor = logBox.ForeColor;\r
                                        \r
+                                       autoCloseCheckBox.Enabled = false;\r
                                        break;\r
                        }\r
                        \r
@@ -237,6 +245,7 @@ namespace AppliStation.Util
                \r
                void CancelButtonClickConcrete(object sender, EventArgs e)\r
                {\r
+                       autoCloseCheckBox.Enabled = false;\r
                        if (taskSet != null && taskSet.Running && taskSet.Cancelable) {\r
                                cancelButton.Enabled = false;\r
                                \r
@@ -250,5 +259,32 @@ namespace AppliStation.Util
                {\r
                        this.BringToFront();\r
                }\r
+               \r
+               void ExecutionProgressViewerFormClosed(object sender, FormClosedEventArgs e)\r
+               {\r
+                       autoCloseTimer.Enabled = false;\r
+               }\r
+               \r
+               void AutoCloseTimerTick(object sender, EventArgs e)\r
+               {\r
+                       autoCloseTimer.Stop();\r
+                       \r
+                       if (InvokeRequired) {\r
+                               Invoke(new EventHandler(AutoCloseTimerTickConcrete), sender, e);\r
+                       } else {\r
+                               AutoCloseTimerTickConcrete(sender,e);\r
+                       }\r
+               }\r
+               \r
+               void AutoCloseTimerTickConcrete(object sender, EventArgs e)\r
+               {\r
+                       // autoCloseCheckBoxが有効(正常終了)かつチェックのときに限り、OKボタンを自動的にクリック\r
+                       if (autoCloseCheckBox.Enabled && autoCloseCheckBox.Checked && okButton.Enabled) {\r
+                               OkButtonClick(sender, e);\r
+                       } else if (! autoCloseCheckBox.Enabled) {\r
+                               // タイマーの時間がすぎて、そのとき自動で閉じないようにしていしてあるならば、手動で閉じるように\r
+                               autoCloseCheckBox.Enabled = false;\r
+                       }\r
+               }\r
        }\r
 }\r