using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.Input; using Avalonia.Xaml.Interactions.DragAndDrop; using Photos.Models; using Photos.ViewModels; namespace Photos.Views; public partial class MainWindow : Window { private IFolderPickerService _folderPickerService; private int _currentImageIndex = 0; public MainWindow() { InitializeComponent(); _folderPickerService = new FolderPickerService(this); DataContext = new MainWindowViewModel(_folderPickerService); } public void DropHandler(object sender, DragEventArgs e) { (DataContext as MainWindowViewModel)?.WindowDropHandler(e); } private void OnKeyDownHandler(object sender, KeyEventArgs e) { if (DataContext is not MainWindowViewModel vm) return; async Task HandleEnter() { if (vm.IsPhotoFocused()) vm.UnfocusPhoto(); else await vm.TryFocusImage(_currentImageIndex); } void HandleEscape() { vm.UnfocusPhoto(); } async Task HandleArrowKey() { if(vm.IsPhotoFocused()) await vm.TryFocusImage(_currentImageIndex); // TODO: move basic selection } switch (e.Key) { case Key.Enter: HandleEnter().GetAwaiter(); break; case Key.Escape: HandleEscape(); break; case Key.Down: break; case Key.Left: if (_currentImageIndex > 0) { _currentImageIndex--; HandleArrowKey().GetAwaiter(); } break; case Key.Right: if (_currentImageIndex < vm.Photos.Count - 1) { _currentImageIndex++; HandleArrowKey().GetAwaiter(); } break; } } private void PointerEnteredPhotoHandler(object sender, PointerEventArgs e) { if (sender is not Image i || DataContext is not MainWindowViewModel vm) return; var idx = vm.GetImageIndex(i); if (idx == -1) return; _currentImageIndex = idx; } }