diff --git a/ViewModels/EditPointDialogViewModel.cs b/ViewModels/EditPointDialogViewModel.cs index e4fa17f..6165a06 100644 --- a/ViewModels/EditPointDialogViewModel.cs +++ b/ViewModels/EditPointDialogViewModel.cs @@ -3,6 +3,7 @@ using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; +using System.Web; using Avalonia.Controls; using Avalonia.Media.Imaging; using Avalonia.Platform.Storage; @@ -17,8 +18,6 @@ namespace GazpromApp.ViewModels; public partial class EditPointDialogViewModel : ViewModelBase { - public ObservableCollection Images { get; set; } - [ObservableProperty] [NotifyCanExecuteChangedFor(nameof(CompleteEditCommand))] private string? _name; @@ -46,6 +45,8 @@ public partial class EditPointDialogViewModel : ViewModelBase IsDescriptionEditing = !IsDescriptionEditing; IsNameEditing = false; } + + public ObservableCollection Images { get; set; } [RelayCommand] private async Task AddImage(Window w) @@ -57,7 +58,7 @@ public partial class EditPointDialogViewModel : ViewModelBase FileTypeFilter = [FilePickerFileTypes.ImageAll], }); foreach (var file in files) - Images.Add(new ImageViewModel(new Image()) { FileName = new Bitmap(file.Path.AbsolutePath) }); + Images.Add(new ImageViewModel(new Image()) { FileName = new Bitmap(HttpUtility.UrlDecode(file.Path.AbsolutePath) ) }); IsImagesEmpty = Images.Count == 0; } @@ -70,7 +71,7 @@ public partial class EditPointDialogViewModel : ViewModelBase } [RelayCommand] - private async Task ViewImage(ImageViewModel image) + private static async Task ViewImage(ImageViewModel image) { _ = await WeakReferenceMessenger.Default.Send(new ViewImageMessage(image)); } @@ -80,6 +81,7 @@ public partial class EditPointDialogViewModel : ViewModelBase [RelayCommand(CanExecute = nameof(CanCompleteEdit))] private void CompleteEdit() { + IsClosed = true; Point point = new Point() { Name = Name, @@ -90,20 +92,33 @@ public partial class EditPointDialogViewModel : ViewModelBase } [RelayCommand] - private static void CancelEdit(Window w) + private void CancelEdit(Window w) { - w.Close(); + IsClosed = true; + WeakReferenceMessenger.Default.Send(new EditPointDone(_point)); } + // Visual and other properties + [ObservableProperty] private bool _isImagesEmpty; + [ObservableProperty] + private bool _isEquipmentEmpty = true; + + [ObservableProperty] + private bool _isClosed; + + private readonly PointViewModel _point; + public EditPointDialogViewModel() { Name = ""; Description = ""; Images = []; IsImagesEmpty = true; + + _point = new PointViewModel(new Point()); } public EditPointDialogViewModel(PointViewModel point) @@ -116,5 +131,7 @@ public partial class EditPointDialogViewModel : ViewModelBase Debug.WriteLine(imageViewModel.FileName); } IsImagesEmpty = Images.Count == 0; + + _point = point; } } \ No newline at end of file diff --git a/ViewModels/NewPointDialogViewModel.cs b/ViewModels/NewPointDialogViewModel.cs index dce3b81..7d1f0f4 100644 --- a/ViewModels/NewPointDialogViewModel.cs +++ b/ViewModels/NewPointDialogViewModel.cs @@ -2,6 +2,7 @@ using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; +using System.Web; using Avalonia.Controls; using Avalonia.Media.Imaging; using Avalonia.Platform.Storage; @@ -36,7 +37,7 @@ public partial class NewPointDialogViewModel : ViewModelBase FileTypeFilter = [FilePickerFileTypes.ImageAll], }); foreach (var file in files) - Images.Add(new ImageViewModel(new Image()) { FileName = new Bitmap(file.Path.AbsolutePath) }); + Images.Add(new ImageViewModel(new Image()) { FileName = new Bitmap(HttpUtility.UrlDecode(file.Path.AbsolutePath)) }); IsImagesEmpty = Images.Count == 0; } diff --git a/Views/EditPointDialog.axaml b/Views/EditPointDialog.axaml index 6ca598f..a88f379 100644 --- a/Views/EditPointDialog.axaml +++ b/Views/EditPointDialog.axaml @@ -10,12 +10,36 @@ x:DataType="vm:EditPointDialogViewModel" Title="Редактирование/просмотр объекта" Icon="/Assets/ic_fluent_edit_24_filled (Custom).png" - WindowStartupLocation="CenterOwner"> + WindowStartupLocation="CenterOwner" + Closing="Window_OnClosing" + Closed="Window_OnClosed"> - + + + + + + + + + - - - - - - diff --git a/Views/EditPointDialog.axaml.cs b/Views/EditPointDialog.axaml.cs index cd352ca..c0decfb 100644 --- a/Views/EditPointDialog.axaml.cs +++ b/Views/EditPointDialog.axaml.cs @@ -1,12 +1,16 @@ -using Avalonia.Controls; +using System; +using Avalonia.Controls; using CommunityToolkit.Mvvm.Messaging; using GazpromApp.Messages; +using GazpromApp.Models; using GazpromApp.ViewModels; namespace GazpromApp.Views; public partial class EditPointDialog : Window { + public Point? Point; + public EditPointDialog() { InitializeComponent(); @@ -14,6 +18,7 @@ public partial class EditPointDialog : Window if (Design.IsDesignMode) return; + // view image WeakReferenceMessenger.Default.Register(this, static (w, m) => { ImageView dialog = new ImageView() @@ -28,4 +33,15 @@ public partial class EditPointDialog : Window w.Close(m.Point); }); } + + private void Window_OnClosing(object? sender, WindowClosingEventArgs e) + { + if (DataContext is EditPointDialogViewModel { IsClosed: false } vm) + vm.CancelEditCommand.Execute(this); + } + + private void Window_OnClosed(object? sender, EventArgs e) + { + WeakReferenceMessenger.Default.Unregister(this); + } } \ No newline at end of file diff --git a/Views/MainWindow.axaml.cs b/Views/MainWindow.axaml.cs index 1e80732..c14c99e 100644 --- a/Views/MainWindow.axaml.cs +++ b/Views/MainWindow.axaml.cs @@ -27,7 +27,8 @@ public partial class MainWindow : Window { EditPointDialog dialog = new EditPointDialog() { - DataContext = new EditPointDialogViewModel(m.Point) + DataContext = new EditPointDialogViewModel(m.Point), + Point = m.Point.GetPoint() }; m.Reply(dialog.ShowDialog(w)); }); diff --git a/obj/Debug/net8.0/Avalonia/Resources.Inputs.cache b/obj/Debug/net8.0/Avalonia/Resources.Inputs.cache index 722a096..fffacf8 100644 --- a/obj/Debug/net8.0/Avalonia/Resources.Inputs.cache +++ b/obj/Debug/net8.0/Avalonia/Resources.Inputs.cache @@ -1 +1 @@ -99754bb29314deb0062acd8eb2e60c354c5dca2595b078551064b5cbb81f0742 +288757c38000c6b91b144251be635a8c5a7164190b6b87d309783f2ccc53212a diff --git a/obj/Debug/net8.0/Avalonia/resources b/obj/Debug/net8.0/Avalonia/resources index 3f32400..6cc842e 100644 Binary files a/obj/Debug/net8.0/Avalonia/resources and b/obj/Debug/net8.0/Avalonia/resources differ diff --git a/obj/Debug/net8.0/GazpromApp.AssemblyInfo.cs b/obj/Debug/net8.0/GazpromApp.AssemblyInfo.cs index 34588c3..e7a69bd 100644 --- a/obj/Debug/net8.0/GazpromApp.AssemblyInfo.cs +++ b/obj/Debug/net8.0/GazpromApp.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("GazpromApp")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7beee75d142db7aa3c6c717883de75ca5bcd819e")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+044372eada717f33e07ad756f7ace116ab7fb9a3")] [assembly: System.Reflection.AssemblyProductAttribute("GazpromApp")] [assembly: System.Reflection.AssemblyTitleAttribute("GazpromApp")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/obj/Debug/net8.0/GazpromApp.AssemblyInfoInputs.cache b/obj/Debug/net8.0/GazpromApp.AssemblyInfoInputs.cache index b4196d0..fc93be7 100644 --- a/obj/Debug/net8.0/GazpromApp.AssemblyInfoInputs.cache +++ b/obj/Debug/net8.0/GazpromApp.AssemblyInfoInputs.cache @@ -1 +1 @@ -d49af22cc4de304a3e0a6bfc5beb49f42e4f72fa6595042b67a80c2e9a1a3a11 +b6d09973f42f27742b27a1ce04303c8022bca7cb68cd245879c5b37de41be396 diff --git a/obj/Debug/net8.0/GazpromApp.GeneratedMSBuildEditorConfig.editorconfig b/obj/Debug/net8.0/GazpromApp.GeneratedMSBuildEditorConfig.editorconfig index eea8f70..f883420 100644 --- a/obj/Debug/net8.0/GazpromApp.GeneratedMSBuildEditorConfig.editorconfig +++ b/obj/Debug/net8.0/GazpromApp.GeneratedMSBuildEditorConfig.editorconfig @@ -32,6 +32,9 @@ build_property.EnableCodeStyleSeverity = [D:/RiderProjects/GazpromApp/App.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml +[D:/RiderProjects/GazpromApp/Views/EditEquipmentDialog.axaml] +build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml + [D:/RiderProjects/GazpromApp/Views/EditPointDialog.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml @@ -41,5 +44,8 @@ build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml [D:/RiderProjects/GazpromApp/Views/MainWindow.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml +[D:/RiderProjects/GazpromApp/Views/NewEquipmentDialog.axaml] +build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml + [D:/RiderProjects/GazpromApp/Views/NewPointDialog.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml