82 lines
2.2 KiB
C#
82 lines
2.2 KiB
C#
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;
|
|
}
|
|
} |