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 @@
-
+