Skip to content

Commit

Permalink
Reduce boilerplate by using ObservableProperty from the community too…
Browse files Browse the repository at this point in the history
…lkit
  • Loading branch information
simshaun committed Jan 19, 2023
1 parent da82fd1 commit e4a7380
Show file tree
Hide file tree
Showing 11 changed files with 142 additions and 728 deletions.
136 changes: 21 additions & 115 deletions PixelPalette/Control/MainWindow/CmykTabViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,32 +1,31 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Runtime.CompilerServices;
using System.Windows.Media;
using CommunityToolkit.Mvvm.ComponentModel;
using PixelPalette.State;

namespace PixelPalette.Control.MainWindow;

public sealed class CmykTabViewModel : INotifyPropertyChanged
public sealed partial class CmykTabViewModel : ObservableObject
{
private GlobalState GlobalState { get; }

private string _text = "";
private string _scaledText = "";
private string _cyan = "";
private string _magenta = "";
private string _yellow = "";
private string _key = "";
private string _scaledCyan = "";
private string _scaledMagenta = "";
private string _scaledYellow = "";
private string _scaledKey = "";

private LinearGradientBrush? _cyanGradientFill;
private LinearGradientBrush? _magentaGradientFill;
private LinearGradientBrush? _yellowGradientFill;
private LinearGradientBrush? _keyGradientFill;
[ObservableProperty] private string _text = "";
[ObservableProperty] private string _scaledText = "";
[ObservableProperty] private string _cyan = "";
[ObservableProperty] private string _magenta = "";
[ObservableProperty] private string _yellow = "";
[ObservableProperty] private string _key = "";
[ObservableProperty] private string _scaledCyan = "";
[ObservableProperty] private string _scaledMagenta = "";
[ObservableProperty] private string _scaledYellow = "";
[ObservableProperty] private string _scaledKey = "";

[ObservableProperty] private LinearGradientBrush? _cyanGradientFill;
[ObservableProperty] private LinearGradientBrush? _magentaGradientFill;
[ObservableProperty] private LinearGradientBrush? _yellowGradientFill;
[ObservableProperty] private LinearGradientBrush? _keyGradientFill;

public CmykTabViewModel(GlobalState globalState)
{
Expand All @@ -38,90 +37,6 @@ public CmykTabViewModel(GlobalState globalState)
RefreshValues();
}

public string Text
{
get => _text;
set => SetField(ref _text, value);
}

public string ScaledText
{
get => _scaledText;
set => SetField(ref _scaledText, value);
}

public string Cyan
{
get => _cyan;
set => SetField(ref _cyan, value);
}

public string Magenta
{
get => _magenta;
set => SetField(ref _magenta, value);
}

public string Yellow
{
get => _yellow;
set => SetField(ref _yellow, value);
}

public string Key
{
get => _key;
set => SetField(ref _key, value);
}

public string ScaledCyan
{
get => _scaledCyan;
set => SetField(ref _scaledCyan, value);
}

public string ScaledMagenta
{
get => _scaledMagenta;
set => SetField(ref _scaledMagenta, value);
}

public string ScaledYellow
{
get => _scaledYellow;
set => SetField(ref _scaledYellow, value);
}

public string ScaledKey
{
get => _scaledKey;
set => SetField(ref _scaledKey, value);
}

public LinearGradientBrush? CyanGradientFill
{
get => _cyanGradientFill;
private set => SetField(ref _cyanGradientFill, value);
}

public LinearGradientBrush? MagentaGradientFill
{
get => _magentaGradientFill;
private set => SetField(ref _magentaGradientFill, value);
}

public LinearGradientBrush? YellowGradientFill
{
get => _yellowGradientFill;
private set => SetField(ref _yellowGradientFill, value);
}

public LinearGradientBrush? KeyGradientFill
{
get => _keyGradientFill;
private set => SetField(ref _keyGradientFill, value);
}

private void RefreshValues()
{
_isUserUpdate = false;
Expand Down Expand Up @@ -162,22 +77,13 @@ private void RefreshValues()
#region boilerplate

private bool _isUserUpdate = true;
public event PropertyChangedEventHandler? PropertyChanged;
public event EventHandler<PropertyChangedEventArgs>? PropertyChangedByUser;

private void OnPropertyChanged(string propertyName)
{
var eventArgs = new PropertyChangedEventArgs(propertyName);
PropertyChanged?.Invoke(this, eventArgs);
if (_isUserUpdate) PropertyChangedByUser?.Invoke(this, eventArgs);
}

private void SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = "")
protected override void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (EqualityComparer<T>.Default.Equals(field, value)) return;
field = value;
OnPropertyChanged(propertyName);
base.OnPropertyChanged(e);
if (_isUserUpdate) PropertyChangedByUser?.Invoke(this, e);
}

#endregion
}
}
78 changes: 13 additions & 65 deletions PixelPalette/Control/MainWindow/HexTabViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Media;
using CommunityToolkit.Mvvm.ComponentModel;
using PixelPalette.State;

namespace PixelPalette.Control.MainWindow;

public sealed class HexTabViewModel : INotifyPropertyChanged
public sealed partial class HexTabViewModel : ObservableObject
{
public GlobalState GlobalState { get; }

private string _text = "";
private string _red = "";
private string _green = "";
private string _blue = "";
[ObservableProperty] private string _text = "";
[ObservableProperty] private string _red = "";
[ObservableProperty] private string _green = "";
[ObservableProperty] private string _blue = "";

private LinearGradientBrush? _redGradientFill;
private LinearGradientBrush? _greenGradientFill;
private LinearGradientBrush? _blueGradientFill;
[ObservableProperty] private LinearGradientBrush? _redGradientFill;
[ObservableProperty] private LinearGradientBrush? _greenGradientFill;
[ObservableProperty] private LinearGradientBrush? _blueGradientFill;

public HexTabViewModel(GlobalState globalState)
{
Expand All @@ -30,48 +29,6 @@ public HexTabViewModel(GlobalState globalState)
RefreshValues();
}

public string Text
{
get => _text;
set => SetField(ref _text, value);
}

public string Red
{
get => _red;
set => SetField(ref _red, value);
}

public string Green
{
get => _green;
set => SetField(ref _green, value);
}

public string Blue
{
get => _blue;
set => SetField(ref _blue, value);
}

public LinearGradientBrush? RedGradientFill
{
get => _redGradientFill;
private set => SetField(ref _redGradientFill, value);
}

public LinearGradientBrush? GreenGradientFill
{
get => _greenGradientFill;
private set => SetField(ref _greenGradientFill, value);
}

public LinearGradientBrush? BlueGradientFill
{
get => _blueGradientFill;
private set => SetField(ref _blueGradientFill, value);
}

private void RefreshValues()
{
_isUserUpdate = false;
Expand Down Expand Up @@ -102,22 +59,13 @@ private void RefreshValues()
#region boilerplate

private bool _isUserUpdate = true;
public event PropertyChangedEventHandler? PropertyChanged;
public event EventHandler<PropertyChangedEventArgs>? PropertyChangedByUser;

private void OnPropertyChanged(string propertyName)
{
var eventArgs = new PropertyChangedEventArgs(propertyName);
PropertyChanged?.Invoke(this, eventArgs);
if (_isUserUpdate) PropertyChangedByUser?.Invoke(this, eventArgs);
}

private void SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = "")
protected override void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (EqualityComparer<T>.Default.Equals(field, value)) return;
field = value;
OnPropertyChanged(propertyName);
base.OnPropertyChanged(e);
if (_isUserUpdate) PropertyChangedByUser?.Invoke(this, e);
}

#endregion
}
}
Loading

0 comments on commit e4a7380

Please sign in to comment.