Skip to content

Commit c13e83e

Browse files
author
Juan Segura
committed
ZXBSInstaller v1.0.0-beta6
- Retries if downloading the list of versions from the repositories fails - External tools list on a local file - Source code documented
1 parent 63815a9 commit c13e83e

9 files changed

Lines changed: 482 additions & 262 deletions

File tree

ZXBSInstaller.Log/ServiceLayer.cs

Lines changed: 203 additions & 256 deletions
Large diffs are not rendered by default.

ZXBSInstaller/Controls/MainControl.axaml.cs

Lines changed: 122 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,42 +21,72 @@
2121

2222
namespace ZXBSInstaller.Controls;
2323

24+
/// <summary>
25+
/// Main window
26+
/// </summary>
2427
public partial class MainControl : UserControl
2528
{
29+
/// <summary>
30+
/// List of ToolItemControl created items
31+
/// </summary>
2632
private List<ToolItemControl> toolItemControls = new List<ToolItemControl>();
33+
/// <summary>
34+
/// Yellow color for labels
35+
/// </summary>
2736
private static Brush Yellow = new SolidColorBrush(Colors.Yellow);
2837

38+
39+
/// <summary>
40+
/// Main constructor
41+
/// </summary>
2942
public MainControl()
3043
{
3144
InitializeComponent();
3245

46+
// Set events
3347
this.Loaded += MainControl_Loaded;
3448
txtBasePath.TextChanged += TxtBasePath_TextChanged;
3549
chkOnlyStableVersions.IsCheckedChanged += ChkOnlyStableVersions_IsCheckedChanged;
3650
chkSetZXBSOptions.IsCheckedChanged += ChkSetZXBSOptions_IsCheckedChanged;
3751
}
3852

53+
54+
/// <summary>
55+
/// Initialize in a new Thread when loaded
56+
/// </summary>
57+
/// <param name="sender"></param>
58+
/// <param name="e"></param>
3959
private void MainControl_Loaded(object? sender, RoutedEventArgs e)
4060
{
4161
new Thread(Initialize).Start();
4262
}
4363

4464

65+
/// <summary>
66+
/// Initialize
67+
/// </summary>
4568
private void Initialize()
4669
{
70+
// Initialize ServiceLayer
4771
ServiceLayer.Initialize(ShowStatusPanel, UpdateStatus, HideStatusPanel, GetExternalTools, ShowMessage, ExitApp);
4872

73+
// Set config fields in UIThread
4974
Dispatcher.UIThread.Post(() =>
5075
{
5176
txtBasePath.Text = ServiceLayer.GeneralConfig.BasePath;
5277
chkOnlyStableVersions.IsChecked = ServiceLayer.GeneralConfig.OnlyStableVersions;
5378
chkSetZXBSOptions.IsChecked = ServiceLayer.GeneralConfig.SetZXBSConfig;
5479
});
5580

81+
// Get external tools list
5682
GetExternalTools();
5783
}
5884

5985

86+
/// <summary>
87+
/// Show a message into a dialog box
88+
/// </summary>
89+
/// <param name="message">Message to display</param>
6090
private void ShowMessage(string message)
6191
{
6292
Dispatcher.UIThread.Post(() =>
@@ -76,23 +106,28 @@ private void ShowMessage(string message)
76106
}
77107

78108

109+
/// <summary>
110+
/// Get list of external tools and local versions
111+
/// </summary>
79112
private void GetExternalTools()
80113
{
114+
// Set UI...
81115
Dispatcher.UIThread.Post(() =>
82116
{
83117
mainVersions.IsVisible = false;
84118
mainTools.IsVisible = true;
85-
86119
ShowStatusPanel("Working...");
87120
});
88121

122+
// Get tools
89123
var tools = ServiceLayer.GetExternalTools();
90124

91125
Dispatcher.UIThread.Post(() =>
92126
{
93127
HideStatusPanel();
94128
if (tools == null)
95129
{
130+
// Error!
96131
var box = MessageBoxManager.GetMessageBoxStandard(new MessageBoxStandardParams
97132
{
98133
ButtonDefinitions = ButtonEnum.Ok,
@@ -107,12 +142,16 @@ private void GetExternalTools()
107142
}
108143
else
109144
{
145+
// Show tools
110146
ShowData();
111147
}
112148
});
113149
}
114150

115151

152+
/// <summary>
153+
/// Show tools info
154+
/// </summary>
116155
private void ShowData()
117156
{
118157
toolItemControls.Clear();
@@ -121,14 +160,21 @@ private void ShowData()
121160
pnlTools.Children.Clear();
122161
foreach (var tool in tools)
123162
{
163+
// Create on ToolItemControl foreach tool
124164
var control = new ToolItemControl(tool, Command_Received);
125165
toolItemControls.Add(control);
126166
pnlTools.Children.Add(control);
127167
}
168+
// Update summary area
128169
UpdateSummary();
129170
}
130171

131172

173+
/// <summary>
174+
/// Command received from sub-controls
175+
/// </summary>
176+
/// <param name="id">Tool id</param>
177+
/// <param name="command">Command</param>
132178
private void Command_Received(string id, string command)
133179
{
134180
switch (command)
@@ -146,6 +192,9 @@ private void Command_Received(string id, string command)
146192
}
147193

148194

195+
/// <summary>
196+
/// Show Summary panel
197+
/// </summary>
149198
private void UpdateSummary()
150199
{
151200
Dispatcher.UIThread.Post(() =>
@@ -157,6 +206,7 @@ private void UpdateSummary()
157206
{
158207
if (tool.IsSelected)
159208
{
209+
// Data for selected tools
160210
var tb = new TextBlock();
161211
tb.TextWrapping = Avalonia.Media.TextWrapping.Wrap;
162212
if (tool.ExternalTool.InstalledVersion == null)
@@ -173,6 +223,7 @@ private void UpdateSummary()
173223
}
174224
if (allUpToDate)
175225
{
226+
// Nothing to update
176227
var tb = new TextBlock();
177228
tb.TextWrapping = Avalonia.Media.TextWrapping.Wrap;
178229
tb.Text = "All tools are up to date.";
@@ -188,7 +239,7 @@ private void UpdateSummary()
188239
pnlSummary.Children.Add(separator);
189240
}
190241

191-
// Show tools tree
242+
// Show base path
192243
{
193244
pnlSummary.Children.Add(new TextBlock()
194245
{
@@ -202,6 +253,7 @@ private void UpdateSummary()
202253
TextWrapping = TextWrapping.Wrap
203254
});
204255
}
256+
// Show tools installation paths
205257
foreach (var tool in toolItemControls)
206258
{
207259
var tb = new TextBlock();
@@ -227,6 +279,10 @@ private void UpdateSummary()
227279
}
228280

229281

282+
/// <summary>
283+
/// Show status panel
284+
/// </summary>
285+
/// <param name="message">Message to display</param>
230286
private void ShowStatusPanel(string message)
231287
{
232288
Dispatcher.UIThread.Post(() =>
@@ -244,6 +300,9 @@ private void ShowStatusPanel(string message)
244300
}
245301

246302

303+
/// <summary>
304+
/// Hide status panel
305+
/// </summary>
247306
private void HideStatusPanel()
248307
{
249308
Dispatcher.UIThread.Post(() =>
@@ -278,6 +337,12 @@ private void UpdateStatus(string message, int progress)
278337
});
279338
}
280339

340+
341+
/// <summary>
342+
/// Button select path
343+
/// </summary>
344+
/// <param name="sender"></param>
345+
/// <param name="e"></param>
281346
private void btnSelectPath_Click(object? sender, RoutedEventArgs e)
282347
{
283348
var dlg = new OpenFolderDialog()
@@ -299,42 +364,69 @@ private void btnSelectPath_Click(object? sender, RoutedEventArgs e)
299364
}
300365

301366

367+
368+
/// <summary>
369+
/// Button install components
370+
/// </summary>
371+
/// <param name="sender"></param>
372+
/// <param name="e"></param>
302373
private void btnInstall_Click(object? sender, RoutedEventArgs e)
303374
{
304375
new Thread(ServiceLayer.DownloadAndInstallTools).Start();
305376
}
306377

307378

379+
/// <summary>
380+
/// chkSetZXBSOptions checked changed
381+
/// </summary>
382+
/// <param name="sender"></param>
383+
/// <param name="e"></param>
308384
private void ChkSetZXBSOptions_IsCheckedChanged(object? sender, RoutedEventArgs e)
309385
{
310386
ServiceLayer.GeneralConfig.SetZXBSConfig = chkSetZXBSOptions.IsChecked == true;
311387
ServiceLayer.SaveConfig(ServiceLayer.GeneralConfig);
312388
}
313389

314390

391+
/// <summary>
392+
/// chkOnlyStableVersions checked changed
393+
/// </summary>
394+
/// <param name="sender"></param>
395+
/// <param name="e"></param>
315396
private void ChkOnlyStableVersions_IsCheckedChanged(object? sender, RoutedEventArgs e)
316397
{
317398
ServiceLayer.GeneralConfig.OnlyStableVersions = chkOnlyStableVersions.IsChecked == true;
318399
ServiceLayer.SaveConfig(ServiceLayer.GeneralConfig);
319400
}
320401

321402

403+
/// <summary>
404+
/// Base path changed
405+
/// </summary>
406+
/// <param name="sender"></param>
407+
/// <param name="e"></param>
322408
private void TxtBasePath_TextChanged(object? sender, TextChangedEventArgs e)
323409
{
324410
ServiceLayer.GeneralConfig.BasePath = txtBasePath.Text;
325411
ServiceLayer.SaveConfig(ServiceLayer.GeneralConfig);
326412
}
327413

328414

415+
/// <summary>
416+
/// Show version info for a tool
417+
/// </summary>
418+
/// <param name="id">Tool id</param>
329419
private void ShowVersions(string id)
330420
{
331421
Dispatcher.UIThread.Post(() =>
332422
{
333423
mainTools.IsVisible = false;
334424
mainVersions.IsVisible = true;
335425
pnlVersions.Children.Clear();
426+
336427
var tool = ServiceLayer.ExternalTools.FirstOrDefault(d => d.Id == id);
337428

429+
// Close button
338430
{
339431
var btn = new Button()
340432
{
@@ -346,10 +438,12 @@ private void ShowVersions(string id)
346438
pnlVersions.Children.Add(btn);
347439
}
348440

441+
// Header
349442
var versionControlHeader = new VersionControl(null, null, Command_Received);
350443
pnlVersions.Children.Add(versionControlHeader);
351444
foreach (var version in tool.Versions)
352445
{
446+
// Version line
353447
if (ServiceLayer.GeneralConfig.OnlyStableVersions && version.BetaNumber > 0)
354448
{
355449
continue;
@@ -358,6 +452,7 @@ private void ShowVersions(string id)
358452
pnlVersions.Children.Add(versionControl);
359453
}
360454

455+
// Anothe Close button at the bottom of the list
361456
{
362457
var btn = new Button()
363458
{
@@ -373,6 +468,11 @@ private void ShowVersions(string id)
373468
}
374469

375470

471+
/// <summary>
472+
/// Versions button
473+
/// </summary>
474+
/// <param name="sender"></param>
475+
/// <param name="e"></param>
376476
private void Versions_Close(object? sender, RoutedEventArgs e)
377477
{
378478
Dispatcher.UIThread.Post(() =>
@@ -382,13 +482,22 @@ private void Versions_Close(object? sender, RoutedEventArgs e)
382482
});
383483
}
384484

485+
486+
/// <summary>
487+
/// Run ZXBS button
488+
/// </summary>
489+
/// <param name="sender"></param>
490+
/// <param name="e"></param>
385491
private void btnPlayZXBS_Click(object? sender, RoutedEventArgs e)
386492
{
387493
ServiceLayer.RunZXBasicStudio();
388494
ExitApp();
389495
}
390496

391497

498+
/// <summary>
499+
/// Exit application
500+
/// </summary>
392501
private void ExitApp()
393502
{
394503
Dispatcher.UIThread.Post(() =>
@@ -402,11 +511,22 @@ private void ExitApp()
402511
}
403512

404513

514+
/// <summary>
515+
/// Refresh button
516+
/// </summary>
517+
/// <param name="sender"></param>
518+
/// <param name="e"></param>
405519
private void btnRefresh_Click(object? sender, RoutedEventArgs e)
406520
{
407521
new Thread(GetExternalTools).Start();
408522
}
409523

524+
525+
/// <summary>
526+
/// Cacel button
527+
/// </summary>
528+
/// <param name="sender"></param>
529+
/// <param name="e"></param>
410530
private void btnCancel_Click(object? sender, RoutedEventArgs e)
411531
{
412532
ServiceLayer.Cancel = true;

0 commit comments

Comments
 (0)