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.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/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.Log/InstallerResources/zxbasic.png b/ZXBSInstaller/Assets/zxbasic.png similarity index 100% rename from ZXBSInstaller.Log/InstallerResources/zxbasic.png rename to ZXBSInstaller/Assets/zxbasic.png diff --git a/ZXBSInstaller.Log/InstallerResources/zxbs.png b/ZXBSInstaller/Assets/zxbs.png similarity index 100% rename from ZXBSInstaller.Log/InstallerResources/zxbs.png rename to ZXBSInstaller/Assets/zxbs.png diff --git a/ZXBSInstaller.Log/InstallerResources/zxbsinstaller.png b/ZXBSInstaller/Assets/zxbsinstaller.png similarity index 100% rename from ZXBSInstaller.Log/InstallerResources/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..4c3b009 100644 --- a/ZXBSInstaller/Controls/MainControl.axaml.cs +++ b/ZXBSInstaller/Controls/MainControl.axaml.cs @@ -1,7 +1,9 @@ using Avalonia; using Avalonia.Controls; +using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; +using Avalonia.Media; using Avalonia.Threading; using Avalonia.VisualTree; using MsBox.Avalonia; @@ -22,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() { @@ -103,7 +105,7 @@ private void GetExternalTools() WindowStartupLocation = WindowStartupLocation.CenterOwner }); box.ShowAsPopupAsync(this); - + } else { @@ -152,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) @@ -177,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) + }); + } + } }); } @@ -289,7 +334,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 +369,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/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/UITools.cs b/ZXBSInstaller/UITools.cs index 3b629c0..becc9ae 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,10 @@ 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/Assets/{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..1362c0b 100644 --- a/ZXBSInstaller/ZXBSInstaller.csproj +++ b/ZXBSInstaller/ZXBSInstaller.csproj @@ -6,25 +6,43 @@ app.manifest true zxbs.ico - 0.0.1.6 + 0.0.1.7 + + + + + + + + + + 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