From be08476ac10f80689a15653c549cac5ab6e1caf6 Mon Sep 17 00:00:00 2001 From: Juan Segura Date: Wed, 18 Feb 2026 15:36:55 +0100 Subject: [PATCH 1/3] Changed the location and loading system of tool icons to avoid bugs on Mac. --- ZXBSInstaller.Log/ZXBSInstaller.Log.csproj | 16 ---------------- ZXBSInstaller/Controls/ToolItemControl.axaml.cs | 2 +- .../Resources}/zxbasic.png | Bin .../Resources}/zxbs.png | Bin .../Resources}/zxbsinstaller.png | Bin ZXBSInstaller/UITools.cs | 9 +++++++-- ZXBSInstaller/ZXBSInstaller.csproj | 9 +++++++++ 7 files changed, 17 insertions(+), 19 deletions(-) rename {ZXBSInstaller.Log/InstallerResources => ZXBSInstaller/Resources}/zxbasic.png (100%) rename {ZXBSInstaller.Log/InstallerResources => ZXBSInstaller/Resources}/zxbs.png (100%) rename {ZXBSInstaller.Log/InstallerResources => ZXBSInstaller/Resources}/zxbsinstaller.png (100%) diff --git a/ZXBSInstaller.Log/ZXBSInstaller.Log.csproj b/ZXBSInstaller.Log/ZXBSInstaller.Log.csproj index d01edc3..fa71b7a 100644 --- a/ZXBSInstaller.Log/ZXBSInstaller.Log.csproj +++ b/ZXBSInstaller.Log/ZXBSInstaller.Log.csproj @@ -6,20 +6,4 @@ enable - - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - diff --git a/ZXBSInstaller/Controls/ToolItemControl.axaml.cs b/ZXBSInstaller/Controls/ToolItemControl.axaml.cs index ea281da..392cbcb 100644 --- a/ZXBSInstaller/Controls/ToolItemControl.axaml.cs +++ b/ZXBSInstaller/Controls/ToolItemControl.axaml.cs @@ -25,7 +25,7 @@ public ToolItemControl(ExternalTool tool, Action callBackCommand ExternalTool = tool; Command = callBackCommand; - UITools.ShowImage($"InstallerResources/{ExternalTool.Id}.png", imgIcon); + UITools.ShowImage($"{ExternalTool.Id}.png", imgIcon); txtName.Text = tool.Name; txtDescription.Text = tool.Description; txtPath.Text = "Path: " + tool.LocalPath; diff --git a/ZXBSInstaller.Log/InstallerResources/zxbasic.png b/ZXBSInstaller/Resources/zxbasic.png similarity index 100% rename from ZXBSInstaller.Log/InstallerResources/zxbasic.png rename to ZXBSInstaller/Resources/zxbasic.png diff --git a/ZXBSInstaller.Log/InstallerResources/zxbs.png b/ZXBSInstaller/Resources/zxbs.png similarity index 100% rename from ZXBSInstaller.Log/InstallerResources/zxbs.png rename to ZXBSInstaller/Resources/zxbs.png diff --git a/ZXBSInstaller.Log/InstallerResources/zxbsinstaller.png b/ZXBSInstaller/Resources/zxbsinstaller.png similarity index 100% rename from ZXBSInstaller.Log/InstallerResources/zxbsinstaller.png rename to ZXBSInstaller/Resources/zxbsinstaller.png diff --git a/ZXBSInstaller/UITools.cs b/ZXBSInstaller/UITools.cs index 3b629c0..6ced76c 100644 --- a/ZXBSInstaller/UITools.cs +++ b/ZXBSInstaller/UITools.cs @@ -1,5 +1,6 @@ using Avalonia.Controls; using Avalonia.Media.Imaging; +using Avalonia.Platform; using System; using System.Collections.Generic; using System.IO; @@ -15,8 +16,12 @@ public static void ShowImage(string fileName, Image imgControl) { try { - using var stream = File.OpenRead(fileName); - imgControl.Source = new Bitmap(stream); + //using var stream = File.OpenRead(fileName); + //imgControl.Source = new Bitmap(stream); + var uri= new Uri($"avares://ZXBSInstaller/Resources/{fileName}"); + var asset=AssetLoader.Open(uri); + var bitmap=new Bitmap(asset); + imgControl.Source = bitmap; } catch (Exception ex) { diff --git a/ZXBSInstaller/ZXBSInstaller.csproj b/ZXBSInstaller/ZXBSInstaller.csproj index df1fe4c..6cd0cee 100644 --- a/ZXBSInstaller/ZXBSInstaller.csproj +++ b/ZXBSInstaller/ZXBSInstaller.csproj @@ -12,6 +12,15 @@ + + PreserveNewest + + + Never + + + PreserveNewest + From 950bd306950fafc3c7857d862cec6fb9ff4c19d6 Mon Sep 17 00:00:00 2001 From: Juan Segura Date: Wed, 18 Feb 2026 16:54:05 +0100 Subject: [PATCH 2/3] =?UTF-8?q?-=20Botones=20para=20iniciar=20ZXBasicStudi?= =?UTF-8?q?o=20y=20refrescar=20-=20A=C3=B1adidos=20iconos=20en=20los=20bot?= =?UTF-8?q?ones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MsBox.Avalonia/MsBox.Avalonia.csproj | 4 +-- README.md | 2 ++ ZXBSInstaller.Log/ServiceLayer.cs | 30 ++++++++++++++++++ ZXBSInstaller/Assets/install.svg | 7 ++++ ZXBSInstaller/Assets/play.svg | 7 ++++ ZXBSInstaller/Assets/refresh.svg | 7 ++++ .../{Resources => Assets}/zxbasic.png | Bin ZXBSInstaller/{Resources => Assets}/zxbs.png | Bin .../{Resources => Assets}/zxbsinstaller.png | Bin ZXBSInstaller/Controls/MainControl.axaml | 27 ++++++++++++++-- ZXBSInstaller/Controls/MainControl.axaml.cs | 22 +++++++++++-- ZXBSInstaller/UITools.cs | 4 +-- ZXBSInstaller/ZXBSInstaller.csproj | 25 ++++++++++----- ZXBStudio/ZXBasicStudio.csproj | 12 +++---- ZXBasicStudioTest/ZXBasicStudioTest.csproj | 2 +- 15 files changed, 125 insertions(+), 24 deletions(-) create mode 100644 ZXBSInstaller/Assets/install.svg create mode 100644 ZXBSInstaller/Assets/play.svg create mode 100644 ZXBSInstaller/Assets/refresh.svg rename ZXBSInstaller/{Resources => Assets}/zxbasic.png (100%) rename ZXBSInstaller/{Resources => Assets}/zxbs.png (100%) rename ZXBSInstaller/{Resources => Assets}/zxbsinstaller.png (100%) diff --git a/MsBox.Avalonia/MsBox.Avalonia.csproj b/MsBox.Avalonia/MsBox.Avalonia.csproj index 3af730f..b6d9776 100644 --- a/MsBox.Avalonia/MsBox.Avalonia.csproj +++ b/MsBox.Avalonia/MsBox.Avalonia.csproj @@ -26,8 +26,8 @@ - - + + diff --git a/README.md b/README.md index 8c611fd..dea0ca1 100644 --- a/README.md +++ b/README.md @@ -33,3 +33,5 @@ Have fun! - Wishforge.games in CC Attribution License - Yamatsum in MIT License - Zest in MIT License + - Neuicons in MIT License via + - Dazzle Ui in CC Attribution License diff --git a/ZXBSInstaller.Log/ServiceLayer.cs b/ZXBSInstaller.Log/ServiceLayer.cs index a01c93c..7ec4fdc 100644 --- a/ZXBSInstaller.Log/ServiceLayer.cs +++ b/ZXBSInstaller.Log/ServiceLayer.cs @@ -1152,5 +1152,35 @@ private static void SetZXBSConfig() #endregion + + public static bool RunZXBasicStudio() + { + try + { + var fileName = Path.Combine(GeneralConfig.BasePath, "zxbs", "ZXBasicStudio.exe"); + if (!File.Exists(fileName)) + { + fileName = Path.Combine(GeneralConfig.BasePath, "zxbs", "ZXBasicStudio"); + } + if (!File.Exists(fileName)) + { + ServiceLayer.ShowMessage("ZX Basic Studio executable not found. Please check the installation."); + return false; + } + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = fileName, + }; + using Process process = new Process { StartInfo = psi }; + process.Start(); + return true; + } + catch (Exception ex) + { + ServiceLayer.ShowMessage("Error launching ZX Basic Studio. Please check the installation."); + return false; + } + } + } } \ No newline at end of file diff --git a/ZXBSInstaller/Assets/install.svg b/ZXBSInstaller/Assets/install.svg new file mode 100644 index 0000000..42d3898 --- /dev/null +++ b/ZXBSInstaller/Assets/install.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/ZXBSInstaller/Assets/play.svg b/ZXBSInstaller/Assets/play.svg new file mode 100644 index 0000000..9bd1648 --- /dev/null +++ b/ZXBSInstaller/Assets/play.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/ZXBSInstaller/Assets/refresh.svg b/ZXBSInstaller/Assets/refresh.svg new file mode 100644 index 0000000..d1e03e8 --- /dev/null +++ b/ZXBSInstaller/Assets/refresh.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/ZXBSInstaller/Resources/zxbasic.png b/ZXBSInstaller/Assets/zxbasic.png similarity index 100% rename from ZXBSInstaller/Resources/zxbasic.png rename to ZXBSInstaller/Assets/zxbasic.png diff --git a/ZXBSInstaller/Resources/zxbs.png b/ZXBSInstaller/Assets/zxbs.png similarity index 100% rename from ZXBSInstaller/Resources/zxbs.png rename to ZXBSInstaller/Assets/zxbs.png diff --git a/ZXBSInstaller/Resources/zxbsinstaller.png b/ZXBSInstaller/Assets/zxbsinstaller.png similarity index 100% rename from ZXBSInstaller/Resources/zxbsinstaller.png rename to ZXBSInstaller/Assets/zxbsinstaller.png diff --git a/ZXBSInstaller/Controls/MainControl.axaml b/ZXBSInstaller/Controls/MainControl.axaml index 7d41231..c31b41e 100644 --- a/ZXBSInstaller/Controls/MainControl.axaml +++ b/ZXBSInstaller/Controls/MainControl.axaml @@ -2,6 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:svg="using:Avalonia.Svg.Skia" mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="600" x:Class="ZXBSInstaller.Controls.MainControl"> @@ -36,10 +37,32 @@ - - + + + + + + + + + diff --git a/ZXBSInstaller/Controls/MainControl.axaml.cs b/ZXBSInstaller/Controls/MainControl.axaml.cs index 6628d8e..428e571 100644 --- a/ZXBSInstaller/Controls/MainControl.axaml.cs +++ b/ZXBSInstaller/Controls/MainControl.axaml.cs @@ -1,5 +1,6 @@ using Avalonia; using Avalonia.Controls; +using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; using Avalonia.Threading; @@ -103,7 +104,7 @@ private void GetExternalTools() WindowStartupLocation = WindowStartupLocation.CenterOwner }); box.ShowAsPopupAsync(this); - + } else { @@ -289,7 +290,7 @@ private void ShowVersions(string id) pnlVersions.Children.Add(btn); } - var versionControlHeader = new VersionControl(null, null,Command_Received); + var versionControlHeader = new VersionControl(null, null, Command_Received); pnlVersions.Children.Add(versionControlHeader); foreach (var version in tool.Versions) { @@ -324,4 +325,21 @@ private void Versions_Close(object? sender, RoutedEventArgs e) mainVersions.IsVisible = false; }); } + + private void btnPlayZXBS_Click(object? sender, RoutedEventArgs e) + { + if (ServiceLayer.RunZXBasicStudio()) + { + if (App.Current?.ApplicationLifetime + is IClassicDesktopStyleApplicationLifetime desktop) + { + desktop.Shutdown(); + } + } + } + + private void btnRefresh_Click(object? sender, RoutedEventArgs e) + { + new Thread(GetExternalTools).Start(); + } } \ No newline at end of file diff --git a/ZXBSInstaller/UITools.cs b/ZXBSInstaller/UITools.cs index 6ced76c..becc9ae 100644 --- a/ZXBSInstaller/UITools.cs +++ b/ZXBSInstaller/UITools.cs @@ -16,9 +16,7 @@ public static void ShowImage(string fileName, Image imgControl) { try { - //using var stream = File.OpenRead(fileName); - //imgControl.Source = new Bitmap(stream); - var uri= new Uri($"avares://ZXBSInstaller/Resources/{fileName}"); + var uri= new Uri($"avares://ZXBSInstaller/Assets/{fileName}"); var asset=AssetLoader.Open(uri); var bitmap=new Bitmap(asset); imgControl.Source = bitmap; diff --git a/ZXBSInstaller/ZXBSInstaller.csproj b/ZXBSInstaller/ZXBSInstaller.csproj index 6cd0cee..4586cf9 100644 --- a/ZXBSInstaller/ZXBSInstaller.csproj +++ b/ZXBSInstaller/ZXBSInstaller.csproj @@ -9,31 +9,40 @@ 0.0.1.6 + + + + + + + + - + PreserveNewest - + Never - + PreserveNewest - - - - + + + + - + None All + diff --git a/ZXBStudio/ZXBasicStudio.csproj b/ZXBStudio/ZXBasicStudio.csproj index 6311d3a..d3fb0ec 100644 --- a/ZXBStudio/ZXBasicStudio.csproj +++ b/ZXBStudio/ZXBasicStudio.csproj @@ -563,13 +563,13 @@ - - - - + + + + - - + + diff --git a/ZXBasicStudioTest/ZXBasicStudioTest.csproj b/ZXBasicStudioTest/ZXBasicStudioTest.csproj index e81da67..9b37b01 100644 --- a/ZXBasicStudioTest/ZXBasicStudioTest.csproj +++ b/ZXBasicStudioTest/ZXBasicStudioTest.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 12e34e0bcac846c6246a288452df40fd67189661 Mon Sep 17 00:00:00 2001 From: Juan Segura Date: Wed, 18 Feb 2026 17:13:52 +0100 Subject: [PATCH 3/3] Installed tools info in summary area --- ZXBSInstaller/Controls/MainControl.axaml.cs | 46 ++++++++++++++++++++- ZXBSInstaller/ZXBSInstaller.csproj | 2 +- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/ZXBSInstaller/Controls/MainControl.axaml.cs b/ZXBSInstaller/Controls/MainControl.axaml.cs index 428e571..4c3b009 100644 --- a/ZXBSInstaller/Controls/MainControl.axaml.cs +++ b/ZXBSInstaller/Controls/MainControl.axaml.cs @@ -3,6 +3,7 @@ using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; +using Avalonia.Media; using Avalonia.Threading; using Avalonia.VisualTree; using MsBox.Avalonia; @@ -23,7 +24,7 @@ namespace ZXBSInstaller.Controls; public partial class MainControl : UserControl { private List toolItemControls = new List(); - + private static Brush Yellow = new SolidColorBrush(Colors.Yellow); public MainControl() { @@ -153,6 +154,7 @@ private void UpdateSummary() { pnlSummary.Children.Clear(); bool allUpToDate = true; + // Check for recommended updates/installs foreach (var tool in toolItemControls) { if (tool.IsSelected) @@ -178,6 +180,48 @@ private void UpdateSummary() tb.Text = "All tools are up to date."; pnlSummary.Children.Add(tb); } + + // Separator + { + var separator = new Separator() + { + Margin = new Thickness(0, 10, 0, 10) + }; + pnlSummary.Children.Add(separator); + } + + // Show tools tree + { + pnlSummary.Children.Add(new TextBlock() + { + Text = "Base path:", + Foreground = Yellow + }); + pnlSummary.Children.Add(new TextBlock() + { + Text = ServiceLayer.GeneralConfig.BasePath, + Margin = new Thickness(10, 4, 0, 0) + }); + } + foreach (var tool in toolItemControls) + { + var tb = new TextBlock(); + tb.TextWrapping = Avalonia.Media.TextWrapping.Wrap; + if (tool.ExternalTool.InstalledVersion != null) + { + pnlSummary.Children.Add(new TextBlock() + { + Text = tool.ExternalTool.Name + ":", + Margin = new Thickness(0, 8, 0, 0), + Foreground = Yellow + }); + pnlSummary.Children.Add(new TextBlock() + { + Text = System.IO.Path.Combine(ServiceLayer.GeneralConfig.BasePath, tool.ExternalTool.Id), + Margin = new Thickness(10, 4, 0, 0) + }); + } + } }); } diff --git a/ZXBSInstaller/ZXBSInstaller.csproj b/ZXBSInstaller/ZXBSInstaller.csproj index 4586cf9..1362c0b 100644 --- a/ZXBSInstaller/ZXBSInstaller.csproj +++ b/ZXBSInstaller/ZXBSInstaller.csproj @@ -6,7 +6,7 @@ app.manifest true zxbs.ico - 0.0.1.6 + 0.0.1.7