1
1
Эх сурвалжийг харах

Refactor: migrate UI-related properties to `MainWindowViewModel`. Update bindings across views, remove redundant properties from `MainViewModel`, and streamline logic for UI state management.

Ruben 3 сар өмнө
parent
commit
9b006c40c1
43 өөрчлөгдсөн 178 нэмэгдсэн , 207 устгасан
  1. 1 1
      src/PicView.Avalonia.MacOS/Views/MacMainWindow.axaml.cs
  2. 1 1
      src/PicView.Avalonia.MacOS/Views/MacOSTitlebar.axaml
  3. 11 11
      src/PicView.Avalonia.MacOS/WindowImpl/MacOSWindow.cs
  4. 3 3
      src/PicView.Avalonia.Win32/Views/WinTitleBar.axaml
  5. 1 1
      src/PicView.Avalonia.Win32/Views/WinTitleBar.axaml.cs
  6. 12 12
      src/PicView.Avalonia.Win32/WindowImpl/Win32Window.cs
  7. 2 2
      src/PicView.Avalonia/Clipboard/ClipboardFileOperations.cs
  8. 1 1
      src/PicView.Avalonia/Crop/CropFunctions.cs
  9. 1 1
      src/PicView.Avalonia/DragAndDrop/DragAndDropHelper.cs
  10. 2 2
      src/PicView.Avalonia/FileSystem/FileManager.cs
  11. 1 1
      src/PicView.Avalonia/FileSystem/FileRenamer.cs
  12. 1 1
      src/PicView.Avalonia/Gallery/GalleryFunctions.cs
  13. 1 1
      src/PicView.Avalonia/Input/MainKeyboardShortcuts.cs
  14. 2 2
      src/PicView.Avalonia/LockScreen/LockScreenHelper.cs
  15. 3 3
      src/PicView.Avalonia/Navigation/ErrorHandling.cs
  16. 5 5
      src/PicView.Avalonia/Navigation/ImageIterator.cs
  17. 13 13
      src/PicView.Avalonia/Navigation/ImageLoader.cs
  18. 2 2
      src/PicView.Avalonia/Navigation/NavigationManager.cs
  19. 1 1
      src/PicView.Avalonia/Navigation/UpdateImage.cs
  20. 6 6
      src/PicView.Avalonia/SettingsManagement/SettingsUpdater.cs
  21. 6 6
      src/PicView.Avalonia/StartUp/QuickLoad.cs
  22. 6 4
      src/PicView.Avalonia/StartUp/StartUpHelper.cs
  23. 8 8
      src/PicView.Avalonia/UI/HideInterfaceLogic.cs
  24. 2 72
      src/PicView.Avalonia/ViewModels/MainViewModel.cs
  25. 41 1
      src/PicView.Avalonia/ViewModels/MainWindowViewModel.cs
  26. 2 2
      src/PicView.Avalonia/Views/AppearanceView.axaml
  27. 1 1
      src/PicView.Avalonia/Views/BottomBar.axaml
  28. 1 1
      src/PicView.Avalonia/Views/EffectsView.axaml
  29. 3 3
      src/PicView.Avalonia/Views/EffectsView.axaml.cs
  30. 9 9
      src/PicView.Avalonia/Views/MainView.axaml
  31. 2 2
      src/PicView.Avalonia/Views/MainView.axaml.cs
  32. 0 1
      src/PicView.Avalonia/Views/SettingsView.axaml.cs
  33. 3 3
      src/PicView.Avalonia/Views/StartUpMenu.axaml.cs
  34. 1 1
      src/PicView.Avalonia/Views/UC/Buttons/AltClose.axaml
  35. 1 1
      src/PicView.Avalonia/Views/UC/Buttons/AltMinimize.axaml
  36. 3 3
      src/PicView.Avalonia/Views/UC/Buttons/AltRestore.axaml
  37. 1 1
      src/PicView.Avalonia/Views/UC/Buttons/GalleryShortcut.axaml
  38. 3 3
      src/PicView.Avalonia/Views/UC/EditableTitlebar.axaml
  39. 10 10
      src/PicView.Avalonia/Views/UC/EditableTitlebar.axaml.cs
  40. 1 1
      src/PicView.Avalonia/Views/UC/TitleTextBox.axaml
  41. 1 1
      src/PicView.Avalonia/Views/UC/ToolTipMessage.axaml
  42. 2 2
      src/PicView.Avalonia/Wallpaper/WallpaperManager.cs
  43. 1 1
      src/PicView.Avalonia/WindowBehavior/WindowResizing.cs

+ 1 - 1
src/PicView.Avalonia.MacOS/Views/MacMainWindow.axaml.cs

@@ -58,7 +58,7 @@ public partial class MacMainWindow : Window
             });
             });
             
             
             // Hide macOS buttons when interface is hidden
             // Hide macOS buttons when interface is hidden
-            Observable.EveryValueChanged(vm, x => x.IsTopToolbarShown, _frameProvider).Subscribe(shown =>
+            Observable.EveryValueChanged(vm, x => x.MainWindow.IsTopToolbarShown.CurrentValue, _frameProvider).Subscribe(shown =>
             {
             {
                 SystemDecorations = shown ? SystemDecorations.Full : SystemDecorations.None;
                 SystemDecorations = shown ? SystemDecorations.Full : SystemDecorations.None;
             });
             });

+ 1 - 1
src/PicView.Avalonia.MacOS/Views/MacOSTitlebar.axaml

@@ -1,5 +1,5 @@
 <UserControl
 <UserControl
-    IsVisible="{CompiledBinding IsTopToolbarShown,
+    IsVisible="{CompiledBinding MainWindow.IsTopToolbarShown.Value,
                                 Mode=OneWay}"
                                 Mode=OneWay}"
     mc:Ignorable="d"
     mc:Ignorable="d"
     x:Class="PicView.Avalonia.MacOS.Views.MacOSTitlebar"
     x:Class="PicView.Avalonia.MacOS.Views.MacOSTitlebar"

+ 11 - 11
src/PicView.Avalonia.MacOS/WindowImpl/MacOSWindow.cs

@@ -42,14 +42,14 @@ public static class MacOSWindow
 
 
         if (Settings.UIProperties.ShowInterface)
         if (Settings.UIProperties.ShowInterface)
         {
         {
-            vm.IsTopToolbarShown = true;
-            vm.IsBottomToolbarShown = Settings.UIProperties.ShowBottomNavBar;
-            vm.IsUIShown = true;
+            vm.MainWindow.IsTopToolbarShown.Value = true;
+            vm.MainWindow.IsBottomToolbarShown.Value = Settings.UIProperties.ShowBottomNavBar;
+            vm.MainWindow.IsUIShown.Value = true;
         }
         }
         else
         else
         {
         {
-            vm.IsTopToolbarShown = false;
-            vm.IsUIShown = false;
+            vm.MainWindow.IsTopToolbarShown.Value = false;
+            vm.MainWindow.IsUIShown.Value = false;
         }
         }
 
 
         if (Settings.WindowProperties.AutoFit)
         if (Settings.WindowProperties.AutoFit)
@@ -78,11 +78,11 @@ public static class MacOSWindow
         
         
         window.WindowState = WindowState.FullScreen;
         window.WindowState = WindowState.FullScreen;
         
         
-        vm.IsTopToolbarShown = false;
-        vm.IsBottomToolbarShown = false;
+        vm.MainWindow.IsTopToolbarShown.Value = false;
+        vm.MainWindow.IsBottomToolbarShown.Value = false;
         
         
-        vm.IsFullscreen = true;
-        vm.IsMaximized = false;
+        vm.MainWindow.IsFullscreen.Value = true;
+        vm.MainWindow.IsMaximized.Value = false;
         vm.MainWindow.CanResize.Value = false;
         vm.MainWindow.CanResize.Value = false;
         await WindowResizing.SetSizeAsync(vm);
         await WindowResizing.SetSizeAsync(vm);
         
         
@@ -108,8 +108,8 @@ public static class MacOSWindow
         Settings.WindowProperties.Fullscreen = false;
         Settings.WindowProperties.Fullscreen = false;
         
         
         vm.MainWindow.SizeToContent.Value = SizeToContent.Manual;
         vm.MainWindow.SizeToContent.Value = SizeToContent.Manual;
-        vm.IsMaximized = true;
-        vm.IsFullscreen = false;
+        vm.MainWindow.IsMaximized.Value = true;
+        vm.MainWindow.IsFullscreen.Value = false;
         vm.MainWindow.CanResize.Value = false;
         vm.MainWindow.CanResize.Value = false;
         
         
         window.WindowState = WindowState.Maximized;
         window.WindowState = WindowState.Maximized;

+ 3 - 3
src/PicView.Avalonia.Win32/Views/WinTitleBar.axaml

@@ -1,7 +1,7 @@
 <UserControl
 <UserControl
     Height="{CompiledBinding MainWindow.TitlebarHeight.Value,
     Height="{CompiledBinding MainWindow.TitlebarHeight.Value,
                              Mode=OneWay}"
                              Mode=OneWay}"
-    IsVisible="{CompiledBinding IsTopToolbarShown,
+    IsVisible="{CompiledBinding MainWindow.IsTopToolbarShown.Value,
                                 Mode=OneWay}"
                                 Mode=OneWay}"
     Margin="{CompiledBinding MainWindow.TopScreenMargin.Value,
     Margin="{CompiledBinding MainWindow.TopScreenMargin.Value,
                              Mode=OneWay}"
                              Mode=OneWay}"
@@ -169,7 +169,7 @@
                 IconHeight="12"
                 IconHeight="12"
                 IconWidth="12"
                 IconWidth="12"
                 IsRepeatEnabled="False"
                 IsRepeatEnabled="False"
-                IsVisible="{CompiledBinding ShouldMaximizeBeShown,
+                IsVisible="{CompiledBinding MainWindow.ShouldMaximizeBeShown.Value,
                                             Mode=OneWay}"
                                             Mode=OneWay}"
                 Width="30"
                 Width="30"
                 x:Name="FullscreenButton" />
                 x:Name="FullscreenButton" />
@@ -186,7 +186,7 @@
                 IconHeight="12"
                 IconHeight="12"
                 IconWidth="12"
                 IconWidth="12"
                 IsRepeatEnabled="False"
                 IsRepeatEnabled="False"
-                IsVisible="{CompiledBinding !ShouldMaximizeBeShown,
+                IsVisible="{CompiledBinding !MainWindow.ShouldMaximizeBeShown.Value,
                                             Mode=OneWay}"
                                             Mode=OneWay}"
                 Width="30"
                 Width="30"
                 x:Name="RestoreButton" />
                 x:Name="RestoreButton" />

+ 1 - 1
src/PicView.Avalonia.Win32/Views/WinTitleBar.axaml.cs

@@ -155,7 +155,7 @@ public partial class WinTitleBar : UserControl
     {
     {
         if (VisualRoot is null || DataContext is not MainViewModel vm) { return; }
         if (VisualRoot is null || DataContext is not MainViewModel vm) { return; }
         
         
-        if (vm.IsEditableTitlebarOpen)
+        if (vm.MainWindow.IsEditableTitlebarOpen.Value)
         {
         {
             return;
             return;
         }
         }

+ 12 - 12
src/PicView.Avalonia.Win32/WindowImpl/Win32Window.cs

@@ -19,8 +19,8 @@ public static class Win32Window
 
 
         // Update view model properties
         // Update view model properties
         vm.MainWindow.SizeToContent.Value = SizeToContent.Manual;
         vm.MainWindow.SizeToContent.Value = SizeToContent.Manual;
-        vm.IsFullscreen = true;
-        vm.IsMaximized = false;
+        vm.MainWindow.IsFullscreen.Value = true;
+        vm.MainWindow.IsMaximized.Value = false;
         vm.MainWindow.CanResize.Value = false;
         vm.MainWindow.CanResize.Value = false;
 
 
         // Update settings
         // Update settings
@@ -66,8 +66,8 @@ public static class Win32Window
             SetMargin(vm, window);
             SetMargin(vm, window);
         });
         });
 
 
-        vm.IsMaximized = true;
-        vm.IsFullscreen = false;
+        vm.MainWindow.IsMaximized.Value = true;
+        vm.MainWindow.IsFullscreen.Value = false;
         vm.MainWindow.CanResize.Value = false;
         vm.MainWindow.CanResize.Value = false;
 
 
         if (saveSettings)
         if (saveSettings)
@@ -84,8 +84,8 @@ public static class Win32Window
 
 
         // Update UI state
         // Update UI state
         SetMargin(vm, window);
         SetMargin(vm, window);
-        vm.IsMaximized = false;
-        vm.IsFullscreen = false;
+        vm.MainWindow.IsMaximized.Value = false;
+        vm.MainWindow.IsFullscreen.Value = false;
 
 
         RestoreInterface(vm);
         RestoreInterface(vm);
 
 
@@ -203,14 +203,14 @@ public static class Win32Window
     /// </summary>
     /// </summary>
     private static void RestoreInterface(MainViewModel vm)
     private static void RestoreInterface(MainViewModel vm)
     {
     {
-        vm.IsUIShown = Settings.UIProperties.ShowInterface;
+        vm.MainWindow.IsUIShown.Value = Settings.UIProperties.ShowInterface;
 
 
         if (!Settings.UIProperties.ShowInterface)
         if (!Settings.UIProperties.ShowInterface)
         {
         {
             return;
             return;
         }
         }
 
 
-        vm.IsTopToolbarShown = true;
+        vm.MainWindow.IsTopToolbarShown.Value = true;
         vm.MainWindow.TitlebarHeight.Value = SizeDefaults.MainTitlebarHeight;
         vm.MainWindow.TitlebarHeight.Value = SizeDefaults.MainTitlebarHeight;
 
 
         if (!Settings.UIProperties.ShowBottomNavBar)
         if (!Settings.UIProperties.ShowBottomNavBar)
@@ -218,7 +218,7 @@ public static class Win32Window
             return;
             return;
         }
         }
 
 
-        vm.IsBottomToolbarShown = true;
+        vm.MainWindow.IsBottomToolbarShown.Value = true;
         vm.MainWindow.BottombarHeight.Value = SizeDefaults.BottombarHeight;
         vm.MainWindow.BottombarHeight.Value = SizeDefaults.BottombarHeight;
     }
     }
 
 
@@ -227,9 +227,9 @@ public static class Win32Window
     /// </summary>
     /// </summary>
     private static void HideInterface(MainViewModel vm)
     private static void HideInterface(MainViewModel vm)
     {
     {
-        vm.IsTopToolbarShown = false;
-        vm.IsBottomToolbarShown = false;
-        vm.IsUIShown = false;
+        vm.MainWindow.IsTopToolbarShown.Value = false;
+        vm.MainWindow.IsBottomToolbarShown.Value = false;
+        vm.MainWindow.IsUIShown.Value = false;
     }
     }
 
 
     /// <summary>
     /// <summary>

+ 2 - 2
src/PicView.Avalonia/Clipboard/ClipboardFileOperations.cs

@@ -31,7 +31,7 @@ public static class ClipboardFileOperations
         
         
         try
         try
         {
         {
-            vm.IsLoading = true;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = true;
             
             
             if (path == vm.PicViewer.FileInfo?.CurrentValue.FullName)
             if (path == vm.PicViewer.FileInfo?.CurrentValue.FullName)
             {
             {
@@ -51,7 +51,7 @@ public static class ClipboardFileOperations
         }
         }
         finally
         finally
         {
         {
-            vm.IsLoading = false;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         }
         }
     }
     }
 
 

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

@@ -128,7 +128,7 @@ public static class CropFunctions
             return false;
             return false;
         }
         }
 
 
-        if (vm.IsEditableTitlebarOpen)
+        if (vm.MainWindow.IsEditableTitlebarOpen.CurrentValue)
         {
         {
             return false;
             return false;
         }
         }

+ 1 - 1
src/PicView.Avalonia/DragAndDrop/DragAndDropHelper.cs

@@ -142,7 +142,7 @@ public static class DragAndDropHelper
     {
     {
         // Remove preview first and show loading
         // Remove preview first and show loading
         RemoveDragDropView();
         RemoveDragDropView();
-        vm.IsLoading = true;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = true;
         if (vm.ImageViewer?.MainImage != null)
         if (vm.ImageViewer?.MainImage != null)
         {
         {
             vm.ImageViewer.MainImage.Source = null;
             vm.ImageViewer.MainImage.Source = null;

+ 2 - 2
src/PicView.Avalonia/FileSystem/FileManager.cs

@@ -95,7 +95,7 @@ public static class FileManager
 
 
         try
         try
         {
         {
-            vm.IsLoading = true;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = true;
             var file = await ImageFormatConverter.ConvertToCommonSupportedFormatAsync(path, vm)
             var file = await ImageFormatConverter.ConvertToCommonSupportedFormatAsync(path, vm)
                 .ConfigureAwait(false);
                 .ConfigureAwait(false);
 
 
@@ -113,7 +113,7 @@ public static class FileManager
         }
         }
         finally
         finally
         {
         {
-            vm.IsLoading = false;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         }
         }
     }
     }
 
 

+ 1 - 1
src/PicView.Avalonia/FileSystem/FileRenamer.cs

@@ -12,7 +12,7 @@ public static class FileRenamer
 
 
     public static async Task<bool> AttemptRenameAsync(string oldPath, string newPath, MainViewModel vm)
     public static async Task<bool> AttemptRenameAsync(string oldPath, string newPath, MainViewModel vm)
     {
     {
-        vm.IsLoading = true;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = true;
 
 
         if (Path.GetExtension(newPath) != Path.GetExtension(oldPath))
         if (Path.GetExtension(newPath) != Path.GetExtension(oldPath))
         {
         {

+ 1 - 1
src/PicView.Avalonia/Gallery/GalleryFunctions.cs

@@ -33,7 +33,7 @@ public static class GalleryFunctions
                 : 0;
                 : 0;
         }
         }
 
 
-        if (!Settings.Gallery.ShowBottomGalleryInHiddenUI && !vm.IsUIShown)
+        if (!Settings.Gallery.ShowBottomGalleryInHiddenUI && !vm.MainWindow.IsUIShown.CurrentValue)
         {
         {
             return 0;
             return 0;
         }
         }

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

@@ -192,7 +192,7 @@ public static class MainKeyboardShortcuts
         // Handle escape key
         // Handle escape key
         if (e.Key == Key.Escape)
         if (e.Key == Key.Escape)
         {
         {
-            if (UIHelper.GetMainView.DataContext as MainViewModel is { IsEditableTitlebarOpen: true })
+            if (UIHelper.GetMainView.DataContext as MainViewModel is { MainWindow.IsEditableTitlebarOpen.CurrentValue: true })
             {
             {
                 return true;
                 return true;
             }
             }

+ 2 - 2
src/PicView.Avalonia/LockScreen/LockScreenHelper.cs

@@ -19,7 +19,7 @@ public static class LockScreenHelper
             return;
             return;
         }
         }
         
         
-        vm.IsLoading = true;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = true;
 
 
         try
         try
         {
         {
@@ -49,7 +49,7 @@ public static class LockScreenHelper
         }
         }
         finally
         finally
         {
         {
-            vm.IsLoading = false;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         }
         }
     }
     }
 }
 }

+ 3 - 3
src/PicView.Avalonia/Navigation/ErrorHandling.cs

@@ -53,7 +53,7 @@ public static class ErrorHandling
 
 
             vm.GetIndex = 0;
             vm.GetIndex = 0;
             vm.PlatformService.StopTaskbarProgress();
             vm.PlatformService.StopTaskbarProgress();
-            vm.IsLoading = false;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = false;
 
 
             _ = NavigationManager.DisposeImageIteratorAsync();
             _ = NavigationManager.DisposeImageIteratorAsync();
             if (UIHelper.GetEditableTitlebar is not null)
             if (UIHelper.GetEditableTitlebar is not null)
@@ -71,7 +71,7 @@ public static class ErrorHandling
 
 
     public static async Task ReloadAsync(MainViewModel vm)
     public static async Task ReloadAsync(MainViewModel vm)
     {
     {
-        vm.IsLoading = true;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = true;
         
         
         if (vm.PicViewer.ImageSource is null)
         if (vm.PicViewer.ImageSource is null)
         {
         {
@@ -125,7 +125,7 @@ public static class ErrorHandling
         }
         }
         finally
         finally
         {
         {
-            vm.IsLoading = false;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         }
         }
     }
     }
 }
 }

+ 5 - 5
src/PicView.Avalonia/Navigation/ImageIterator.cs

@@ -130,7 +130,7 @@ public class ImageIterator : IAsyncDisposable
                 return; // Early exit
                 return; // Early exit
             }
             }
 
 
-            if (_vm.IsEditableTitlebarOpen)
+            if (_vm.MainWindow.IsEditableTitlebarOpen.CurrentValue)
             {
             {
                 // Don't react to changes when renaming
                 // Don't react to changes when renaming
                 return;
                 return;
@@ -153,7 +153,7 @@ public class ImageIterator : IAsyncDisposable
                 return; // Early exit
                 return; // Early exit
             }
             }
 
 
-            if (_vm.IsEditableTitlebarOpen)
+            if (_vm.MainWindow.IsEditableTitlebarOpen.Value)
             {
             {
                 // Don't react to changes when renaming
                 // Don't react to changes when renaming
                 return;
                 return;
@@ -176,7 +176,7 @@ public class ImageIterator : IAsyncDisposable
                 return; // Early exit
                 return; // Early exit
             }
             }
 
 
-            if (_vm.IsEditableTitlebarOpen)
+            if (_vm.MainWindow.IsEditableTitlebarOpen.CurrentValue)
             {
             {
                 // Don't react to changes when renaming
                 // Don't react to changes when renaming
                 return;
                 return;
@@ -788,7 +788,7 @@ public class ImageIterator : IAsyncDisposable
         {
         {
             if (index == CurrentIndex)
             if (index == CurrentIndex)
             {
             {
-                _vm.IsLoading = false;
+                _vm.MainWindow.IsLoadingIndicatorShown.Value = false;
             }
             }
         }
         }
 
 
@@ -828,7 +828,7 @@ public class ImageIterator : IAsyncDisposable
 
 
                 _vm.PicViewer.ImageSource.Value = thumb;
                 _vm.PicViewer.ImageSource.Value = thumb;
                 _vm.PicViewer.SecondaryImageSource.Value = secondaryThumb;
                 _vm.PicViewer.SecondaryImageSource.Value = secondaryThumb;
-                _vm.IsLoading = thumb is null || secondaryThumb is null;
+                _vm.MainWindow.IsLoadingIndicatorShown.Value = thumb is null || secondaryThumb is null;
             }
             }
         }
         }
     }
     }

+ 13 - 13
src/PicView.Avalonia/Navigation/ImageLoader.cs

@@ -31,7 +31,7 @@ public static class ImageLoader
         }
         }
 
 
         MenuManager.CloseMenus(vm);
         MenuManager.CloseMenus(vm);
-        vm.IsLoading = true;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = true;
         TitleManager.SetLoadingTitle(vm);
         TitleManager.SetLoadingTitle(vm);
 
 
         // Starting in new task makes it more responsive and works better
         // Starting in new task makes it more responsive and works better
@@ -42,7 +42,7 @@ public static class ImageLoader
             if (check == null)
             if (check == null)
             {
             {
                 await ErrorHandling.ReloadAsync(vm).ConfigureAwait(false);
                 await ErrorHandling.ReloadAsync(vm).ConfigureAwait(false);
-                vm.IsLoading = false;
+                vm.MainWindow.IsLoadingIndicatorShown.Value = false;
                 ArchiveExtraction.Cleanup();
                 ArchiveExtraction.Cleanup();
                 return;
                 return;
             }
             }
@@ -52,35 +52,35 @@ public static class ImageLoader
                 case FileTypeResolver.LoadAbleFileType.File:
                 case FileTypeResolver.LoadAbleFileType.File:
                     vm.MainWindow.CurrentView.Value = vm.ImageViewer;
                     vm.MainWindow.CurrentView.Value = vm.ImageViewer;
                     await LoadPicFromFile(check.Value.Data, vm, imageIterator).ConfigureAwait(false);
                     await LoadPicFromFile(check.Value.Data, vm, imageIterator).ConfigureAwait(false);
-                    vm.IsLoading = false;
+                    vm.MainWindow.IsLoadingIndicatorShown.Value = false;
                     ArchiveExtraction.Cleanup();
                     ArchiveExtraction.Cleanup();
                     return;
                     return;
                 case FileTypeResolver.LoadAbleFileType.Directory:
                 case FileTypeResolver.LoadAbleFileType.Directory:
                     vm.MainWindow.CurrentView.Value = vm.ImageViewer;
                     vm.MainWindow.CurrentView.Value = vm.ImageViewer;
                     await LoadPicFromDirectoryAsync(check.Value.Data, vm).ConfigureAwait(false);
                     await LoadPicFromDirectoryAsync(check.Value.Data, vm).ConfigureAwait(false);
-                    vm.IsLoading = false;
+                    vm.MainWindow.IsLoadingIndicatorShown.Value = false;
                     ArchiveExtraction.Cleanup();
                     ArchiveExtraction.Cleanup();
                     return;
                     return;
                 case FileTypeResolver.LoadAbleFileType.Web:
                 case FileTypeResolver.LoadAbleFileType.Web:
                     vm.MainWindow.CurrentView.Value = vm.ImageViewer;
                     vm.MainWindow.CurrentView.Value = vm.ImageViewer;
                     await LoadPicFromUrlAsync(check.Value.Data, vm, imageIterator).ConfigureAwait(false);
                     await LoadPicFromUrlAsync(check.Value.Data, vm, imageIterator).ConfigureAwait(false);
-                    vm.IsLoading = false;
+                    vm.MainWindow.IsLoadingIndicatorShown.Value = false;
                     ArchiveExtraction.Cleanup();
                     ArchiveExtraction.Cleanup();
                     return;
                     return;
                 case FileTypeResolver.LoadAbleFileType.Base64:
                 case FileTypeResolver.LoadAbleFileType.Base64:
                     vm.MainWindow.CurrentView.Value = vm.ImageViewer;
                     vm.MainWindow.CurrentView.Value = vm.ImageViewer;
                     await LoadPicFromBase64Async(check.Value.Data, vm, imageIterator).ConfigureAwait(false);
                     await LoadPicFromBase64Async(check.Value.Data, vm, imageIterator).ConfigureAwait(false);
-                    vm.IsLoading = false;
+                    vm.MainWindow.IsLoadingIndicatorShown.Value = false;
                     ArchiveExtraction.Cleanup();
                     ArchiveExtraction.Cleanup();
                     return;
                     return;
                 case FileTypeResolver.LoadAbleFileType.Zip:
                 case FileTypeResolver.LoadAbleFileType.Zip:
                     vm.MainWindow.CurrentView.Value = vm.ImageViewer;
                     vm.MainWindow.CurrentView.Value = vm.ImageViewer;
                     await LoadPicFromArchiveAsync(check.Value.Data, vm, imageIterator).ConfigureAwait(false);
                     await LoadPicFromArchiveAsync(check.Value.Data, vm, imageIterator).ConfigureAwait(false);
-                    vm.IsLoading = false;
+                    vm.MainWindow.IsLoadingIndicatorShown.Value = false;
                     return;
                     return;
                 default:
                 default:
                     await ErrorHandling.ReloadAsync(vm).ConfigureAwait(false);
                     await ErrorHandling.ReloadAsync(vm).ConfigureAwait(false);
-                    vm.IsLoading = false;
+                    vm.MainWindow.IsLoadingIndicatorShown.Value = false;
                     ArchiveExtraction.Cleanup();
                     ArchiveExtraction.Cleanup();
                     return;
                     return;
             }
             }
@@ -164,7 +164,7 @@ public static class ImageLoader
     /// <param name="fileInfo">Optional: FileInfo object for the directory.</param>
     /// <param name="fileInfo">Optional: FileInfo object for the directory.</param>
     public static async Task LoadPicFromDirectoryAsync(string file, MainViewModel vm, FileInfo? fileInfo = null)
     public static async Task LoadPicFromDirectoryAsync(string file, MainViewModel vm, FileInfo? fileInfo = null)
     {
     {
-        vm.IsLoading = true;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = true;
         TitleManager.SetLoadingTitle(vm);
         TitleManager.SetLoadingTitle(vm);
 
 
         if (_cancellationTokenSource is not null)
         if (_cancellationTokenSource is not null)
@@ -233,7 +233,7 @@ public static class ImageLoader
             await _cancellationTokenSource.CancelAsync().ConfigureAwait(false);
             await _cancellationTokenSource.CancelAsync().ConfigureAwait(false);
         }
         }
 
 
-        vm.IsLoading = true;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = true;
         TitleManager.SetLoadingTitle(vm);
         TitleManager.SetLoadingTitle(vm);
 
 
         string? prevArchiveLocation = null;
         string? prevArchiveLocation = null;
@@ -368,7 +368,7 @@ public static class ImageLoader
         var imageModel = await GetImageModel.GetImageModelAsync(fileInfo).ConfigureAwait(false);
         var imageModel = await GetImageModel.GetImageModelAsync(fileInfo).ConfigureAwait(false);
         await UpdateImage.SetSingleImageAsync(imageModel.Image, imageModel.ImageType, url, vm);
         await UpdateImage.SetSingleImageAsync(imageModel.Image, imageModel.ImageType, url, vm);
 
 
-        vm.IsLoading = false;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         vm.PicViewer.FileInfo.Value = fileInfo;
         vm.PicViewer.FileInfo.Value = fileInfo;
         vm.PicViewer.ExifOrientation.Value = imageModel.EXIFOrientation;
         vm.PicViewer.ExifOrientation.Value = imageModel.EXIFOrientation;
         FileHistoryManager.Add(url);
         FileHistoryManager.Add(url);
@@ -390,7 +390,7 @@ public static class ImageLoader
     public static async Task LoadPicFromBase64Async(string base64, MainViewModel vm, ImageIterator imageIterator)
     public static async Task LoadPicFromBase64Async(string base64, MainViewModel vm, ImageIterator imageIterator)
     {
     {
         TitleManager.SetLoadingTitle(vm);
         TitleManager.SetLoadingTitle(vm);
-        vm.IsLoading = true;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = true;
         vm.PicViewer.ImageSource.Value = null;
         vm.PicViewer.ImageSource.Value = null;
         vm.PicViewer.FileInfo.Value = null;
         vm.PicViewer.FileInfo.Value = null;
 
 
@@ -425,7 +425,7 @@ public static class ImageLoader
                 await ErrorHandling.ReloadAsync(vm);
                 await ErrorHandling.ReloadAsync(vm);
             }
             }
         });
         });
-        vm.IsLoading = false;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = false;
     }
     }
 
 
     #endregion
     #endregion

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

@@ -110,7 +110,7 @@ public static class NavigationManager
             await WindowFunctions.ResizeAndFixRenderingError(vm);
             await WindowFunctions.ResizeAndFixRenderingError(vm);
         }
         }
 
 
-        vm.IsLoading = false;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         FileHistoryManager.Add(ImageIterator.ImagePaths[index].FullName);
         FileHistoryManager.Add(ImageIterator.ImagePaths[index].FullName);
         if (Settings.ImageScaling.ShowImageSideBySide)
         if (Settings.ImageScaling.ShowImageSideBySide)
         {
         {
@@ -130,7 +130,7 @@ public static class NavigationManager
     public static bool CanNavigate(MainViewModel vm) =>
     public static bool CanNavigate(MainViewModel vm) =>
         ImageIterator?.ImagePaths is not null &&
         ImageIterator?.ImagePaths is not null &&
         ImageIterator.ImagePaths.Count > 0 && !CropFunctions.IsCropping &&
         ImageIterator.ImagePaths.Count > 0 && !CropFunctions.IsCropping &&
-        !DialogManager.IsDialogOpen && vm is { IsEditableTitlebarOpen: false, PicViewer.FileInfo: not null };
+        !DialogManager.IsDialogOpen && vm is { MainWindow.IsLoadingIndicatorShown.Value: false, PicViewer.FileInfo: not null };
 
 
     /// <summary>
     /// <summary>
     ///     Navigates to the next or previous image based on the <paramref name="next" /> parameter.
     ///     Navigates to the next or previous image based on the <paramref name="next" /> parameter.

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

@@ -113,7 +113,7 @@ public static class UpdateImage
             UIHelper.GetToolTipMessage.IsVisible = false;
             UIHelper.GetToolTipMessage.IsVisible = false;
         }, DispatcherPriority.Send);
         }, DispatcherPriority.Send);
 
 
-        vm.IsLoading = false;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = false;
 
 
         if (Settings.ImageScaling.ShowImageSideBySide)
         if (Settings.ImageScaling.ShowImageSideBySide)
         {
         {

+ 6 - 6
src/PicView.Avalonia/SettingsManagement/SettingsUpdater.cs

@@ -76,19 +76,19 @@ public static class SettingsUpdater
             ? 0
             ? 0
             : SizeDefaults.BottombarHeight;
             : SizeDefaults.BottombarHeight;
         vm.PicViewer.IsShowingSideBySide.Value = Settings.ImageScaling.ShowImageSideBySide;
         vm.PicViewer.IsShowingSideBySide.Value = Settings.ImageScaling.ShowImageSideBySide;
-        vm.IsUIShown  = Settings.UIProperties.ShowInterface;
-        vm.IsTopToolbarShown  = Settings.UIProperties.ShowInterface;
-        vm.IsBottomToolbarShown   = Settings.UIProperties.ShowBottomNavBar &&
+        vm.MainWindow.IsUIShown.Value  = Settings.UIProperties.ShowInterface;
+        vm.MainWindow.IsTopToolbarShown.Value  = Settings.UIProperties.ShowInterface;
+        vm.MainWindow.IsBottomToolbarShown.Value   = Settings.UIProperties.ShowBottomNavBar &&
                                     Settings.UIProperties.ShowInterface;
                                     Settings.UIProperties.ShowInterface;
         vm.IsShowingTaskbarProgress  = Settings.UIProperties.IsTaskbarProgressEnabled;
         vm.IsShowingTaskbarProgress  = Settings.UIProperties.IsTaskbarProgressEnabled;
-        vm.IsFullscreen  = Settings.WindowProperties.Fullscreen;
+        vm.MainWindow.IsFullscreen.Value  = Settings.WindowProperties.Fullscreen;
         vm.IsAscending  = Settings.Sorting.Ascending;
         vm.IsAscending  = Settings.Sorting.Ascending;
         vm.MainWindow.BackgroundChoice.Value = Settings.UIProperties.BgColorChoice;
         vm.MainWindow.BackgroundChoice.Value = Settings.UIProperties.BgColorChoice;
     }
     }
     
     
     public static async Task ResetSettings(MainViewModel vm)
     public static async Task ResetSettings(MainViewModel vm)
     {
     {
-        vm.IsLoading = true;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = true;
 
 
         try
         try
         {
         {
@@ -144,7 +144,7 @@ public static class SettingsUpdater
         finally
         finally
         {
         {
             TitleManager.SetTitle(vm);
             TitleManager.SetTitle(vm);
-            vm.IsLoading = false;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         }
         }
     }
     }
 
 

+ 6 - 6
src/PicView.Avalonia/StartUp/QuickLoad.cs

@@ -35,14 +35,14 @@ public static class QuickLoad
         var fileInfo = new FileInfo(file);
         var fileInfo = new FileInfo(file);
         if (!fileInfo.Exists) // If not file, try to load if URL, base64 or directory
         if (!fileInfo.Exists) // If not file, try to load if URL, base64 or directory
         {
         {
-            vm.IsLoading = true;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = true;
             await NavigationManager.LoadPicFromStringAsync(file, vm).ConfigureAwait(false);
             await NavigationManager.LoadPicFromStringAsync(file, vm).ConfigureAwait(false);
             return;
             return;
         }
         }
 
 
         if (file.IsArchive()) // Handle if file exist and is an archive
         if (file.IsArchive()) // Handle if file exist and is an archive
         {
         {
-            vm.IsLoading = true;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = true;
             await NavigationManager.LoadPicFromArchiveAsync(file, vm).ConfigureAwait(false);
             await NavigationManager.LoadPicFromArchiveAsync(file, vm).ConfigureAwait(false);
             return;
             return;
         }
         }
@@ -54,7 +54,7 @@ public static class QuickLoad
         if (isLargeImage || Settings.ImageScaling.ShowImageSideBySide)
         if (isLargeImage || Settings.ImageScaling.ShowImageSideBySide)
         {
         {
             // Don't show loading indicator if image is too small
             // Don't show loading indicator if image is too small
-            vm.IsLoading = true;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = true;
         }
         }
 
 
         if (Settings.ImageScaling.ShowImageSideBySide)
         if (Settings.ImageScaling.ShowImageSideBySide)
@@ -66,7 +66,7 @@ public static class QuickLoad
             await SingeImageLoadingAsync(vm, fileInfo, magickImage).ConfigureAwait(false);
             await SingeImageLoadingAsync(vm, fileInfo, magickImage).ConfigureAwait(false);
         }
         }
 
 
-        vm.IsLoading = false;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         vm.GetIndex = NavigationManager.GetNonZeroIndex;
         vm.GetIndex = NavigationManager.GetNonZeroIndex;
     }
     }
 
 
@@ -121,7 +121,7 @@ public static class QuickLoad
 
 
         var imageModel = await GetImageModel.GetImageModelAsync(fileInfo, magickImage).ConfigureAwait(false);
         var imageModel = await GetImageModel.GetImageModelAsync(fileInfo, magickImage).ConfigureAwait(false);
         SetPicViewerValues(vm, imageModel, fileInfo);
         SetPicViewerValues(vm, imageModel, fileInfo);
-        vm.IsLoading = false;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         if (!Settings.WindowProperties.AutoFit)
         if (!Settings.WindowProperties.AutoFit)
         {
         {
             await Dispatcher.UIThread.InvokeAsync(
             await Dispatcher.UIThread.InvokeAsync(
@@ -278,7 +278,7 @@ public static class QuickLoad
         if (Settings.Gallery.IsBottomGalleryShown)
         if (Settings.Gallery.IsBottomGalleryShown)
         {
         {
             bool loadGallery;
             bool loadGallery;
-            if (!vm.IsUIShown)
+            if (!vm.MainWindow.IsLoadingIndicatorShown.CurrentValue)
             {
             {
                 loadGallery = Settings.Gallery.ShowBottomGalleryInHiddenUI;
                 loadGallery = Settings.Gallery.ShowBottomGalleryInHiddenUI;
             }
             }

+ 6 - 4
src/PicView.Avalonia/StartUp/StartUpHelper.cs

@@ -133,6 +133,8 @@ public static class StartUpHelper
             SettingsUpdater.ValidateGallerySettings(vm, settingsExists);
             SettingsUpdater.ValidateGallerySettings(vm, settingsExists);
         });
         });
         
         
+        vm.MainWindow.LayoutButtonSubscription();
+        
         // Need to delay setting fullscreen or maximized until after the window is shown to select the correct monitor
         // Need to delay setting fullscreen or maximized until after the window is shown to select the correct monitor
         if (Settings.WindowProperties.Maximized && !Settings.WindowProperties.Fullscreen)
         if (Settings.WindowProperties.Maximized && !Settings.WindowProperties.Fullscreen)
         {
         {
@@ -263,8 +265,8 @@ public static class StartUpHelper
         vm.GlobalSettings.IsAutoFit.Value = false;
         vm.GlobalSettings.IsAutoFit.Value = false;
         if (Settings.UIProperties.ShowInterface)
         if (Settings.UIProperties.ShowInterface)
         {
         {
-            vm.IsTopToolbarShown = true;
-            vm.IsBottomToolbarShown = Settings.UIProperties.ShowBottomNavBar;
+            vm.MainWindow.IsTopToolbarShown.Value = true;
+            vm.MainWindow.IsBottomToolbarShown.Value = Settings.UIProperties.ShowBottomNavBar;
         }
         }
         WindowFunctions.InitializeWindowSizeAndPosition(window);
         WindowFunctions.InitializeWindowSizeAndPosition(window);
     }
     }
@@ -276,8 +278,8 @@ public static class StartUpHelper
         vm.GlobalSettings.IsAutoFit.Value = true;
         vm.GlobalSettings.IsAutoFit.Value = true;
         if (Settings.UIProperties.ShowInterface)
         if (Settings.UIProperties.ShowInterface)
         {
         {
-            vm.IsTopToolbarShown = true;
-            vm.IsBottomToolbarShown = Settings.UIProperties.ShowBottomNavBar;
+            vm.MainWindow.IsTopToolbarShown.Value = true;
+            vm.MainWindow.IsBottomToolbarShown.Value = Settings.UIProperties.ShowBottomNavBar;
         }
         }
         window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
         window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
     }
     }

+ 8 - 8
src/PicView.Avalonia/UI/HideInterfaceLogic.cs

@@ -20,10 +20,10 @@ public static class HideInterfaceLogic
     {
     {
         if (Settings.UIProperties.ShowInterface)
         if (Settings.UIProperties.ShowInterface)
         {
         {
-            vm.IsUIShown = false;
+            vm.MainWindow.IsUIShown.Value = false;
             Settings.UIProperties.ShowInterface = false;
             Settings.UIProperties.ShowInterface = false;
-            vm.IsTopToolbarShown = false;
-            vm.IsBottomToolbarShown = false;
+            vm.MainWindow.IsTopToolbarShown.Value = false;
+            vm.MainWindow.IsBottomToolbarShown.Value = false;
             vm.Translation.IsShowingUI.Value = TranslationManager.Translation.ShowUI;
             vm.Translation.IsShowingUI.Value = TranslationManager.Translation.ShowUI;
             if (!GalleryFunctions.IsFullGalleryOpen)
             if (!GalleryFunctions.IsFullGalleryOpen)
             {
             {
@@ -47,12 +47,12 @@ public static class HideInterfaceLogic
         }
         }
         else
         else
         {
         {
-            vm.IsUIShown = true;
-            vm.IsTopToolbarShown = true;
+            vm.MainWindow.IsUIShown.Value = true;
+            vm.MainWindow.IsTopToolbarShown.Value = true;
             vm.Translation.IsShowingUI.Value = TranslationManager.Translation.HideUI;
             vm.Translation.IsShowingUI.Value = TranslationManager.Translation.HideUI;
             if (Settings.UIProperties.ShowBottomNavBar)
             if (Settings.UIProperties.ShowBottomNavBar)
             {
             {
-                vm.IsBottomToolbarShown = true;
+                vm.MainWindow.IsBottomToolbarShown.Value = true;
                 vm.MainWindow.BottombarHeight.Value = SizeDefaults.BottombarHeight;
                 vm.MainWindow.BottombarHeight.Value = SizeDefaults.BottombarHeight;
             }
             }
             Settings.UIProperties.ShowInterface = true;
             Settings.UIProperties.ShowInterface = true;
@@ -97,13 +97,13 @@ public static class HideInterfaceLogic
     {
     {
         if (Settings.UIProperties.ShowBottomNavBar)
         if (Settings.UIProperties.ShowBottomNavBar)
         {
         {
-            vm.IsBottomToolbarShown = false;
+            vm.MainWindow.IsBottomToolbarShown.Value = false;
             Settings.UIProperties.ShowBottomNavBar = false;
             Settings.UIProperties.ShowBottomNavBar = false;
             vm.Translation.IsShowingBottomToolbar.Value = TranslationManager.Translation.ShowBottomToolbar;
             vm.Translation.IsShowingBottomToolbar.Value = TranslationManager.Translation.ShowBottomToolbar;
         }
         }
         else
         else
         {
         {
-            vm.IsBottomToolbarShown = true;
+            vm.MainWindow.IsBottomToolbarShown.Value = true;
             Settings.UIProperties.ShowBottomNavBar = true;
             Settings.UIProperties.ShowBottomNavBar = true;
             vm.MainWindow.BottombarHeight.Value = SizeDefaults.BottombarHeight;
             vm.MainWindow.BottombarHeight.Value = SizeDefaults.BottombarHeight;
             vm.Translation.IsShowingBottomToolbar.Value = TranslationManager.Translation.HideBottomToolbar;
             vm.Translation.IsShowingBottomToolbar.Value = TranslationManager.Translation.HideBottomToolbar;

+ 2 - 72
src/PicView.Avalonia/ViewModels/MainViewModel.cs

@@ -288,29 +288,7 @@ public class MainViewModel : ReactiveObject
         set => this.RaiseAndSetIfChanged(ref field, value);
         set => this.RaiseAndSetIfChanged(ref field, value);
     }
     }
 
 
-    public bool IsLoading
-    {
-        get;
-        set => this.RaiseAndSetIfChanged(ref field, value);
-    }
-
-    public bool IsUIShown
-    {
-        get;
-        set => this.RaiseAndSetIfChanged(ref field, value);
-    }
-
-    public bool IsTopToolbarShown
-    {
-        get;
-        set => this.RaiseAndSetIfChanged(ref field, value);
-    }
 
 
-    public bool IsBottomToolbarShown
-    {
-        get;
-        set => this.RaiseAndSetIfChanged(ref field, value);
-    }
 
 
     public bool IsShowingTaskbarProgress
     public bool IsShowingTaskbarProgress
     {
     {
@@ -318,51 +296,7 @@ public class MainViewModel : ReactiveObject
         set => this.RaiseAndSetIfChanged(ref field, value);
         set => this.RaiseAndSetIfChanged(ref field, value);
     }
     }
 
 
-    public bool IsFullscreen
-    {
-        get;
-        set
-        {
-            this.RaiseAndSetIfChanged(ref field, value);
-            ShouldRestore = IsFullscreen || IsMaximized;
-            ShouldMaximizeBeShown = !IsFullscreen && !IsMaximized;
-        }
-    }
-
-    public bool IsMaximized
-    {
-        get;
-        set
-        {
-            this.RaiseAndSetIfChanged(ref field, value);
-            ShouldRestore = IsFullscreen || IsMaximized;
-            ShouldMaximizeBeShown = !IsFullscreen && !IsMaximized;
-        }
-    }
-
-    public bool ShouldRestore
-    {
-        get;
-        set => this.RaiseAndSetIfChanged(ref field, value);
-    }
-
-    public bool ShouldMaximizeBeShown
-    {
-        get;
-        set => this.RaiseAndSetIfChanged(ref field, value);
-    } = true;
-
-
-
-
-
-
-
-    public bool IsEditableTitlebarOpen
-    {
-        get;
-        set => this.RaiseAndSetIfChanged(ref field, value);
-    }
+ 
 
 
 
 
 
 
@@ -382,11 +316,7 @@ public class MainViewModel : ReactiveObject
         set => this.RaiseAndSetIfChanged(ref field, value);
         set => this.RaiseAndSetIfChanged(ref field, value);
     }
     }
 
 
-    public double TitleMaxWidth
-    {
-        get;
-        set => this.RaiseAndSetIfChanged(ref field, value);
-    }
+
 
 
 
 
 
 

+ 41 - 1
src/PicView.Avalonia/ViewModels/MainWindowViewModel.cs

@@ -1,6 +1,7 @@
 using Avalonia;
 using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Controls;
 using Avalonia.Media;
 using Avalonia.Media;
+using PicView.Avalonia.UI;
 using R3;
 using R3;
 
 
 namespace PicView.Avalonia.ViewModels;
 namespace PicView.Avalonia.ViewModels;
@@ -40,6 +41,39 @@ public class MainWindowViewModel : IDisposable
     public BindableReactiveProperty<bool> IsSettingsMenuVisible { get; } = new();
     public BindableReactiveProperty<bool> IsSettingsMenuVisible { get; } = new();
 
 
     public BindableReactiveProperty<bool> IsToolsMenuVisible { get; } = new();
     public BindableReactiveProperty<bool> IsToolsMenuVisible { get; } = new();
+    
+    public BindableReactiveProperty<double> TitleMaxWidth { get; } = new();
+    
+    public BindableReactiveProperty<bool> IsFullscreen { get; } = new();
+
+    public BindableReactiveProperty<bool> IsMaximized { get; } = new();
+
+    public BindableReactiveProperty<bool> ShouldRestore { get; } = new();
+
+    public BindableReactiveProperty<bool> ShouldMaximizeBeShown { get; } = new(true);
+
+    public BindableReactiveProperty<bool> IsLoadingIndicatorShown { get; } = new();
+
+    public BindableReactiveProperty<bool> IsUIShown { get; } = new();
+    public BindableReactiveProperty<bool> IsTopToolbarShown { get; } = new();
+
+    public BindableReactiveProperty<bool> IsBottomToolbarShown { get; } = new();
+
+    public BindableReactiveProperty<bool> IsEditableTitlebarOpen { get; } = new();
+
+    public void LayoutButtonSubscription()
+    {
+        Observable.EveryValueChanged(this, x => x.IsMaximized.CurrentValue, UIHelper.GetFrameProvider)
+            .Subscribe(_ => SetButtonValues());
+        Observable.EveryValueChanged(this, x => x.IsFullscreen.CurrentValue, UIHelper.GetFrameProvider)
+            .Subscribe(_ => SetButtonValues());
+    }
+
+    private void SetButtonValues()
+    {
+        ShouldRestore.Value = IsFullscreen.CurrentValue || IsMaximized.CurrentValue;
+        ShouldMaximizeBeShown.Value = !IsFullscreen.CurrentValue && !IsMaximized.CurrentValue;
+    }
 
 
     public void Dispose()
     public void Dispose()
     {
     {
@@ -55,6 +89,12 @@ public class MainWindowViewModel : IDisposable
             BottombarHeight,
             BottombarHeight,
             SizeToContent,
             SizeToContent,
             CanResize,
             CanResize,
-            CurrentView);
+            CurrentView,
+            TitleMaxWidth,
+            IsLoadingIndicatorShown,
+            IsUIShown,
+            IsTopToolbarShown,
+            IsBottomToolbarShown,
+            IsEditableTitlebarOpen);
     }
     }
 }
 }

+ 2 - 2
src/PicView.Avalonia/Views/AppearanceView.axaml

@@ -378,7 +378,7 @@
             <StackPanel Orientation="Horizontal">
             <StackPanel Orientation="Horizontal">
                 <Image
                 <Image
                     Height="18"
                     Height="18"
-                    IsVisible="{CompiledBinding IsUIShown}"
+                    IsVisible="{CompiledBinding MainWindow.IsUIShown.Value}"
                     Margin="10,0,10,0"
                     Margin="10,0,10,0"
                     Width="18">
                     Width="18">
                     <Image.Source>
                     <Image.Source>
@@ -435,7 +435,7 @@
                 </Image>
                 </Image>
                 <Image
                 <Image
                     Height="18"
                     Height="18"
-                    IsVisible="{CompiledBinding !IsUIShown}"
+                    IsVisible="{CompiledBinding !MainWindow.IsUIShown.Value}"
                     Margin="10,0,10,0"
                     Margin="10,0,10,0"
                     Width="18">
                     Width="18">
                     <DrawingImage>
                     <DrawingImage>

+ 1 - 1
src/PicView.Avalonia/Views/BottomBar.axaml

@@ -1,6 +1,6 @@
 <UserControl
 <UserControl
     Height="{CompiledBinding MainWindow.BottombarHeight.Value}"
     Height="{CompiledBinding MainWindow.BottombarHeight.Value}"
-    IsVisible="{CompiledBinding IsBottomToolbarShown}"
+    IsVisible="{CompiledBinding MainWindow.IsBottomToolbarShown.Value}"
     Margin="{CompiledBinding MainWindow.BottomScreenMargin.Value,
     Margin="{CompiledBinding MainWindow.BottomScreenMargin.Value,
                              Mode=OneWay}"
                              Mode=OneWay}"
     x:Class="PicView.Avalonia.Views.BottomBar"
     x:Class="PicView.Avalonia.Views.BottomBar"

+ 1 - 1
src/PicView.Avalonia/Views/EffectsView.axaml

@@ -89,7 +89,7 @@
     <Panel>
     <Panel>
         <uc:SpinWaiter
         <uc:SpinWaiter
             HorizontalAlignment="Center"
             HorizontalAlignment="Center"
-            IsVisible="{CompiledBinding IsLoading,
+            IsVisible="{CompiledBinding MainWindow.IsLoadingIndicatorShown.Value,
                                         Mode=OneWay}"
                                         Mode=OneWay}"
             VerticalAlignment="Center"
             VerticalAlignment="Center"
             x:Name="SpinWaiter" />
             x:Name="SpinWaiter" />

+ 3 - 3
src/PicView.Avalonia/Views/EffectsView.axaml.cs

@@ -240,7 +240,7 @@ public partial class EffectsView : UserControl
         MainViewModel? vm = null;
         MainViewModel? vm = null;
         await Dispatcher.UIThread.InvokeAsync(() => { vm = DataContext as MainViewModel; });
         await Dispatcher.UIThread.InvokeAsync(() => { vm = DataContext as MainViewModel; });
 
 
-        vm.IsLoading = true;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = true;
 
 
         try
         try
         {
         {
@@ -254,7 +254,7 @@ public partial class EffectsView : UserControl
         }
         }
         finally
         finally
         {
         {
-            vm.IsLoading = false;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         }
         }
     }
     }
 
 
@@ -387,7 +387,7 @@ public partial class EffectsView : UserControl
     {
     {
         if (DataContext is MainViewModel vm)
         if (DataContext is MainViewModel vm)
         {
         {
-            vm.IsLoading = false;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         }
         }
 
 
         _disposables.Dispose();
         _disposables.Dispose();

+ 9 - 9
src/PicView.Avalonia/Views/MainView.axaml

@@ -417,7 +417,7 @@
                     Command="{CompiledBinding ToggleUICommand}"
                     Command="{CompiledBinding ToggleUICommand}"
                     Header="{CompiledBinding Translation.IsShowingUI.Value,
                     Header="{CompiledBinding Translation.IsShowingUI.Value,
                                              Mode=OneWay}"
                                              Mode=OneWay}"
-                    IsVisible="{CompiledBinding IsUIShown,
+                    IsVisible="{CompiledBinding MainWindow.IsUIShown.Value,
                                                 Mode=OneWay}">
                                                 Mode=OneWay}">
                     <MenuItem.Icon>
                     <MenuItem.Icon>
                         <Image
                         <Image
@@ -431,7 +431,7 @@
                     Command="{CompiledBinding ToggleUICommand}"
                     Command="{CompiledBinding ToggleUICommand}"
                     Header="{CompiledBinding Translation.IsShowingUI.Value,
                     Header="{CompiledBinding Translation.IsShowingUI.Value,
                                              Mode=OneWay}"
                                              Mode=OneWay}"
-                    IsVisible="{CompiledBinding !IsUIShown,
+                    IsVisible="{CompiledBinding !MainWindow.IsUIShown.Value,
                                                 Mode=OneWay}">
                                                 Mode=OneWay}">
                     <MenuItem.Icon>
                     <MenuItem.Icon>
                         <Image
                         <Image
@@ -480,8 +480,8 @@
                     Command="{CompiledBinding ToggleBottomNavBarCommand}"
                     Command="{CompiledBinding ToggleBottomNavBarCommand}"
                     Header="{CompiledBinding Translation.ShowBottomToolbar.Value,
                     Header="{CompiledBinding Translation.ShowBottomToolbar.Value,
                                              Mode=OneWay}"
                                              Mode=OneWay}"
-                    IsChecked="{CompiledBinding IsBottomToolbarShown}"
-                    IsVisible="{CompiledBinding !IsBottomToolbarShown}"
+                    IsChecked="{CompiledBinding MainWindow.IsBottomToolbarShown.Value}"
+                    IsVisible="{CompiledBinding !MainWindow.IsBottomToolbarShown.Value}"
                     ToggleType="CheckBox">
                     ToggleType="CheckBox">
                     <MenuItem.Icon>
                     <MenuItem.Icon>
                         <Image
                         <Image
@@ -1019,7 +1019,7 @@
                 Command="{CompiledBinding ToggleFullscreenCommand}"
                 Command="{CompiledBinding ToggleFullscreenCommand}"
                 Header="{CompiledBinding Translation.Fullscreen.Value,
                 Header="{CompiledBinding Translation.Fullscreen.Value,
                                          Mode=OneWay}"
                                          Mode=OneWay}"
-                IsVisible="{CompiledBinding !IsFullscreen,
+                IsVisible="{CompiledBinding !MainWindow.IsFullscreen.Value,
                                             Mode=OneWay}">
                                             Mode=OneWay}">
                 <MenuItem.Icon>
                 <MenuItem.Icon>
                     <Path
                     <Path
@@ -1036,7 +1036,7 @@
                 Command="{CompiledBinding MaximizeCommand}"
                 Command="{CompiledBinding MaximizeCommand}"
                 Header="{CompiledBinding Translation.Maximize.Value,
                 Header="{CompiledBinding Translation.Maximize.Value,
                                          Mode=OneWay}"
                                          Mode=OneWay}"
-                IsVisible="{CompiledBinding ShouldMaximizeBeShown,
+                IsVisible="{CompiledBinding MainWindow.ShouldMaximizeBeShown.Value,
                                             Mode=OneWay}"
                                             Mode=OneWay}"
                 x:Name="MaximizeMenuItem">
                 x:Name="MaximizeMenuItem">
                 <MenuItem.Icon>
                 <MenuItem.Icon>
@@ -1053,7 +1053,7 @@
                 Command="{CompiledBinding RestoreCommand}"
                 Command="{CompiledBinding RestoreCommand}"
                 Header="{CompiledBinding Translation.RestoreDown.Value,
                 Header="{CompiledBinding Translation.RestoreDown.Value,
                                          Mode=OneWay}"
                                          Mode=OneWay}"
-                IsVisible="{CompiledBinding ShouldRestore,
+                IsVisible="{CompiledBinding MainWindow.ShouldRestore.Value,
                                             Mode=OneWay}">
                                             Mode=OneWay}">
                 <MenuItem.Icon>
                 <MenuItem.Icon>
                     <Path
                     <Path
@@ -1083,7 +1083,7 @@
     <Panel x:Name="MainGrid">
     <Panel x:Name="MainGrid">
         <uc:SpinWaiter
         <uc:SpinWaiter
             HorizontalAlignment="Center"
             HorizontalAlignment="Center"
-            IsVisible="{CompiledBinding IsLoading,
+            IsVisible="{CompiledBinding MainWindow.IsLoadingIndicatorShown.Value,
                                         Mode=OneWay}"
                                         Mode=OneWay}"
             VerticalAlignment="Center"
             VerticalAlignment="Center"
             ZIndex="3" />
             ZIndex="3" />
@@ -1107,7 +1107,7 @@
             Background="Transparent"
             Background="Transparent"
             Height="150"
             Height="150"
             HorizontalAlignment="Right"
             HorizontalAlignment="Right"
-            IsVisible="{CompiledBinding !IsUIShown}"
+            IsVisible="{CompiledBinding !MainWindow.IsUIShown.Value}"
             Margin="{CompiledBinding MainWindow.RightControlOffSetMargin.Value}"
             Margin="{CompiledBinding MainWindow.RightControlOffSetMargin.Value}"
             Opacity="0"
             Opacity="0"
             Orientation="Horizontal"
             Orientation="Horizontal"

+ 2 - 2
src/PicView.Avalonia/Views/MainView.axaml.cs

@@ -137,12 +137,12 @@ public partial class MainView : UserControl
             return;
             return;
         }
         }
 
 
-        if (!vm.IsEditableTitlebarOpen)
+        if (!vm.MainWindow.IsEditableTitlebarOpen.Value)
         {
         {
             return;
             return;
         }
         }
 
 
-        vm.IsEditableTitlebarOpen = false;
+        vm.MainWindow.IsEditableTitlebarOpen.Value = false;
         MainKeyboardShortcuts.IsKeysEnabled = true;
         MainKeyboardShortcuts.IsKeysEnabled = true;
         Focus();
         Focus();
     }
     }

+ 0 - 1
src/PicView.Avalonia/Views/SettingsView.axaml.cs

@@ -93,7 +93,6 @@ public partial class SettingsView : UserControl
                     0, vm.GlobalSettings.RotationAngle.CurrentValue, vm);
                     0, vm.GlobalSettings.RotationAngle.CurrentValue, vm);
                 WindowFunctions.CenterWindowOnScreen();
                 WindowFunctions.CenterWindowOnScreen();
             }).AddTo(_marginSubscription);
             }).AddTo(_marginSubscription);
-        
     }
     }
 
 
     private void LoadInitialSettings()
     private void LoadInitialSettings()

+ 3 - 3
src/PicView.Avalonia/Views/StartUpMenu.axaml.cs

@@ -112,7 +112,7 @@ public partial class StartUpMenu : UserControl
         else if (Settings.WindowProperties.AutoFit)
         else if (Settings.WindowProperties.AutoFit)
         {
         {
             ShowIcon();
             ShowIcon();
-            vm.TitleMaxWidth = logoWidth;
+            vm.MainWindow.TitleMaxWidth.Value = logoWidth;
             return;
             return;
         }
         }
 
 
@@ -132,11 +132,11 @@ public partial class StartUpMenu : UserControl
 
 
         if (Settings.Zoom.ScrollEnabled)
         if (Settings.Zoom.ScrollEnabled)
         {
         {
-            vm.TitleMaxWidth = titleMaxWidth - SizeDefaults.ScrollbarSize;
+            vm.MainWindow.TitleMaxWidth.Value = titleMaxWidth - SizeDefaults.ScrollbarSize;
         }
         }
         else
         else
         {
         {
-            vm.TitleMaxWidth = titleMaxWidth;
+            vm.MainWindow.TitleMaxWidth.Value = titleMaxWidth;
         }
         }
         
         
         return;
         return;

+ 1 - 1
src/PicView.Avalonia/Views/UC/Buttons/AltClose.axaml

@@ -20,7 +20,7 @@
         DockPanel.Dock="Right"
         DockPanel.Dock="Right"
         Height="30"
         Height="30"
         HorizontalAlignment="Right"
         HorizontalAlignment="Right"
-        IsVisible="{CompiledBinding !IsUIShown}"
+        IsVisible="{CompiledBinding !MainWindow.IsUIShown.Value}"
         ToolTip.Tip="{CompiledBinding Translation.Close.Value,
         ToolTip.Tip="{CompiledBinding Translation.Close.Value,
                                       Mode=OneWay}"
                                       Mode=OneWay}"
         VerticalAlignment="Top"
         VerticalAlignment="Top"

+ 1 - 1
src/PicView.Avalonia/Views/UC/Buttons/AltMinimize.axaml

@@ -21,7 +21,7 @@
         DockPanel.Dock="Right"
         DockPanel.Dock="Right"
         Height="30"
         Height="30"
         HorizontalAlignment="Right"
         HorizontalAlignment="Right"
-        IsVisible="{CompiledBinding !IsUIShown}"
+        IsVisible="{CompiledBinding !MainWindow.IsUIShown.Value}"
         VerticalAlignment="Top"
         VerticalAlignment="Top"
         Width="35"
         Width="35"
         ZIndex="99"
         ZIndex="99"

+ 3 - 3
src/PicView.Avalonia/Views/UC/Buttons/AltRestore.axaml

@@ -21,7 +21,7 @@
         DockPanel.Dock="Right"
         DockPanel.Dock="Right"
         Height="30"
         Height="30"
         HorizontalAlignment="Right"
         HorizontalAlignment="Right"
-        IsVisible="{CompiledBinding !IsUIShown}"
+        IsVisible="{CompiledBinding !MainWindow.IsUIShown.Value}"
         VerticalAlignment="Top"
         VerticalAlignment="Top"
         Width="35"
         Width="35"
         ZIndex="99"
         ZIndex="99"
@@ -31,7 +31,7 @@
                 Data="{StaticResource FullscreenGeometry}"
                 Data="{StaticResource FullscreenGeometry}"
                 Fill="{DynamicResource MainTextColor}"
                 Fill="{DynamicResource MainTextColor}"
                 Height="12"
                 Height="12"
-                IsVisible="{CompiledBinding !IsFullscreen}"
+                IsVisible="{CompiledBinding !MainWindow.IsFullscreen.Value}"
                 Margin="0,0,0,3"
                 Margin="0,0,0,3"
                 Stretch="Fill"
                 Stretch="Fill"
                 Width="12" />
                 Width="12" />
@@ -39,7 +39,7 @@
                 Data="{StaticResource RestoreGeometry}"
                 Data="{StaticResource RestoreGeometry}"
                 Fill="{DynamicResource MainTextColor}"
                 Fill="{DynamicResource MainTextColor}"
                 Height="12"
                 Height="12"
-                IsVisible="{CompiledBinding IsFullscreen}"
+                IsVisible="{CompiledBinding MainWindow.IsFullscreen.Value}"
                 Margin="0,0,0,3"
                 Margin="0,0,0,3"
                 Stretch="Fill"
                 Stretch="Fill"
                 Width="12" />
                 Width="12" />

+ 1 - 1
src/PicView.Avalonia/Views/UC/Buttons/GalleryShortcut.axaml

@@ -2,7 +2,7 @@
     Background="Transparent"
     Background="Transparent"
     Height="210"
     Height="210"
     IsEnabled="{CompiledBinding !Gallery.IsBottomGalleryShown.Value}"
     IsEnabled="{CompiledBinding !Gallery.IsBottomGalleryShown.Value}"
-    IsVisible="{CompiledBinding !IsUIShown}"
+    IsVisible="{CompiledBinding !MainWindow.IsUIShown.Value}"
     Width="210"
     Width="210"
     d:DesignHeight="450"
     d:DesignHeight="450"
     d:DesignWidth="800"
     d:DesignWidth="800"

+ 3 - 3
src/PicView.Avalonia/Views/UC/EditableTitlebar.axaml

@@ -2,7 +2,7 @@
     Height="{CompiledBinding MainWindow.TitlebarHeight.Value,
     Height="{CompiledBinding MainWindow.TitlebarHeight.Value,
                              Mode=OneWay}"
                              Mode=OneWay}"
     ToolTip.Tip="{Binding PicViewer.TitleTooltip.Value, Mode=OneWay}"
     ToolTip.Tip="{Binding PicViewer.TitleTooltip.Value, Mode=OneWay}"
-    Width="{CompiledBinding TitleMaxWidth,
+    Width="{CompiledBinding MainWindow.TitleMaxWidth.Value,
                             Mode=OneWay}"
                             Mode=OneWay}"
     d:DesignHeight="450"
     d:DesignHeight="450"
     d:DesignWidth="800"
     d:DesignWidth="800"
@@ -23,7 +23,7 @@
             Height="{CompiledBinding MainWindow.TitlebarHeight.Value,
             Height="{CompiledBinding MainWindow.TitlebarHeight.Value,
                                      Mode=OneWay}"
                                      Mode=OneWay}"
             IsTabStop="False"
             IsTabStop="False"
-            IsVisible="{CompiledBinding !IsEditableTitlebarOpen}"
+            IsVisible="{CompiledBinding !MainWindow.IsEditableTitlebarOpen.Value}"
             Padding="0,7,0,5"
             Padding="0,7,0,5"
             Text="{CompiledBinding PicViewer.Title.Value,
             Text="{CompiledBinding PicViewer.Title.Value,
                                    Mode=OneWay}"
                                    Mode=OneWay}"
@@ -34,7 +34,7 @@
         <Border
         <Border
             BorderBrush="{DynamicResource AccentColor}"
             BorderBrush="{DynamicResource AccentColor}"
             BorderThickness="1"
             BorderThickness="1"
-            IsVisible="{CompiledBinding IsEditableTitlebarOpen}">
+            IsVisible="{CompiledBinding MainWindow.IsEditableTitlebarOpen.Value}">
             <customControls:FuncTextBox
             <customControls:FuncTextBox
                 FontFamily="avares://PicView.Avalonia/Assets/Fonts/Roboto-Medium.ttf#Roboto"
                 FontFamily="avares://PicView.Avalonia/Assets/Fonts/Roboto-Medium.ttf#Roboto"
                 FontSize="13"
                 FontSize="13"

+ 10 - 10
src/PicView.Avalonia/Views/UC/EditableTitlebar.axaml.cs

@@ -25,12 +25,12 @@ public partial class EditableTitlebar : UserControl
     {
     {
         if (!UIHelper.TryGetMainViewModel(out var vm) ||
         if (!UIHelper.TryGetMainViewModel(out var vm) ||
             !e.GetCurrentPoint(this).Properties.IsRightButtonPressed ||
             !e.GetCurrentPoint(this).Properties.IsRightButtonPressed ||
-            vm.IsEditableTitlebarOpen)
+            vm.MainWindow.IsEditableTitlebarOpen.CurrentValue)
         {
         {
             return;
             return;
         }
         }
 
 
-        vm.IsEditableTitlebarOpen = true;
+        vm.MainWindow.IsEditableTitlebarOpen.Value = true;
         SelectFileName();
         SelectFileName();
     }
     }
 
 
@@ -41,7 +41,7 @@ public partial class EditableTitlebar : UserControl
             return;
             return;
         }
         }
 
 
-        Cursor = vm.IsEditableTitlebarOpen
+        Cursor = vm.MainWindow.IsEditableTitlebarOpen.CurrentValue
             ? new Cursor(StandardCursorType.Ibeam)
             ? new Cursor(StandardCursorType.Ibeam)
             : new Cursor(StandardCursorType.Arrow);
             : new Cursor(StandardCursorType.Arrow);
     }
     }
@@ -56,7 +56,7 @@ public partial class EditableTitlebar : UserControl
             return;
             return;
         }
         }
 
 
-        vm.IsEditableTitlebarOpen = false;
+        vm.MainWindow.IsEditableTitlebarOpen.Value = false;
         Cursor = new Cursor(StandardCursorType.Arrow);
         Cursor = new Cursor(StandardCursorType.Arrow);
         MainKeyboardShortcuts.IsKeysEnabled = true;
         MainKeyboardShortcuts.IsKeysEnabled = true;
         TextBlock.Text = vm.PicViewer.Title.CurrentValue;
         TextBlock.Text = vm.PicViewer.Title.CurrentValue;
@@ -69,7 +69,7 @@ public partial class EditableTitlebar : UserControl
             return;
             return;
         }
         }
 
 
-        if (!vm.IsEditableTitlebarOpen)
+        if (!vm.MainWindow.IsEditableTitlebarOpen.CurrentValue)
         {
         {
             e.Handled = true;
             e.Handled = true;
             return;
             return;
@@ -96,7 +96,7 @@ public partial class EditableTitlebar : UserControl
             return;
             return;
         }
         }
 
 
-        if (!vm.IsEditableTitlebarOpen)
+        if (!vm.MainWindow.IsEditableTitlebarOpen.CurrentValue)
         {
         {
             if (e.Key != Key.Escape)
             if (e.Key != Key.Escape)
             {
             {
@@ -121,8 +121,8 @@ public partial class EditableTitlebar : UserControl
                 MainKeyboardShortcuts.IsKeysEnabled = true;
                 MainKeyboardShortcuts.IsKeysEnabled = true;
                 if (isFileRenamed)
                 if (isFileRenamed)
                 {
                 {
-                    vm.IsLoading = false;
-                    vm.IsEditableTitlebarOpen = false;
+                    vm.MainWindow.IsLoadingIndicatorShown.Value = false;
+                    vm.MainWindow.IsEditableTitlebarOpen.Value = false;
                     await Dispatcher.UIThread.InvokeAsync(() =>
                     await Dispatcher.UIThread.InvokeAsync(() =>
                     {
                     {
                         TextBox.ClearSelection();
                         TextBox.ClearSelection();
@@ -142,7 +142,7 @@ public partial class EditableTitlebar : UserControl
     private async Task ShowFileExistsErrorAsync(MainViewModel vm)
     private async Task ShowFileExistsErrorAsync(MainViewModel vm)
     {
     {
         CloseTitlebar();
         CloseTitlebar();
-        vm.IsLoading = false;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         await TooltipHelper.ShowTooltipMessageAsync(TranslationManager.GetTranslation("FileAlreadyExistsError"), true);
         await TooltipHelper.ShowTooltipMessageAsync(TranslationManager.GetTranslation("FileAlreadyExistsError"), true);
     }
     }
 
 
@@ -161,7 +161,7 @@ public partial class EditableTitlebar : UserControl
         TextBox.SelectionStart = start;
         TextBox.SelectionStart = start;
         TextBox.SelectionEnd = end;
         TextBox.SelectionEnd = end;
 
 
-        vm.IsEditableTitlebarOpen = true;
+        vm.MainWindow.IsEditableTitlebarOpen.Value = true;
         Cursor = new Cursor(StandardCursorType.Ibeam);
         Cursor = new Cursor(StandardCursorType.Ibeam);
         TextBox.Focus();
         TextBox.Focus();
     }
     }

+ 1 - 1
src/PicView.Avalonia/Views/UC/TitleTextBox.axaml

@@ -1,6 +1,6 @@
 <UserControl
 <UserControl
     Background="{DynamicResource SecondaryBackgroundColor}"
     Background="{DynamicResource SecondaryBackgroundColor}"
-    MaxWidth="{CompiledBinding TitleMaxWidth,
+    MaxWidth="{CompiledBinding MainWindow.TitleMaxWidth.Value,
                                Mode=OneWay}"
                                Mode=OneWay}"
     d:DesignHeight="450"
     d:DesignHeight="450"
     d:DesignWidth="800"
     d:DesignWidth="800"

+ 1 - 1
src/PicView.Avalonia/Views/UC/ToolTipMessage.axaml

@@ -24,7 +24,7 @@
             Classes="txt"
             Classes="txt"
             FontFamily="/Assets/Fonts/Roboto-Bold.ttf#Roboto"
             FontFamily="/Assets/Fonts/Roboto-Bold.ttf#Roboto"
             FontSize="14"
             FontSize="14"
-            MaxWidth="{CompiledBinding TitleMaxWidth}"
+            MaxWidth="{CompiledBinding MainWindow.TitleMaxWidth.Value}"
             Padding="12"
             Padding="12"
             x:Name="ToolTipMessageText" />
             x:Name="ToolTipMessageText" />
     </Border>
     </Border>

+ 2 - 2
src/PicView.Avalonia/Wallpaper/WallpaperManager.cs

@@ -15,7 +15,7 @@ public static class WallpaperManager
             return;
             return;
         }
         }
         
         
-        vm.IsLoading = true;
+        vm.MainWindow.IsLoadingIndicatorShown.Value = true;
         try
         try
         {
         {
             var file = await ImageFormatConverter.ConvertToCommonSupportedFormatAsync(path, vm).ConfigureAwait(false);
             var file = await ImageFormatConverter.ConvertToCommonSupportedFormatAsync(path, vm).ConfigureAwait(false);
@@ -31,7 +31,7 @@ public static class WallpaperManager
         }
         }
         finally
         finally
         {
         {
-            vm.IsLoading = false;
+            vm.MainWindow.IsLoadingIndicatorShown.Value = false;
         }
         }
     }
     }
     
     

+ 1 - 1
src/PicView.Avalonia/WindowBehavior/WindowResizing.cs

@@ -99,7 +99,7 @@ public static class WindowResizing
 
 
     public static void SetSize(ImageSize size, MainViewModel vm)
     public static void SetSize(ImageSize size, MainViewModel vm)
     {
     {
-        vm.TitleMaxWidth = size.TitleMaxWidth;
+        vm.MainWindow.TitleMaxWidth.Value = size.TitleMaxWidth;
         vm.PicViewer.ImageWidth.Value = size.Width;
         vm.PicViewer.ImageWidth.Value = size.Width;
         vm.PicViewer.SecondaryImageWidth.Value = size.SecondaryWidth;
         vm.PicViewer.SecondaryImageWidth.Value = size.SecondaryWidth;
         vm.PicViewer.ImageHeight.Value = size.Height;
         vm.PicViewer.ImageHeight.Value = size.Height;