4 using System.Collections.Concurrent;
5 using System.Collections.Generic;
6 using System.ComponentModel;
10 using System.Reflection;
12 using System.Threading.Tasks;
13 using System.Windows.Forms;
15 using SiliconStudio.Assets;
17 namespace SiliconStudio.LauncherApp
21 private string loadingMessage;
22 private int loadingStep;
24 private ConcurrentQueue<NugetLogEventArgs> tempLogEvents;
25 private bool isMovingWindow;
26 private Point previousMousePosition;
27 private readonly Timer timer;
29 private bool isInitialized;
33 InitializeComponent();
34 tempLogEvents =
new ConcurrentQueue<NugetLogEventArgs>();
35 timer =
new Timer() { Interval = 200 };
36 launcherVersionLabel.Text =
"Launcher Version: " + LauncherApp.Version;
37 ExitOnUserClose =
true;
40 public bool ExitOnUserClose {
get; set; }
44 this.launcher = launcher;
45 logLabel.Text = defaultLogText ?? string.Empty;
46 versionLabel.Text = string.Empty;
48 launcher.Loading += launcher_Loading;
49 launcher.ProgressAvailable += launcher_ProgressAvailable;
50 launcher.LogAvailable += launcher_LogAvailable;
51 timer.Tick += timer_Tick;
57 void launcher_ProgressAvailable(
object sender, NuGet.ProgressEventArgs e)
59 loadingMessage = string.Format(
"{0} ({1}%)",
e.Operation, e.PercentComplete);
61 if (IsDisposed || !launcher.IsDownloading)
66 tempLogEvents.Enqueue(
new NugetLogEventArgs(MessageLevel.Info, loadingMessage));
69 void launcher_Loading(
object sender, LoadingEventArgs e)
71 tempLogEvents.Enqueue(
new NugetLogEventArgs(MessageLevel.Info,
"Loading " + e.Package));
72 versionLabel.InvokeSafe(() =>
74 versionLabel.Text =
"Version: " + e.Version;
78 private NugetLogEventArgs lastLog;
80 void timer_Tick(
object sender,
EventArgs e)
82 NugetLogEventArgs log;
83 while (tempLogEvents.TryDequeue(out log))
93 var logMessage = lastLog.Message;
94 if (lastLog.Level != MessageLevel.Debug && lastLog.Level != MessageLevel.Info)
96 logMessage = lastLog.Level +
": " + logMessage;
99 logLabel.Text = logMessage + string.Concat(Enumerable.Repeat(
".", (loadingStep & 3) + 1));
103 void launcher_LogAvailable(
object sender, NugetLogEventArgs e)
105 tempLogEvents.Enqueue(e);
108 private void SplashForm_MouseDown(
object sender, MouseEventArgs e)
110 previousMousePosition = Cursor.Position;
111 isMovingWindow =
true;
114 private void SplashForm_MouseMove(
object sender, MouseEventArgs e)
118 var newPosition = Cursor.Position;
120 var delta =
new Point(newPosition.X - previousMousePosition.X, newPosition.Y - previousMousePosition.Y);
121 var newWindowPosition = this.Location;
122 newWindowPosition.Offset(delta);
123 this.Location = newWindowPosition;
125 previousMousePosition = newPosition;
130 private void SplashForm_MouseUp(
object sender, MouseEventArgs e)
132 isMovingWindow =
false;
135 private void minimizeButton_Click(
object sender,
EventArgs e)
137 WindowState = FormWindowState.Minimized;
142 if (ExitOnUserClose && e.CloseReason == CloseReason.UserClosing)
147 base.OnFormClosing(e);
Operation
Enumeration of the different operations in the new Assimp's material stack.
System.Windows.Point Point