Browse Source

Added loading window

Krzysztof Krysiński 1 year ago
parent
commit
57371d06ad

+ 3 - 0
src/PixiEditor.AvaloniaUI/Initialization/ClassicDesktopEntry.cs

@@ -18,6 +18,7 @@ using PixiEditor.Extensions.Common.Localization;
 using PixiEditor.Extensions.Runtime;
 using PixiEditor.OperatingSystem;
 using PixiEditor.Platform;
+using PixiEditor.Views;
 using PixiEditor.Windows;
 using ViewModelMain = PixiEditor.AvaloniaUI.ViewModels.ViewModelMain;
 
@@ -103,6 +104,8 @@ internal class ClassicDesktopEntry
 
     public ExtensionLoader InitApp()
     {
+        LoadingWindow.ShowInNewThread();
+
         InitPlatform();
 
         ExtensionLoader extensionLoader = new ExtensionLoader(Paths.ExtensionsFullPath);

+ 1 - 0
src/PixiEditor.AvaloniaUI/PixiEditor.AvaloniaUI.csproj

@@ -108,4 +108,5 @@
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
   </ItemGroup>
+  
 </Project>

+ 0 - 2
src/PixiEditor.AvaloniaUI/Views/Dialogs/Debugging/CommandDebugPopup.axaml.cs

@@ -3,12 +3,10 @@ using System.Linq;
 using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Controls.Documents;
-using Avalonia.Markup.Xaml;
 using Avalonia.Media;
 using PixiEditor.AvaloniaUI.Models.Commands;
 using PixiEditor.AvaloniaUI.Models.Commands.Commands;
 using PixiEditor.AvaloniaUI.Models.Commands.Evaluators;
-using PixiEditor.AvaloniaUI.ViewModels;
 
 namespace PixiEditor.AvaloniaUI.Views.Dialogs.Debugging;
 

+ 24 - 0
src/PixiEditor.AvaloniaUI/Views/LoadingWindow.axaml

@@ -0,0 +1,24 @@
+<Window x:Class="PixiEditor.AvaloniaUI.Views.LoadingWindow"
+        xmlns="https://github.com/avaloniaui"
+        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:local="clr-namespace:PixiEditor.Views"
+        xmlns:gif="http://wpfanimatedgif.codeplex.com"
+        xmlns:indicators="clr-namespace:PixiEditor.AvaloniaUI.Views.Indicators"
+        mc:Ignorable="d" ShowInTaskbar="False" SystemDecorations="None"
+        CanResize="False" WindowStartupLocation="CenterScreen"
+        Title="LoadingWindow" Height="180" Width="160"
+        Background="Transparent"
+        x:Name="Window">
+    <Border Background="{StaticResource ThemeBackgroundBrush}"
+            BorderBrush="{StaticResource ThemeBorderMidBrush}" BorderThickness="1.5"
+            CornerRadius="10">
+        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
+           <indicators:LoadingIndicator/>
+            <TextBlock Foreground="White" Text="PixiEditor"
+                       FontFamily="Roboto" FontWeight="900" FontSize="28"
+                       Margin="0,10,0,0"/>
+        </StackPanel>
+    </Border>
+</Window>

+ 40 - 0
src/PixiEditor.AvaloniaUI/Views/LoadingWindow.axaml.cs

@@ -0,0 +1,40 @@
+using System.Threading;
+using Avalonia.Controls;
+using Avalonia.Threading;
+
+namespace PixiEditor.AvaloniaUI.Views;
+
+public partial class LoadingWindow : Window
+{
+    public static LoadingWindow Instance { get; private set; }
+    
+    public LoadingWindow()
+    {
+        InitializeComponent();
+    }
+
+    public static void ShowInNewThread()
+    {
+        var thread = new Thread(ThreadStart) { IsBackground = true };
+
+        thread.SetApartmentState(ApartmentState.STA);
+        thread.Start();
+    }
+
+    public void SafeClose()
+    {
+        Dispatcher.UIThread.Invoke(Close);
+    }
+
+    private static void ThreadStart()
+    {
+        Dispatcher.UIThread.Invoke(ThreadStartInternal);
+    }
+
+    private static void ThreadStartInternal()
+    {
+        Instance = new LoadingWindow();
+        Instance.Show();
+    }
+}
+

+ 0 - 1
src/PixiEditor.AvaloniaUI/Views/Main/CommandSearch/CommandSearchControl.axaml.cs

@@ -8,7 +8,6 @@ using Avalonia.Controls;
 using Avalonia.Input;
 using Avalonia.Threading;
 using CommunityToolkit.Mvvm.Input;
-using Hardware.Info;
 using PixiEditor.AvaloniaUI.Helpers.Extensions;
 using PixiEditor.AvaloniaUI.Models.Commands;
 using PixiEditor.AvaloniaUI.Models.Commands.Search;

+ 13 - 10
src/PixiEditor.AvaloniaUI/Views/MainWindow.axaml.cs

@@ -1,19 +1,18 @@
-using System.Linq;
 using System.Threading.Tasks;
 using AsyncImageLoader.Loaders;
 using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Controls.ApplicationLifetimes;
+using Avalonia.Interactivity;
 using Avalonia.Threading;
 using Microsoft.Extensions.DependencyInjection;
 using PixiEditor.AvaloniaUI.Helpers;
-using PixiEditor.AvaloniaUI.Models.Dialogs;
+using PixiEditor.AvaloniaUI.Initialization;
 using PixiEditor.AvaloniaUI.Models.ExceptionHandling;
 using PixiEditor.AvaloniaUI.Models.IO;
-using PixiEditor.AvaloniaUI.Views.Dialogs;
+using PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
 using PixiEditor.DrawingApi.Core.Bridge;
 using PixiEditor.DrawingApi.Skia;
-using PixiEditor.Extensions.Common.Localization;
 using PixiEditor.Extensions.Common.UserPreferences;
 using PixiEditor.Extensions.Runtime;
 using PixiEditor.Platform;
@@ -67,10 +66,6 @@ internal partial class MainWindow : Window
 
     public static MainWindow CreateWithRecoveredDocuments(CrashReport report, out bool showMissingFilesDialog)
     {
-        showMissingFilesDialog = false;
-        return new MainWindow(new ExtensionLoader(Paths.ExtensionsFullPath));
-        // TODO implement this
-        /*
         var window = GetMainWindow();
         var fileVM = window.services.GetRequiredService<FileViewModel>();
 
@@ -104,14 +99,22 @@ internal partial class MainWindow : Window
             try
             {
                 var app = (App)Application.Current;
-                return new MainWindow(app.InitApp());
+                ClassicDesktopEntry entry = new(app.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime);
+                return new MainWindow(entry.InitApp());
             }
             catch (Exception e)
             {
                 CrashHelper.SendExceptionInfoToWebhook(e, true);
                 throw;
             }
-        }*/
+        }
+    }
+
+    protected override void OnLoaded(RoutedEventArgs e)
+    {
+        base.OnLoaded(e);
+        LoadingWindow.Instance?.SafeClose();
+        Activate();
     }
 
     protected override void OnClosing(WindowClosingEventArgs e)

+ 0 - 1
src/PixiEditor.AvaloniaUI/Views/Shortcuts/ImportShortcutTemplatePopup.axaml.cs

@@ -1,6 +1,5 @@
 using System.Collections.Generic;
 using System.Threading.Tasks;
-using Avalonia.Controls;
 using Avalonia.Input;
 using PixiEditor.AvaloniaUI.Models.Commands;
 using PixiEditor.AvaloniaUI.Models.Commands.Attributes.Commands;

+ 0 - 1
src/PixiEditor.AvaloniaUI/Views/Shortcuts/KeyCombinationBox.axaml.cs

@@ -2,7 +2,6 @@
 using Avalonia.Controls;
 using Avalonia.Input;
 using Avalonia.Interactivity;
-using Hardware.Info;
 using PixiEditor.AvaloniaUI.Models.Input;
 using PixiEditor.AvaloniaUI.ViewModels;
 using PixiEditor.Extensions.Common.Localization;

+ 0 - 1
src/PixiEditor.AvaloniaUI/Views/Shortcuts/ShortcutsTemplateCard.axaml.cs

@@ -1,7 +1,6 @@
 using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Input;
-using Avalonia.Media.Imaging;
 using PixiEditor.AvaloniaUI.Helpers.Converters;
 
 namespace PixiEditor.AvaloniaUI.Views.Shortcuts;