From d93e222ba7741888b97902e5c2da24e329836022 Mon Sep 17 00:00:00 2001 From: Creeper Lv Date: Sun, 15 Feb 2026 00:58:31 +1100 Subject: [PATCH] Finished SaveAs function. Updated dependencies. About page now uses version from assembly. --- Directory.Packages.props | 61 +++++++++++----------- Progrart/Pages/AboutPage.axaml | 2 +- Progrart/Pages/AboutPage.axaml.cs | 43 +++++++-------- Progrart/Pages/EditorProvider.cs | 1 + Progrart/Pages/ProgrartEditorPage.axaml.cs | 35 +++++++++++++ Progrart/Pages/ProjectEditor.axaml.cs | 47 ++++++++++++++++- Progrart/Progrart.csproj | 6 +-- Progrart/Views/MainView.axaml | 6 +-- Progrart/Views/MainView.axaml.cs | 15 ++++++ 9 files changed, 157 insertions(+), 59 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 44b22ad..bde6b87 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,33 +1,34 @@ - - - true - - - - - - - - - - - - - - - - - - - - - - - - - + + + true + 1.0.0.0 + + + + + + + + + + + + + + + + + + + + + + + + + - - + + \ No newline at end of file diff --git a/Progrart/Pages/AboutPage.axaml b/Progrart/Pages/AboutPage.axaml index b432ac9..40ecb96 100644 --- a/Progrart/Pages/AboutPage.axaml +++ b/Progrart/Pages/AboutPage.axaml @@ -28,7 +28,7 @@ Progrart - Version: 0.0.0.0-preview + Version: {0} Third-Party Libs Avalonia - github.com/avaloniaui SkiaSharp - github.com/mono/SkiaSharp diff --git a/Progrart/Pages/AboutPage.axaml.cs b/Progrart/Pages/AboutPage.axaml.cs index 4432eb3..2118e39 100644 --- a/Progrart/Pages/AboutPage.axaml.cs +++ b/Progrart/Pages/AboutPage.axaml.cs @@ -5,36 +5,37 @@ using Avalonia.Media; using Avalonia.Media.Imaging; using Progrart.Controls.TabSystem; using SkiaSharp; +using System.Reflection; namespace Progrart.Pages; -public partial class AboutPage : UserControl,ITabPage +public partial class AboutPage : UserControl, ITabPage { - public AboutPage() - { - InitializeComponent(); - + public AboutPage() + { + InitializeComponent(); + VerTextBlock.Text = string.Format(VerTextBlock.Text ?? "Version: {0}", Assembly.GetExecutingAssembly().GetName().Version?.ToString() ?? "0.0.0.0"); } public void BindButton(TabButton button) - { - button.Title="About"; - } + { + button.Title = "About"; + } - public void Execute() - { - } + public void Execute() + { + } - public bool IsModified() - { - return false; - } + public bool IsModified() + { + return false; + } - public void Save() - { - } + public void Save() + { + } - public void SetHost(TabHost host) - { - } + public void SetHost(TabHost host) + { + } } \ No newline at end of file diff --git a/Progrart/Pages/EditorProvider.cs b/Progrart/Pages/EditorProvider.cs index b1aae54..d1c8c88 100644 --- a/Progrart/Pages/EditorProvider.cs +++ b/Progrart/Pages/EditorProvider.cs @@ -81,6 +81,7 @@ namespace Progrart.Pages { void LoadDocument(IStorageFile file); Task Save(); + async Task SaveAs() { return;} bool IsSameFile(IStorageFile file); void Execute(ExecuteArguments? args = null); } diff --git a/Progrart/Pages/ProgrartEditorPage.axaml.cs b/Progrart/Pages/ProgrartEditorPage.axaml.cs index 1cb5f31..3a31758 100644 --- a/Progrart/Pages/ProgrartEditorPage.axaml.cs +++ b/Progrart/Pages/ProgrartEditorPage.axaml.cs @@ -153,8 +153,43 @@ public partial class ProgrartEditorPage : UserControl, ITabPage, IEditorPage await sw.FlushAsync(); }); } + else await SaveAs(); } + public async Task SaveAs() + { + var provider = TopLevel.GetTopLevel(this)?.StorageProvider; + if (provider is null) + { + return; + } + var file = await provider.SaveFilePickerAsync(new FilePickerSaveOptions + { + SuggestedStartLocation = App.CurrentOpenFolder, + FileTypeChoices = new[] + { + new FilePickerFileType("Progrart File") + { + Patterns = new[] { "*.progrart" }, + MimeTypes = new[] { "text/plain" } + } + }, + Title = "Save Progrart File" + }); + if (file is not null) + { + + string content = ""; + await Dispatcher.UIThread.InvokeAsync(() => { content = CodeEditor.Text; }); + this.file = file; + using var stream = await file.OpenWriteAsync(); + stream.SetLength(0); + using var sw = new StreamWriter(stream); + await sw.WriteAsync(content); + await sw.FlushAsync(); + } + return; + } public void SetHost(TabHost host) { diff --git a/Progrart/Pages/ProjectEditor.axaml.cs b/Progrart/Pages/ProjectEditor.axaml.cs index 378eb11..82c227f 100644 --- a/Progrart/Pages/ProjectEditor.axaml.cs +++ b/Progrart/Pages/ProjectEditor.axaml.cs @@ -3,6 +3,7 @@ using Avalonia.Controls; using Avalonia.Markup.Xaml; using Avalonia.Platform.Storage; using Avalonia.Threading; +using Jint.Runtime; using Newtonsoft.Json; using Progrart.Controls; using Progrart.Controls.TabSystem; @@ -85,7 +86,51 @@ public partial class ProjectEditor : UserControl, ITabPage, IEditorPage sw.Flush(); sw.Close(); } - + public async Task SaveAs() + { + var provider = TopLevel.GetTopLevel(this)?.StorageProvider; + if (provider is null) + { + return; + } + var file = await provider.SaveFilePickerAsync(new FilePickerSaveOptions + { + SuggestedStartLocation = App.CurrentOpenFolder, + FileTypeChoices = + [ + new FilePickerFileType("Progrart Project File") + { + Patterns = ["*.progrart-project"], + MimeTypes = ["application/json"] + } + ], + Title = "Save Progrart Project" + }); + if (file is not null) + { + Project project = new Project(); + await Dispatcher.UIThread.InvokeAsync(() => + { + project.OutputDir = this.OutputDirBox.Text ?? ""; + project.Arguments = ProjectWideArguments.ObtainArguments(); + foreach (var item in ConfigurationHolder.Children) + { + if (item is ConfigEditor editor) + { + project.Configurations.Add(editor.ObtainConfiguration()); + } + } + }); + this.file = file; + using var stream = await file.OpenWriteAsync(); + stream.SetLength(0); + using var sw = new StreamWriter(stream); + sw.WriteLine(JsonConvert.SerializeObject(project, Formatting.Indented)); + sw.Flush(); + sw.Close(); + } + return; + } public void SetHost(TabHost host) { } diff --git a/Progrart/Progrart.csproj b/Progrart/Progrart.csproj index 3c1a6bc..9d9e9cb 100644 --- a/Progrart/Progrart.csproj +++ b/Progrart/Progrart.csproj @@ -40,8 +40,8 @@ - - TargetEditor.axaml - + + TargetEditor.axaml + diff --git a/Progrart/Views/MainView.axaml b/Progrart/Views/MainView.axaml index e58cc54..b66ac08 100644 --- a/Progrart/Views/MainView.axaml +++ b/Progrart/Views/MainView.axaml @@ -47,7 +47,7 @@ - + @@ -55,7 +55,7 @@ - + @@ -122,7 +122,7 @@ -