using Avalonia; using Avalonia.Controls; using Avalonia.Input; using Avalonia.Input.Platform; using Avalonia.Interactivity; using Avalonia.Layout; using Avalonia.Platform.Storage; using Avalonia.VisualTree; using CVRManager.ViewModels; namespace CVRManager.Views; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var vm = new MainViewModel { PickFolder = async () => { var r = await StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions { AllowMultiple = false }); return r.Count > 0 ? r[0].TryGetLocalPath() : null; }, PickFiles = async () => { var r = await StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { AllowMultiple = true, FileTypeFilter = new[] { new FilePickerFileType("Mod files") { Patterns = new[] { "*.dll", "*.zip" } } }, }); return (IReadOnlyList)r.Select(f => f.TryGetLocalPath()).Where(p => p != null).Select(p => p!).ToList(); }, Confirm = ConfirmAsync, CopyImage = async path => { if (Clipboard == null) return; using var bmp = new Avalonia.Media.Imaging.Bitmap(path); await Clipboard.SetBitmapAsync(bmp); }, }; DataContext = vm; Opened += (_, _) => WindowIcons.Apply(this); HookInstallDrag(vm); } InstallVM? dragItem; Point dragStart; bool dragging; void HookInstallDrag(MainViewModel vm) { var list = InstallList; list.AddHandler(PointerPressedEvent, (_, e) => { if (!e.GetCurrentPoint(list).Properties.IsLeftButtonPressed) return; if ((e.Source as Visual)?.FindAncestorOfType