From e4c1ded6ae18b9b2309ea5d5dc4a208b3c1a88b7 Mon Sep 17 00:00:00 2001 From: retr0volkov <68907954+retr0volkov@users.noreply.github.com> Date: Thu, 3 Jul 2025 15:15:15 +0300 Subject: [PATCH] Bug fix --- ViewModels/EditPointDialogViewModel.cs | 29 ++++++++--- ViewModels/NewPointDialogViewModel.cs | 3 +- Views/EditPointDialog.axaml | 48 ++++++++++-------- Views/EditPointDialog.axaml.cs | 18 ++++++- Views/MainWindow.axaml.cs | 3 +- .../net8.0/Avalonia/Resources.Inputs.cache | 2 +- obj/Debug/net8.0/Avalonia/resources | Bin 343549 -> 347198 bytes obj/Debug/net8.0/GazpromApp.AssemblyInfo.cs | 2 +- .../GazpromApp.AssemblyInfoInputs.cache | 2 +- ....GeneratedMSBuildEditorConfig.editorconfig | 6 +++ 10 files changed, 79 insertions(+), 34 deletions(-) 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 3f32400846413f26195b15c0582069d69741dcbc..6cc842e9a734eaec03fd1e8799c00c4f51fb7f03 100644 GIT binary patch delta 1034 zcmaJ=OH30{6rE1z^h2q9+sLPMXc15B3;bR$aJo;le~+O9+V@|2Va!5JczYW$xU$=e%?8yZ7h!^5=JK z<_lmLmSGsj6Z1INzVi;8+!ipq(R=IBf`E`R*OF|Tx~8O~{V z^o?Uo&eT1w0t*#j&ZM4kRn27%FaxCw+G# zDJz|3S@>v?#a^A4!U2@gdy~d>xfM1d7A2Gnpn`_=;OLwlU36cM6SSho5UuXge7zic zX~l;DTIRr00kDrcfzz44W_kd~8H=Yq28~6FGt-;}Mw<0Qpg9AAlrX`mspIH%J?f~? zh(I11BD-JH_7D8jA1KuXP?fPjp#bbO-Uui42Q)q{jRsO$wG18xU^Vf4s6VQRGR?Q6 zhK`s~sn;%r99FnH^EHXY$JC3t!mQtY<{dgTsj3NuKPpNiqpIL)YjN>|QcNAqm~^lj z)%2+dW>bsD*W%F@Ej6H=R(&v9)*(K>i)Jm@e=}T3^Bu5Iu@i=@(w7FkH)Z)IbsWpf%uddxhROBk-&67b_B>E(%yE(;fVXVwZ@MMGPhCN+uAUG) anE@%HDFHjv%RwY{n{n>^#|9=OVCgrsF)=>? delta 229 zcmdltL-g-&5ne@B1_mYu1_o&$mYm+F!Ya8@ErezAVisA~hd)>t?uarli0OxArj{4$ zd*&vlr-GPzi4}>tIeYn78B&-T7{sB{zKNN6;hA|U`A~U9Ay$Skp~IgG3^jMG0Tva)V>W@fG8oz7~* zs=ED!0INCEbX8&2b