|
|
@@ -1,23 +1,22 @@
|
|
|
using Avalonia;
|
|
|
using Avalonia.Controls;
|
|
|
using Avalonia.Controls.ApplicationLifetimes;
|
|
|
-using Avalonia.Layout;
|
|
|
using Avalonia.Threading;
|
|
|
using PicView.Avalonia.Crop;
|
|
|
-using PicView.Avalonia.Gallery;
|
|
|
using PicView.Avalonia.Navigation;
|
|
|
using PicView.Avalonia.ViewModels;
|
|
|
using PicView.Avalonia.Views;
|
|
|
using PicView.Avalonia.Views.UC;
|
|
|
-using PicView.Avalonia.Views.UC.Menus;
|
|
|
using PicView.Avalonia.Views.UC.PopUps;
|
|
|
using PicView.Avalonia.WindowBehavior;
|
|
|
-using PicView.Core.Gallery;
|
|
|
|
|
|
namespace PicView.Avalonia.UI;
|
|
|
+
|
|
|
+/// <summary>
|
|
|
+/// Provides UI-related helper methods and properties
|
|
|
+/// </summary>
|
|
|
public static class UIHelper
|
|
|
{
|
|
|
- #region GetControls
|
|
|
|
|
|
public static bool IsDialogOpen { get; set; }
|
|
|
|
|
|
@@ -25,227 +24,104 @@ public static class UIHelper
|
|
|
public static Control? GetTitlebar { get; private set; }
|
|
|
public static EditableTitlebar? GetEditableTitlebar { get; private set; }
|
|
|
public static GalleryAnimationControlView? GetGalleryView { get; private set; }
|
|
|
-
|
|
|
public static BottomBar? GetBottomBar { get; private set; }
|
|
|
-
|
|
|
public static ToolTipMessage? GetToolTipMessage { get; private set; }
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// Sets up control references from the main desktop application
|
|
|
+ /// </summary>
|
|
|
public static void SetControls(IClassicDesktopStyleApplicationLifetime desktop)
|
|
|
{
|
|
|
- GetMainView = desktop.MainWindow.FindControl<MainView>("MainView");
|
|
|
- GetTitlebar = desktop.MainWindow.FindControl<Control>("Titlebar");
|
|
|
- GetEditableTitlebar = GetTitlebar.FindControl<EditableTitlebar>("EditableTitlebar");
|
|
|
- GetGalleryView = GetMainView.MainGrid.GetControl<GalleryAnimationControlView>("GalleryView");
|
|
|
- GetBottomBar = desktop.MainWindow.FindControl<BottomBar>("BottomBar");
|
|
|
- GetToolTipMessage = GetMainView.MainGrid.FindControl<ToolTipMessage>("ToolTipMessage");
|
|
|
- }
|
|
|
-
|
|
|
- #endregion
|
|
|
-
|
|
|
- #region Menus
|
|
|
-
|
|
|
- public static void AddMenus()
|
|
|
- {
|
|
|
- var mainView = GetMainView;
|
|
|
- var fileMenu = new FileMenu
|
|
|
- {
|
|
|
- VerticalAlignment = VerticalAlignment.Bottom,
|
|
|
- HorizontalAlignment = HorizontalAlignment.Center,
|
|
|
- Margin = new Thickness(0, 0, 120, 0),
|
|
|
- IsVisible = false
|
|
|
- };
|
|
|
-
|
|
|
- mainView.MainGrid.Children.Add(fileMenu);
|
|
|
-
|
|
|
- var imageMenu = new ImageMenu
|
|
|
- {
|
|
|
- VerticalAlignment = VerticalAlignment.Bottom,
|
|
|
- HorizontalAlignment = HorizontalAlignment.Center,
|
|
|
- Margin = new Thickness(0, 0, 63, 0),
|
|
|
- IsVisible = false
|
|
|
- };
|
|
|
-
|
|
|
- mainView.MainGrid.Children.Add(imageMenu);
|
|
|
-
|
|
|
- var settingsMenu = new SettingsMenu
|
|
|
- {
|
|
|
- VerticalAlignment = VerticalAlignment.Bottom,
|
|
|
- HorizontalAlignment = HorizontalAlignment.Center,
|
|
|
- Margin = new Thickness(0, 0, -75, 0),
|
|
|
- IsVisible = false
|
|
|
- };
|
|
|
-
|
|
|
- mainView.MainGrid.Children.Add(settingsMenu);
|
|
|
-
|
|
|
- var toolsMenu = new ToolsMenu
|
|
|
- {
|
|
|
- VerticalAlignment = VerticalAlignment.Bottom,
|
|
|
- HorizontalAlignment = HorizontalAlignment.Center,
|
|
|
- Margin = new Thickness(80, 0, 0, 0),
|
|
|
- IsVisible = false
|
|
|
- };
|
|
|
-
|
|
|
- mainView.MainGrid.Children.Add(toolsMenu);
|
|
|
+ GetMainView = desktop.MainWindow?.FindControl<MainView>("MainView");
|
|
|
+ GetTitlebar = desktop.MainWindow?.FindControl<Control>("Titlebar");
|
|
|
+ GetEditableTitlebar = GetTitlebar?.FindControl<EditableTitlebar>("EditableTitlebar");
|
|
|
+ GetGalleryView = GetMainView?.MainGrid.GetControl<GalleryAnimationControlView>("GalleryView");
|
|
|
+ GetBottomBar = desktop.MainWindow?.FindControl<BottomBar>("BottomBar");
|
|
|
+ GetToolTipMessage = GetMainView?.MainGrid.FindControl<ToolTipMessage>("ToolTipMessage");
|
|
|
}
|
|
|
|
|
|
- public static void CloseMenus(MainViewModel vm)
|
|
|
- {
|
|
|
- vm.IsFileMenuVisible = false;
|
|
|
- vm.IsImageMenuVisible = false;
|
|
|
- vm.IsSettingsMenuVisible = false;
|
|
|
- vm.IsToolsMenuVisible = false;
|
|
|
- }
|
|
|
+ #region Navigation buttons
|
|
|
|
|
|
- public static bool IsAnyMenuOpen(MainViewModel vm)
|
|
|
+ /// <summary>
|
|
|
+ /// Navigates to the next image using the bottom navigation button
|
|
|
+ /// </summary>
|
|
|
+ public static void NextButtonNavigation(MainViewModel vm)
|
|
|
{
|
|
|
- return vm.IsFileMenuVisible || vm.IsImageMenuVisible || vm.IsSettingsMenuVisible || vm.IsToolsMenuVisible;
|
|
|
+ SetButtonIntervalAndNavigate(GetBottomBar?.NextButton, true, false, vm);
|
|
|
}
|
|
|
-
|
|
|
- public static void ToggleFileMenu(MainViewModel vm)
|
|
|
- {
|
|
|
- if (IsDialogOpen)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
- vm.IsFileMenuVisible = !vm.IsFileMenuVisible;
|
|
|
- vm.IsImageMenuVisible = false;
|
|
|
- vm.IsSettingsMenuVisible = false;
|
|
|
- vm.IsToolsMenuVisible = false;
|
|
|
- }
|
|
|
-
|
|
|
- public static void ToggleImageMenu(MainViewModel vm)
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Navigates to the previous image using the bottom navigation button
|
|
|
+ /// </summary>
|
|
|
+ public static void PreviousButtonNavigation(MainViewModel vm)
|
|
|
{
|
|
|
- if (IsDialogOpen)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
- vm.IsFileMenuVisible = false;
|
|
|
- vm.IsImageMenuVisible = !vm.IsImageMenuVisible;
|
|
|
- vm.IsSettingsMenuVisible = false;
|
|
|
- vm.IsToolsMenuVisible = false;
|
|
|
+ SetButtonIntervalAndNavigate(GetBottomBar?.PreviousButton, false, false, vm);
|
|
|
}
|
|
|
-
|
|
|
- public static void ToggleSettingsMenu(MainViewModel vm)
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Navigates to the next image using the arrow button
|
|
|
+ /// </summary>
|
|
|
+ public static void NextArrowButtonNavigation(MainViewModel vm)
|
|
|
{
|
|
|
- if (IsDialogOpen)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
- vm.IsFileMenuVisible = false;
|
|
|
- vm.IsImageMenuVisible = false;
|
|
|
- vm.IsSettingsMenuVisible = !vm.IsSettingsMenuVisible;
|
|
|
- vm.IsToolsMenuVisible = false;
|
|
|
+ SetButtonIntervalAndNavigate(GetMainView?.ClickArrowRight?.PolyButton, true, true, vm);
|
|
|
}
|
|
|
-
|
|
|
- public static void ToggleToolsMenu(MainViewModel vm)
|
|
|
- {
|
|
|
- if (IsDialogOpen)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
- vm.IsFileMenuVisible = false;
|
|
|
- vm.IsImageMenuVisible = false;
|
|
|
- vm.IsSettingsMenuVisible = false;
|
|
|
- vm.IsToolsMenuVisible = !vm.IsToolsMenuVisible;
|
|
|
- }
|
|
|
-
|
|
|
- #endregion Menus
|
|
|
-
|
|
|
- #region Navigation
|
|
|
-
|
|
|
- public static async Task NavigateUp(MainViewModel? vm)
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Navigates to the previous image using the arrow button
|
|
|
+ /// </summary>
|
|
|
+ public static void PreviousArrowButtonNavigation(MainViewModel vm)
|
|
|
{
|
|
|
- if (vm is null)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (GalleryFunctions.IsFullGalleryOpen)
|
|
|
- {
|
|
|
- GalleryNavigation.NavigateGallery(Direction.Up, vm);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (vm.IsScrollingEnabled)
|
|
|
- {
|
|
|
- await Dispatcher.UIThread.InvokeAsync(() => { vm.ImageViewer.ImageScrollViewer.LineUp(); });
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- vm.ImageViewer.Rotate(true);
|
|
|
- }
|
|
|
+ SetButtonIntervalAndNavigate(GetMainView?.ClickArrowLeft?.PolyButton, false, true, vm);
|
|
|
}
|
|
|
|
|
|
- public static async Task NavigateDown(MainViewModel? vm)
|
|
|
+ private static void SetButtonIntervalAndNavigate(RepeatButton? button, bool isNext, bool isArrow, MainViewModel vm)
|
|
|
{
|
|
|
- if (vm is null)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (GalleryFunctions.IsFullGalleryOpen)
|
|
|
+ if (button != null)
|
|
|
{
|
|
|
- GalleryNavigation.NavigateGallery(Direction.Down, vm);
|
|
|
- return;
|
|
|
+ button.Interval = (int)TimeSpan.FromSeconds(Settings.UIProperties.NavSpeed).TotalMilliseconds;
|
|
|
}
|
|
|
|
|
|
- if (vm.IsScrollingEnabled)
|
|
|
- {
|
|
|
- vm.ImageViewer.ImageScrollViewer.LineDown();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- await Dispatcher.UIThread.InvokeAsync(() => { vm.ImageViewer.Rotate(false); });
|
|
|
- }
|
|
|
+ Task.Run(() => NavigationManager.NavigateAndPositionCursor(isNext, isArrow, vm));
|
|
|
}
|
|
|
|
|
|
- public static void Center(MainViewModel? vm)
|
|
|
- {
|
|
|
- if (vm is null)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
- if (GalleryFunctions.IsFullGalleryOpen)
|
|
|
- {
|
|
|
- GalleryFunctions.CenterGallery(vm);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- WindowFunctions.CenterWindowOnScreen();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- #endregion Navigation
|
|
|
+ #endregion
|
|
|
|
|
|
- #region Dialogs
|
|
|
+ #region Dialog Operations
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// Handles close action based on current application state
|
|
|
+ /// </summary>
|
|
|
public static async Task Close(MainViewModel vm)
|
|
|
{
|
|
|
- if (IsAnyMenuOpen(vm))
|
|
|
+ // Handle open menus
|
|
|
+ if (MenuManager.IsAnyMenuOpen(vm))
|
|
|
{
|
|
|
- CloseMenus(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;
|
|
|
@@ -255,16 +131,14 @@ public static class UIHelper
|
|
|
{
|
|
|
if (Settings.UIProperties.ShowConfirmationOnEsc)
|
|
|
{
|
|
|
- GetMainView.MainGrid.Children.Add(new CloseDialog());
|
|
|
+ GetMainView?.MainGrid.Children.Add(new CloseDialog());
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
desktop.MainWindow?.Close();
|
|
|
}
|
|
|
});
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
#endregion
|
|
|
-
|
|
|
-
|
|
|
-}
|
|
|
+}
|