91 lines
2.8 KiB
C#
91 lines
2.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Threading.Tasks;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Interactivity;
|
|
using Avalonia.Platform.Storage;
|
|
using CommunityToolkit.Mvvm.Messaging;
|
|
using GazpromApp.Messages;
|
|
using GazpromApp.ViewModels;
|
|
|
|
namespace GazpromApp.Views;
|
|
|
|
public partial class MainWindow : Window
|
|
{
|
|
private bool _canClose = false;
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
|
|
if (Design.IsDesignMode)
|
|
return;
|
|
|
|
WeakReferenceMessenger.Default.Register<MainWindow, RequestImageMessage>(this, HandleImageSelection);
|
|
WeakReferenceMessenger.Default.Register<MainWindow, ViewImageMessage>(this, HandleImageViewer);
|
|
WeakReferenceMessenger.Default.Register<MainWindow, ErrorMessage>(this, HandleErrorViewer);
|
|
WeakReferenceMessenger.Default.Register<MainWindow, SaveChangesResult>(this, HandleSave);
|
|
}
|
|
|
|
private static void HandleImageSelection(MainWindow sender, RequestImageMessage msg)
|
|
{
|
|
var files = sender.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
|
|
{
|
|
AllowMultiple = true,
|
|
Title = "Выберите одну или несколько картинок",
|
|
FileTypeFilter = [FilePickerFileTypes.ImageAll]
|
|
});
|
|
|
|
msg.Reply(files);
|
|
}
|
|
|
|
private static void HandleImageViewer(MainWindow sender, ViewImageMessage msg)
|
|
{
|
|
var dialog = new ImageView
|
|
{
|
|
DataContext = msg.Image
|
|
};
|
|
msg.Reply(dialog.ShowDialog<ImageViewModel?>(sender));
|
|
}
|
|
|
|
private static void HandleErrorViewer(MainWindow sender, ErrorMessage msg)
|
|
{
|
|
var dialog = new ErrorView
|
|
{
|
|
DataContext = msg.Error
|
|
};
|
|
msg.Reply(dialog.ShowDialog<ErrorViewModel?>(sender));
|
|
}
|
|
|
|
private void TreeView_OnSelectionChanged(object? sender, SelectionChangedEventArgs e)
|
|
{
|
|
if (e.AddedItems.Count > 0)
|
|
WeakReferenceMessenger.Default.Send(new SelectionChangedMessage((ViewModelBase)e.AddedItems[0]!));
|
|
}
|
|
|
|
private void HandleSave(object sender, SaveChangesResult msg)
|
|
{
|
|
if (msg.Cancel) return;
|
|
if (msg.Save)
|
|
((MainWindowViewModel)DataContext!).SyncDbCommand.Execute(null);
|
|
ForceClose();
|
|
}
|
|
|
|
private void ForceClose()
|
|
{
|
|
_canClose = true;
|
|
Close();
|
|
}
|
|
|
|
private void Window_OnClosing(object? sender, WindowClosingEventArgs e)
|
|
{
|
|
if (_canClose) return;
|
|
if (!((MainWindowViewModel)DataContext!).CanSync) return;
|
|
var dialog = new SaveChangesView
|
|
{
|
|
DataContext = new SaveChangesViewModel()
|
|
};
|
|
dialog.ShowDialog<SaveChangesViewModel?>(this);
|
|
e.Cancel = true;
|
|
}
|
|
} |