OSDN Git Service

AppliStation-GUI,進捗ダイアログのログテキスト表示領域がインストーラーファイルをダウンロードしているときに表示領域がカクカクする不具合を修正
[applistation/AppliStation.git] / AppliStation / AppliStation.Util / ExecutionProgressViewer.cs
index 7f2d33d..1d7fd04 100644 (file)
@@ -19,7 +19,7 @@ namespace AppliStation.Util
                /// <summary>\r
                /// 終了時に何を行うかのフラグ\r
                /// </summary>\r
-               public enum ActionOnDoneFlags {\r
+               private enum ActionOnDoneFlags {\r
                        None = 0,\r
                        FlashWindow = 1,\r
                        AutoCloseOnSuccess = 2,\r
@@ -28,7 +28,7 @@ namespace AppliStation.Util
                /// <summary>\r
                /// 終了時に何を行うか\r
                /// </summary>\r
-               public ActionOnDoneFlags ActionOnDone = ActionOnDoneFlags.FlashWindow;\r
+               private ActionOnDoneFlags ActionOnDone = ActionOnDoneFlags.FlashWindow;\r
                                \r
                public ExecutionProgressViewer()\r
                {\r
@@ -49,14 +49,6 @@ namespace AppliStation.Util
                                return;\r
                        }\r
                        \r
-                       \r
-                       if (a.TaskProgressPercent >= 0) {\r
-                               progressBarSub.Value = (int) a.TaskProgressPercent;\r
-                               progressBarSub.Style = ProgressBarStyle.Continuous;\r
-                       } else {\r
-                               progressBarSub.Style = ProgressBarStyle.Marquee;\r
-                       }\r
-                       \r
                        switch (a.Type) {\r
                                case DownloadEventType.INITED:\r
                                case DownloadEventType.CONNECTED:\r
@@ -81,6 +73,14 @@ namespace AppliStation.Util
                                        logBox.SelectionColor = logBox.ForeColor;\r
                                        break;\r
                        }\r
+                       \r
+                       // ダウンロードの進捗を表示\r
+                       if (a.TaskProgressPercent >= 0) {\r
+                               progressBarSub.Value = (int) a.TaskProgressPercent;\r
+                               progressBarSub.Style = ProgressBarStyle.Continuous;\r
+                       } else {\r
+                               progressBarSub.Style = ProgressBarStyle.Marquee;\r
+                       }\r
                }\r
                \r
                #region NaGetTaskSet関連\r
@@ -88,14 +88,7 @@ namespace AppliStation.Util
                private void onTaskSetRaised(object sender, NaGetTaskSetEventArgs e)\r
                {\r
                        NaGetTaskSet taskSet = (NaGetTaskSet) sender;\r
-                       \r
-                       if (e.TaskProgressPercent >= 0) {\r
-                               progressBar.Value = (int) e.TaskProgressPercent;\r
-                               progressBar.Style = ProgressBarStyle.Continuous;\r
-                       } else {\r
-                               progressBar.Style = ProgressBarStyle.Marquee;\r
-                       }\r
-                       progressLabel.Text = e.TaskMessage ?? string.Empty;\r
+                       NativeMethods.ProgressBarState progressState = NativeMethods.ProgressBarState.Normal;\r
                        \r
                        cancelButton.Enabled = taskSet.Running && taskSet.Cancelable;\r
                        \r
@@ -111,14 +104,14 @@ namespace AppliStation.Util
                                        }\r
                                        break;\r
                                case NaGetTaskSetEventType.STARTED_TASKSET:\r
-                                       subtitleLabel.Text = taskSet.TaskSetNames[taskSet.CurrentTaskSetIndex];\r
+                                       progressLabel.Text = taskSet.TaskSetNames[taskSet.CurrentTaskSetIndex];\r
                                        logBox.AppendText("  " + e.TaskMessage + System.Environment.NewLine);\r
                                        break;\r
                                case NaGetTaskSetEventType.COMPLETED_TASKSET:\r
                                        if (progressBarSub.Visible) progressBarSub.Hide();\r
                                        if (progressSubLabel.Visible) progressSubLabel.Hide();\r
                                        \r
-                                       NativeMethods.ProgressBar_SetState(progressBar, 1); // VistaProgress色:ノーマル\r
+                                       progressState = NativeMethods.ProgressBarState.Normal;\r
                                        \r
                                        logBox.AppendText(string.Format(" ... 完了. [{0}%]", (int) e.TaskProgressPercent));\r
                                        logBox.AppendText(System.Environment.NewLine);\r
@@ -131,7 +124,7 @@ namespace AppliStation.Util
                                        logBox.AppendText("  [エラー] " + e.TaskMessage + System.Environment.NewLine);\r
                                        logBox.SelectionColor = logBox.ForeColor;\r
                                        \r
-                                       NativeMethods.ProgressBar_SetState(progressBar, 2); // VistaProgress色:エラー\r
+                                       progressState = NativeMethods.ProgressBarState.Error;\r
                                        \r
                                        autoCloseCheckBox.Enabled = false;\r
                                        okButton.Enabled = true;\r
@@ -142,7 +135,7 @@ namespace AppliStation.Util
                                        logBox.AppendText(e.TaskMessage + System.Environment.NewLine);\r
                                        logBox.SelectionColor = logBox.ForeColor;\r
                                        \r
-                                       NativeMethods.ProgressBar_SetState(progressBar, 1); // VistaProgress色:中断\r
+                                       progressState = NativeMethods.ProgressBarState.Error;\r
                                        \r
                                        autoCloseCheckBox.Enabled = false;\r
                                        okButton.Enabled = true;\r
@@ -153,10 +146,31 @@ namespace AppliStation.Util
                                        logBox.AppendText("  [エラー] " + e.TaskMessage + System.Environment.NewLine);\r
                                        logBox.SelectionColor = logBox.ForeColor;\r
                                        \r
+                                       progressState = NativeMethods.ProgressBarState.Error;\r
+                                       \r
                                        autoCloseCheckBox.Enabled = false;\r
                                        break;\r
                        }\r
                        \r
+                       // タスクセット全体の進捗をプログレスバーに表示する\r
+                       if (e.TaskProgressPercent >= 0) {\r
+                               progressBar.Value = (int) e.TaskProgressPercent;\r
+                               progressBar.Style = ProgressBarStyle.Continuous;\r
+                       } else {\r
+                               progressBar.Style = ProgressBarStyle.Marquee;\r
+                       }\r
+                       NativeMethods.ProgressBar_SetState(progressBar, progressState);\r
+                       NativeMethods.ProgressBar_SetState(progressBarSub, progressState);\r
+                       // タスクセット全体の進捗をタスクバーに表示する(Windows 7以降のみ)\r
+                       if (e.TaskProgressPercent >= 0 && e.TaskProgressPercent < 100) {\r
+                               NativeMethods.Form_SetTaskbarProgressParams(this, progressBar.Style, progressState, (ulong) e.TaskProgressPercent, 100);\r
+                       } else {\r
+                               NativeMethods.Form_SetTaskbarProgressParams(this, progressBar.Style, progressState, 0, 0);\r
+                       }\r
+                       \r
+                       logBox.Select(logBox.TextLength, 0);\r
+                       logBox.ScrollToCaret();\r
+                       \r
                        if (taskSet.Done) {\r
                                if ((ActionOnDone & ActionOnDoneFlags.FlashWindow) != 0) {\r
                                        NativeMethods.Form_FlashWindow(this,\r
@@ -221,6 +235,8 @@ namespace AppliStation.Util
                public void StartTaskSet()\r
                {\r
                        tasksetRunningThread = new Thread(taskSet.Run);\r
+                       // スレッドをSTAにしないとCOMアクセスできず、ウイルススキャンができない。\r
+                       tasksetRunningThread.SetApartmentState(ApartmentState.STA);\r
                        tasksetRunningThread.Start();\r
                }\r
                \r
@@ -249,7 +265,8 @@ namespace AppliStation.Util
                        if (taskSet != null && taskSet.Running && taskSet.Cancelable) {\r
                                cancelButton.Enabled = false;\r
                                \r
-                               NativeMethods.ProgressBar_SetState(progressBar, 3); // VistaProgress色:中断\r
+                               NativeMethods.ProgressBar_SetState(progressBar, NativeMethods.ProgressBarState.Paused);\r
+                               NativeMethods.Form_SetTaskbarProgressParams(this, progressBar.Style,NativeMethods.ProgressBarState.Paused, (ulong) progressBar.Value, (ulong) progressBar.Maximum);\r
                                \r
                                taskSet.Cancel();\r
                        }\r