|
@@ -1,37 +1,54 @@
|
|
using System.Collections.ObjectModel;
|
|
using System.Collections.ObjectModel;
|
|
using System.ComponentModel;
|
|
using System.ComponentModel;
|
|
|
|
+using CommunityToolkit.Mvvm.Input;
|
|
using PixiEditor.Numerics;
|
|
using PixiEditor.Numerics;
|
|
|
|
|
|
namespace PixiEditor.AvaloniaUI.ViewModels.Nodes.Properties;
|
|
namespace PixiEditor.AvaloniaUI.ViewModels.Nodes.Properties;
|
|
|
|
|
|
internal class KernelPropertyViewModel : NodePropertyViewModel<Kernel?>
|
|
internal class KernelPropertyViewModel : NodePropertyViewModel<Kernel?>
|
|
{
|
|
{
|
|
- public ObservableCollection<List<KernelVmReference>> ReferenceCollections { get; }
|
|
|
|
|
|
+ public ObservableCollection<KernelVmReference> ReferenceCollections { get; }
|
|
|
|
+
|
|
|
|
+ public RelayCommand<int> AdjustSizeCommand { get; }
|
|
|
|
|
|
public KernelPropertyViewModel(NodeViewModel node, Type valueType) : base(node, valueType)
|
|
public KernelPropertyViewModel(NodeViewModel node, Type valueType) : base(node, valueType)
|
|
{
|
|
{
|
|
- ReferenceCollections = new ObservableCollection<List<KernelVmReference>>();
|
|
|
|
|
|
+ ReferenceCollections = new ObservableCollection<KernelVmReference>();
|
|
PropertyChanged += OnPropertyChanged;
|
|
PropertyChanged += OnPropertyChanged;
|
|
|
|
+ AdjustSizeCommand = new RelayCommand<int>(Execute, i => i > 0 && Width < 9 || i < 0 && Width > 3);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private void Execute(int by)
|
|
|
|
+ {
|
|
|
|
+ Value.Resize(Width + by * 2, Height + by * 2);
|
|
|
|
+ OnPropertyChanged(nameof(Value));
|
|
|
|
+ AdjustSizeCommand.NotifyCanExecuteChanged();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public int Width => Value.Width;
|
|
|
|
+
|
|
|
|
+ public int Height => Value.Height;
|
|
|
|
+
|
|
|
|
+ public float Sum => Value.Sum;
|
|
|
|
+
|
|
private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e)
|
|
private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e)
|
|
{
|
|
{
|
|
- if (e.PropertyName == nameof(Value) || Value == null)
|
|
|
|
|
|
+ if (e.PropertyName != nameof(Value) || Value == null)
|
|
return;
|
|
return;
|
|
|
|
|
|
ReferenceCollections.Clear();
|
|
ReferenceCollections.Clear();
|
|
|
|
|
|
for (int y = -Value.RadiusY; y <= Value.RadiusY; y++)
|
|
for (int y = -Value.RadiusY; y <= Value.RadiusY; y++)
|
|
{
|
|
{
|
|
- var collection = new List<KernelVmReference>();
|
|
|
|
-
|
|
|
|
for (int x = -Value.RadiusX; x <= Value.RadiusX; x++)
|
|
for (int x = -Value.RadiusX; x <= Value.RadiusX; x++)
|
|
{
|
|
{
|
|
- collection.Add(new KernelVmReference(this, x, y));
|
|
|
|
|
|
+ ReferenceCollections.Add(new KernelVmReference(this, x, y));
|
|
}
|
|
}
|
|
-
|
|
|
|
- ReferenceCollections.Add(collection);
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ OnPropertyChanged(nameof(Width));
|
|
|
|
+ OnPropertyChanged(nameof(Height));
|
|
|
|
+ OnPropertyChanged(nameof(Sum));
|
|
}
|
|
}
|
|
|
|
|
|
public class KernelVmReference(KernelPropertyViewModel viewModel, int x, int y) : PixiObservableObject
|
|
public class KernelVmReference(KernelPropertyViewModel viewModel, int x, int y) : PixiObservableObject
|
|
@@ -43,6 +60,7 @@ internal class KernelPropertyViewModel : NodePropertyViewModel<Kernel?>
|
|
{
|
|
{
|
|
viewModel.Value[x, y] = value;
|
|
viewModel.Value[x, y] = value;
|
|
ViewModelMain.Current.NodeGraphManager.UpdatePropertyValue((viewModel.Node, viewModel.PropertyName, viewModel.Value));
|
|
ViewModelMain.Current.NodeGraphManager.UpdatePropertyValue((viewModel.Node, viewModel.PropertyName, viewModel.Value));
|
|
|
|
+ viewModel.OnPropertyChanged(nameof(Sum));
|
|
OnPropertyChanged();
|
|
OnPropertyChanged();
|
|
}
|
|
}
|
|
}
|
|
}
|