Editor now loads the first project in open folder.
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
using Progrart.Core.JSExecution;
|
||||
using Progrart.Core.Storage;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Progrart.Core.ProjectSystem
|
||||
{
|
||||
|
||||
@@ -8,6 +8,8 @@ using Progrart.Views;
|
||||
using Progrart.Icons;
|
||||
using Progrart.Pages;
|
||||
using Avalonia.Platform.Storage;
|
||||
using System;
|
||||
using Progrart.Core.ProjectSystem;
|
||||
|
||||
namespace Progrart;
|
||||
|
||||
@@ -15,6 +17,12 @@ public partial class App : Application
|
||||
{
|
||||
public static bool isDesktop = false;
|
||||
public static IStorageFolder? CurrentOpenFolder = null;
|
||||
public static Project? LoadedProject = null;
|
||||
internal static Action? ProjectLoadHandler = null;
|
||||
public static void ProjectLoad()
|
||||
{
|
||||
ProjectLoadHandler?.Invoke();
|
||||
}
|
||||
public override void Initialize()
|
||||
{
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
@@ -27,7 +35,7 @@ public partial class App : Application
|
||||
EditorProvider.Register("image", "Default Image Viewer", typeof(ImageViewPage));
|
||||
EditorProvider.Register("progrart", "Default Progrart Editor", typeof(ProgrartEditorPage));
|
||||
EditorProvider.Register("project", "Progrart Project Editor", typeof(ProjectEditor));
|
||||
EditorProvider.Register("console", "Console", typeof(Console));
|
||||
EditorProvider.Register("console", "Console", typeof(Pages.Console));
|
||||
EditorProvider.BindFileType("cs", "text");
|
||||
EditorProvider.BindFileType("c", "text");
|
||||
EditorProvider.BindFileType("cpp", "text");
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -8,11 +8,13 @@ using Progrart.Controls;
|
||||
using Progrart.Core;
|
||||
using Progrart.Core.JSExecution;
|
||||
using Progrart.Core.ProjectSystem;
|
||||
using Progrart.Core.Storage;
|
||||
using Progrart.Pages;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Progrart.Views;
|
||||
@@ -106,6 +108,18 @@ public partial class MainView : UserControl
|
||||
var folder = folders[0];
|
||||
App.CurrentOpenFolder = folder;
|
||||
FileContainer.Children.Add(new FileItem(folder));
|
||||
await foreach (var item in folder.GetItemsAsync())
|
||||
{
|
||||
if (item.Name.ToLower().EndsWith(".progrart-project", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
using var stream = await (item as IStorageFile)!.OpenReadAsync();
|
||||
using var reader = new StreamReader(stream);
|
||||
var txt = await reader.ReadToEndAsync();
|
||||
App.LoadedProject = JsonConvert.DeserializeObject<Project>(txt);
|
||||
App.ProjectLoad();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
FileExplorerCloseButton.Click += (_, _) =>
|
||||
@@ -117,6 +131,18 @@ public partial class MainView : UserControl
|
||||
{
|
||||
Execute();
|
||||
};
|
||||
|
||||
ConfigBox.Items.Clear();
|
||||
App.ProjectLoadHandler = () =>
|
||||
{
|
||||
ConfigBox.Items.Clear();
|
||||
if (App.LoadedProject is null) return;
|
||||
foreach (var item in App.LoadedProject.Configurations)
|
||||
{
|
||||
ConfigBox.Items.Add(item.Name);
|
||||
}
|
||||
ConfigBox.SelectedIndex = 0;
|
||||
};
|
||||
}
|
||||
|
||||
private void Execute()
|
||||
@@ -208,4 +234,37 @@ public partial class MainView : UserControl
|
||||
await stream_writer.WriteAsync(txt);
|
||||
await stream.FlushAsync();
|
||||
}
|
||||
|
||||
private void BuildButton_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||
{
|
||||
if (App.LoadedProject is not null)
|
||||
{
|
||||
Builder builder = new Builder(App.LoadedProject, new AvaloniaStorageProvider(App.CurrentOpenFolder));
|
||||
var config = App.LoadedProject.Configurations[ConfigBox.SelectedIndex];
|
||||
var name = config.Name;
|
||||
if (config is null) return;
|
||||
if (name is null) return;
|
||||
int sum = 0;
|
||||
int max = config.Items.Count;
|
||||
ProgressGrid.IsVisible = true;
|
||||
MainProgress.Value = sum;
|
||||
MainProgress.Maximum= max;
|
||||
builder.OnProgressUpdate = (a, b) =>
|
||||
{
|
||||
Interlocked.Increment(ref sum);
|
||||
Dispatcher.UIThread.Invoke(() =>
|
||||
{
|
||||
MainProgress.Value = sum;
|
||||
});
|
||||
};
|
||||
builder.OnCompleted= () =>
|
||||
{
|
||||
Dispatcher.UIThread.Invoke(() =>
|
||||
{
|
||||
ProgressGrid.IsVisible = false;
|
||||
});
|
||||
};
|
||||
Task.Run(async () => await builder.Build(name, -1));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user