Browse Source

Refactor into DialogManager

Ruben 7 months ago
parent
commit
5a149e346c

+ 1 - 1
src/PicView.Avalonia/Crop/CropFunctions.cs

@@ -110,7 +110,7 @@ public static class CropFunctions
             return false;
         }
 
-        if (UIHelper.IsDialogOpen)
+        if (DialogManager.IsDialogOpen)
         {
             return false;
         }

+ 2 - 2
src/PicView.Avalonia/CustomControls/AnimatedPopUp.cs

@@ -70,7 +70,7 @@ public class AnimatedPopUp : ContentControl
 
     public async Task AnimatedOpening()
     {
-        UIHelper.IsDialogOpen = true;
+        DialogManager.IsDialogOpen = true;
         var fadeIn = AnimationsHelper.OpacityAnimation(0, 1, 0.3);
         var centering = AnimationsHelper.CenteringAnimation(50, 100, 0, 0, 0.3);
         await Task.WhenAll(fadeIn.RunAsync(_partOverlay), fadeIn.RunAsync(_partBorder),
@@ -79,7 +79,7 @@ public class AnimatedPopUp : ContentControl
 
     public async Task AnimatedClosing()
     {
-        UIHelper.IsDialogOpen = false;
+        DialogManager.IsDialogOpen = false;
         var fadeIn = AnimationsHelper.OpacityAnimation(1, 0, 0.3);
         var centering = AnimationsHelper.CenteringAnimation(0, 0, 50, 100, 0.3);
         await Task.WhenAll(fadeIn.RunAsync(_partOverlay), fadeIn.RunAsync(_partBorder),

+ 1 - 1
src/PicView.Avalonia/Input/MainKeyboardShortcuts.cs

@@ -174,7 +174,7 @@ public static class MainKeyboardShortcuts
         }
 
         // Handle open dialog
-        if (UIHelper.IsDialogOpen)
+        if (DialogManager.IsDialogOpen)
         {
             UIHelper.GetMainView.MainGrid.Children
                 .OfType<AnimatedPopUp>()

+ 1 - 1
src/PicView.Avalonia/Navigation/NavigationManager.cs

@@ -45,7 +45,7 @@ public static class NavigationManager
     {
         return _imageIterator?.ImagePaths is not null &&
                _imageIterator.ImagePaths.Count > 0 && !CropFunctions.IsCropping &&
-               !UIHelper.IsDialogOpen && vm is { IsEditableTitlebarOpen: false, FileInfo: not null };
+               !DialogManager.IsDialogOpen && vm is { IsEditableTitlebarOpen: false, FileInfo: not null };
         // TODO: should probably turn this into CanExecute observable for ReactiveUI
     }
 

+ 67 - 0
src/PicView.Avalonia/UI/DialogManager.cs

@@ -0,0 +1,67 @@
+using Avalonia;
+using Avalonia.Controls.ApplicationLifetimes;
+using Avalonia.Threading;
+using PicView.Avalonia.Crop;
+using PicView.Avalonia.Navigation;
+using PicView.Avalonia.ViewModels;
+using PicView.Avalonia.Views.UC.PopUps;
+using PicView.Avalonia.WindowBehavior;
+
+namespace PicView.Avalonia.UI;
+
+public static class DialogManager
+{
+    public static bool IsDialogOpen { get; set; }
+    
+    /// <summary>
+    /// Handles close action based on current application state
+    /// </summary>
+    public static async Task Close(MainViewModel vm)
+    {
+        // Handle open menus
+        if (MenuManager.IsAnyMenuOpen(vm))
+        {
+            MenuManager.CloseMenus(vm);
+            return;
+        }
+
+        // Handle cropping mode
+        if (CropFunctions.IsCropping)
+        {
+            CropFunctions.CloseCropControl(vm);
+            return;
+        }
+
+        // Handle slideshow
+        if (Slideshow.IsRunning)
+        {
+            Slideshow.StopSlideshow(vm);
+            return;
+        }
+
+        // Handle fullscreen
+        if (Settings.WindowProperties.Fullscreen)
+        {
+            await WindowFunctions.MaximizeRestore();
+            return;
+        }
+        
+        // Handle window close
+        if (Application.Current?.ApplicationLifetime is not IClassicDesktopStyleApplicationLifetime desktop)
+        {
+            return;
+        }
+
+        await Dispatcher.UIThread.InvokeAsync(() =>
+        {
+            if (Settings.UIProperties.ShowConfirmationOnEsc)
+            {
+                UIHelper.GetMainView?.MainGrid.Children.Add(new CloseDialog());
+            }
+            else
+            {
+                desktop.MainWindow?.Close();
+            }
+        });
+    }
+}

+ 2 - 2
src/PicView.Avalonia/UI/FunctionsMapper.cs

@@ -398,9 +398,9 @@ public static class FunctionsMapper
         });
     }
     
-    /// <inheritdoc cref="UIHelper.Close(MainViewModel)" />
+    /// <inheritdoc cref="DialogManager.Close(MainViewModel)" />
     public static async Task Close() =>
-        await UIHelper.Close(Vm).ConfigureAwait(false);
+        await DialogManager.Close(Vm).ConfigureAwait(false);
     
     public static async Task Center()
     {

+ 1 - 1
src/PicView.Avalonia/UI/MenuManager.cs

@@ -80,7 +80,7 @@ public static class MenuManager
 
     private static void ToggleMenu(MainViewModel vm, MenuType menuType)
     {
-        if (UIHelper.IsDialogOpen)
+        if (DialogManager.IsDialogOpen)
         {
             return;
         }

+ 1 - 65
src/PicView.Avalonia/UI/UIHelper.cs

@@ -1,14 +1,9 @@
-using Avalonia;
-using Avalonia.Controls;
+using Avalonia.Controls;
 using Avalonia.Controls.ApplicationLifetimes;
-using Avalonia.Threading;
-using PicView.Avalonia.Crop;
 using PicView.Avalonia.Navigation;
 using PicView.Avalonia.ViewModels;
 using PicView.Avalonia.Views;
 using PicView.Avalonia.Views.UC;
-using PicView.Avalonia.Views.UC.PopUps;
-using PicView.Avalonia.WindowBehavior;
 
 namespace PicView.Avalonia.UI;
 
@@ -17,9 +12,6 @@ namespace PicView.Avalonia.UI;
 /// </summary>
 public static class UIHelper
 {
-    
-    public static bool IsDialogOpen { get; set; }
-
     public static MainView? GetMainView { get; private set; }
     public static Control? GetTitlebar { get; private set; }
     public static EditableTitlebar? GetEditableTitlebar { get; private set; }
@@ -85,60 +77,4 @@ public static class UIHelper
     }
 
     #endregion
-    
-    #region Dialog Operations
-    
-    /// <summary>
-    /// Handles close action based on current application state
-    /// </summary>
-    public static async Task Close(MainViewModel vm)
-    {
-        // Handle open menus
-        if (MenuManager.IsAnyMenuOpen(vm))
-        {
-            MenuManager.CloseMenus(vm);
-            return;
-        }
-
-        // Handle cropping mode
-        if (CropFunctions.IsCropping)
-        {
-            CropFunctions.CloseCropControl(vm);
-            return;
-        }
-
-        // Handle slideshow
-        if (Slideshow.IsRunning)
-        {
-            Slideshow.StopSlideshow(vm);
-            return;
-        }
-
-        // Handle fullscreen
-        if (Settings.WindowProperties.Fullscreen)
-        {
-            await WindowFunctions.MaximizeRestore();
-            return;
-        }
-        
-        // Handle window close
-        if (Application.Current?.ApplicationLifetime is not IClassicDesktopStyleApplicationLifetime desktop)
-        {
-            return;
-        }
-
-        await Dispatcher.UIThread.InvokeAsync(() =>
-        {
-            if (Settings.UIProperties.ShowConfirmationOnEsc)
-            {
-                GetMainView?.MainGrid.Children.Add(new CloseDialog());
-            }
-            else
-            {
-                desktop.MainWindow?.Close();
-            }
-        });
-    }
-
-    #endregion
 }