Selaa lähdekoodia

Refactor window configuration management

- Moved `SettingsWindowConfig` and `ImageInfoWindowConfig` to `WindowViewModel` for centralized management.
- Updated `WindowInitializer` to use the new configuration structure for windows across platforms.
- Ensured window configuration is saved during cleanup for consistency.
Ruben 4 kuukautta sitten
vanhempi
sitoutus
78bda6b72d

+ 9 - 15
src/PicView.Avalonia.MacOS/WindowImpl/WindowInitializer.cs

@@ -19,15 +19,9 @@ public class WindowInitializer : IPlatformSpecificUpdate
     private AboutWindow? _aboutWindow;
     private BatchResizeWindow? _batchResizeWindow;
     private EffectsWindow? _effectsWindow;
-    
     private ImageInfoWindow? _imageInfoWindow;
-    private ImageInfoWindowConfig? _imageInfoWindowConfig;
-    
     private KeybindingsWindow? _keybindingsWindow;
-    
     private SettingsWindow? _settingsWindow;
-    private SettingsWindowConfig? _settingsWindowConfig;
-    
     private SingleImageResizeWindow? _singleImageResizeWindow;
 
     public async Task HandlePlatofrmUpdate(UpdateInfo updateInfo, string tempPath)
@@ -90,17 +84,17 @@ public class WindowInitializer : IPlatformSpecificUpdate
 
         if (_imageInfoWindow is null)
         {
-            if (_imageInfoWindowConfig?.WindowProperties is null )
+            if (vm.Window.ImageInfoWindowConfig?.WindowProperties is null )
             {
-                _imageInfoWindowConfig = new ImageInfoWindowConfig();
-                await _imageInfoWindowConfig.LoadAsync();
+                vm.Window.ImageInfoWindowConfig = new ImageInfoWindowConfig();
+                await vm.Window.ImageInfoWindowConfig.LoadAsync();
             }
 
             await Dispatcher.UIThread.InvokeAsync(() =>
             {
                 vm.Exif ??= new ExifViewModel();
                 vm.InfoWindow = new ImageInfoWindowViewModel();
-                _imageInfoWindow = new ImageInfoWindow(_imageInfoWindowConfig)
+                _imageInfoWindow = new ImageInfoWindow(vm.Window.ImageInfoWindowConfig)
                 {
                     DataContext = vm,
                 };
@@ -135,7 +129,7 @@ public class WindowInitializer : IPlatformSpecificUpdate
 
         void Show()
         {
-            WindowFunctions.InitializeWindowSizeAndPosition(_imageInfoWindow, _imageInfoWindowConfig.WindowProperties);
+            WindowFunctions.InitializeWindowSizeAndPosition(_imageInfoWindow, vm.Window.ImageInfoWindowConfig.WindowProperties);
             _imageInfoWindow.Show(desktop.MainWindow);
         }
     }
@@ -193,10 +187,10 @@ public class WindowInitializer : IPlatformSpecificUpdate
             return;
         }
         
-        if (_settingsWindowConfig?.WindowProperties is null )
+        if (vm.Window.SettingsWindowConfig?.WindowProperties is null )
         {
-            _settingsWindowConfig = new SettingsWindowConfig();
-            await _settingsWindowConfig.LoadAsync();
+            vm.Window.SettingsWindowConfig = new SettingsWindowConfig();
+            await vm.Window.SettingsWindowConfig.LoadAsync();
         }
         if (_settingsWindow is null)
         {
@@ -234,7 +228,7 @@ public class WindowInitializer : IPlatformSpecificUpdate
         
         void Show()
         {
-            WindowFunctions.InitializeWindowSizeAndPosition(_settingsWindow, _settingsWindowConfig.WindowProperties);
+            WindowFunctions.InitializeWindowSizeAndPosition(_settingsWindow, vm.Window.SettingsWindowConfig.WindowProperties);
             _settingsWindow.Show(desktop.MainWindow);
         }
     }

+ 9 - 15
src/PicView.Avalonia.Win32/WindowImpl/WindowInitializer.cs

@@ -19,15 +19,9 @@ public class WindowInitializer : IPlatformSpecificUpdate
     private AboutWindow? _aboutWindow;
     private BatchResizeWindow? _batchResizeWindow;
     private EffectsWindow? _effectsWindow;
-    
     private ImageInfoWindow? _imageInfoWindow;
-    private ImageInfoWindowConfig? _imageInfoWindowConfig;
-    
     private KeybindingsWindow? _keybindingsWindow;
-    
     private SettingsWindow? _settingsWindow;
-    private SettingsWindowConfig? _settingsWindowConfig;
-    
     private SingleImageResizeWindow? _singleImageResizeWindow;
 
     public async Task HandlePlatofrmUpdate(UpdateInfo updateInfo, string tempPath)
@@ -90,17 +84,17 @@ public class WindowInitializer : IPlatformSpecificUpdate
 
         if (_imageInfoWindow is null)
         {
-            if (_imageInfoWindowConfig?.WindowProperties is null )
+            if (vm.Window.ImageInfoWindowConfig?.WindowProperties is null )
             {
-                _imageInfoWindowConfig = new ImageInfoWindowConfig();
-                await _imageInfoWindowConfig.LoadAsync();
+                vm.Window.ImageInfoWindowConfig = new ImageInfoWindowConfig();
+                await vm.Window.ImageInfoWindowConfig.LoadAsync();
             }
 
             await Dispatcher.UIThread.InvokeAsync(() =>
             {
                 vm.Exif ??= new ExifViewModel();
                 vm.InfoWindow = new ImageInfoWindowViewModel();
-                _imageInfoWindow = new ImageInfoWindow(_imageInfoWindowConfig)
+                _imageInfoWindow = new ImageInfoWindow(vm.Window.ImageInfoWindowConfig)
                 {
                     DataContext = vm,
                 };
@@ -135,7 +129,7 @@ public class WindowInitializer : IPlatformSpecificUpdate
 
         void Show()
         {
-            WindowFunctions.InitializeWindowSizeAndPosition(_imageInfoWindow, _imageInfoWindowConfig.WindowProperties);
+            WindowFunctions.InitializeWindowSizeAndPosition(_imageInfoWindow, vm.Window.ImageInfoWindowConfig.WindowProperties);
             _imageInfoWindow.Show(desktop.MainWindow);
         }
     }
@@ -193,10 +187,10 @@ public class WindowInitializer : IPlatformSpecificUpdate
             return;
         }
         
-        if (_settingsWindowConfig?.WindowProperties is null )
+        if (vm.Window.SettingsWindowConfig?.WindowProperties is null )
         {
-            _settingsWindowConfig = new SettingsWindowConfig();
-            await _settingsWindowConfig.LoadAsync();
+            vm.Window.SettingsWindowConfig = new SettingsWindowConfig();
+            await vm.Window.SettingsWindowConfig.LoadAsync();
         }
         if (_settingsWindow is null)
         {
@@ -234,7 +228,7 @@ public class WindowInitializer : IPlatformSpecificUpdate
         
         void Show()
         {
-            WindowFunctions.InitializeWindowSizeAndPosition(_settingsWindow, _settingsWindowConfig.WindowProperties);
+            WindowFunctions.InitializeWindowSizeAndPosition(_settingsWindow, vm.Window.SettingsWindowConfig.WindowProperties);
             _settingsWindow.Show(desktop.MainWindow);
         }
     }

+ 4 - 0
src/PicView.Avalonia/ViewModels/WindowViewModel.cs

@@ -1,10 +1,14 @@
 using PicView.Avalonia.UI;
+using PicView.Core.Config;
 using PicView.Core.ProcessHandling;
 
 namespace PicView.Avalonia.ViewModels;
 
 public class WindowViewModel
 {
+    public SettingsWindowConfig? SettingsWindowConfig { get; set; }
+    public ImageInfoWindowConfig? ImageInfoWindowConfig { get; set; }
+    
     public void NewWindow() => ProcessHelper.StartNewProcess();
     
     public async Task ShowImageInfoWindow()

+ 11 - 0
src/PicView.Avalonia/WindowBehavior/WindowFunctions.cs

@@ -69,6 +69,17 @@ public static class WindowFunctions
         TempFileHelper.DeleteTempFiles();
         await FileHistoryManager.SaveToFileAsync();
         ArchiveExtraction.Cleanup();
+
+        if (vm.Window.SettingsWindowConfig is not null)
+        {
+            await vm.Window.SettingsWindowConfig.SaveAsync();
+        }
+
+        if (vm.Window.ImageInfoWindowConfig is not null)
+        {
+            await vm.Window.ImageInfoWindowConfig.SaveAsync();
+        }
+        
         Environment.Exit(0);
     }