using System.Collections.ObjectModel; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Windows.Input; using System.Xml; using Command; using GenHTTP.Engine; using InABox.Rpc; using Microsoft.Xaml.Behaviors.Core; using Org.BouncyCastle.Crypto.Engines; namespace DataLogistics; public class MainWindowViewModel : INotifyPropertyChanged { private float _greenValue; private float _redValue; private float _blueValue; private float _dimmerValue; public ICommand OnOffCommand { get; set; } public float DimmerValue { get => _dimmerValue; set { _dimmerValue = value; HexValue = ComputeHex(DimmerValue, RedValue, GreenValue, BlueValue); OnPropertyChanged(nameof(HexValue)); } } public bool LightOn { get; set; } public float RedValue { get => _redValue; set { _redValue = value; HexValue = ComputeHex(DimmerValue, RedValue, GreenValue, BlueValue); OnPropertyChanged(nameof(HexValue)); } } public float GreenValue { get => _greenValue; set { _greenValue = value; HexValue = ComputeHex(DimmerValue, RedValue, GreenValue, BlueValue); OnPropertyChanged(nameof(HexValue)); } } public float BlueValue { get => _blueValue; set { _blueValue = value; HexValue = ComputeHex(DimmerValue, RedValue, GreenValue, BlueValue); OnPropertyChanged(nameof(HexValue)); } } public string HexValue { get; set; } private RpcClientPipeTransport Transport; public MainWindowViewModel() { Transport = new RpcClientPipeTransport("SwitchTransport"); Transport.Connect(); OnOffCommand = new ActionCommand(OnOffSwitch); DimmerValue = 100; RedValue = 100; GreenValue = 0; BlueValue = 180; HexValue = ComputeHex(DimmerValue, RedValue, GreenValue, BlueValue); } public void OnOffSwitch() { try { var p = new SwitchParameters(); p.Active = !LightOn; var result = Transport.Send(p); LightOn = result.LightOn; } catch (Exception e) { } } public string ComputeHex(float value, float red, float green, float blue) { int Red = Convert.ToInt32(red * (1 - (value / 255))); int Green = Convert.ToInt32(green * (1 - (value / 255))); int Blue = Convert.ToInt32(blue * (1 - (value / 255))); string RedHexFinal = Red.ToString("X"); string GreenHexFinal = Green.ToString("X"); string BlueHexFinal = Blue.ToString("X"); if (RedHexFinal.Length == 1) RedHexFinal = "0" + RedHexFinal; if (GreenHexFinal.Length == 1) GreenHexFinal = "0" + GreenHexFinal; if (BlueHexFinal.Length == 1) BlueHexFinal = "0" + BlueHexFinal; string FinalHex = "#" + RedHexFinal + GreenHexFinal + BlueHexFinal; var p = new ColourParameters(); p.Hex = FinalHex; var result = Transport.Send(p); FinalHex = result.HexValue; return FinalHex; } public event PropertyChangedEventHandler? PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } protected bool SetField(ref T field, T value, [CallerMemberName] string? propertyName = null) { if (EqualityComparer.Default.Equals(field, value)) return false; field = value; OnPropertyChanged(propertyName); return true; } }