mirror of
https://github.com/cemu-project/DS4Windows.git
synced 2024-11-26 19:14:20 +01:00
144 lines
4.8 KiB
C#
144 lines
4.8 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Windows.Media;
|
|||
|
using DS4Windows;
|
|||
|
using DS4WinWPF.DS4Forms.ViewModels.Util;
|
|||
|
|
|||
|
namespace DS4WinWPF.DS4Forms.ViewModels.SpecialActions
|
|||
|
{
|
|||
|
public class CheckBatteryViewModel : NotifyDataErrorBase
|
|||
|
{
|
|||
|
private int delay;
|
|||
|
private bool notification;
|
|||
|
private bool lightbar = true;
|
|||
|
private Color emptyColor
|
|||
|
= new Color() { A = 255, R = 255, G = 0, B = 0 };
|
|||
|
private Color fullColor =
|
|||
|
new Color() { A = 255, R = 0, G = 255, B = 0 };
|
|||
|
|
|||
|
public int Delay { get => delay; set => delay = value; }
|
|||
|
public bool Notification { get => notification; set => notification = value; }
|
|||
|
public bool Lightbar { get => lightbar; set => lightbar = value; }
|
|||
|
public Color EmptyColor
|
|||
|
{
|
|||
|
get => emptyColor;
|
|||
|
set
|
|||
|
{
|
|||
|
if (emptyColor == value) return;
|
|||
|
emptyColor = value;
|
|||
|
EmptyColorChanged?.Invoke(this, EventArgs.Empty);
|
|||
|
}
|
|||
|
}
|
|||
|
public event EventHandler EmptyColorChanged;
|
|||
|
public Color FullColor
|
|||
|
{
|
|||
|
get => fullColor;
|
|||
|
set
|
|||
|
{
|
|||
|
if (fullColor == value) return;
|
|||
|
fullColor = value;
|
|||
|
FullColorChanged?.Invoke(this, EventArgs.Empty);
|
|||
|
}
|
|||
|
}
|
|||
|
public event EventHandler FullColorChanged;
|
|||
|
|
|||
|
public void UpdateForcedColor(System.Windows.Media.Color color, int device)
|
|||
|
{
|
|||
|
if (device < 4)
|
|||
|
{
|
|||
|
DS4Color dcolor = new DS4Color() { red = color.R, green = color.G, blue = color.B };
|
|||
|
DS4LightBar.forcedColor[device] = dcolor;
|
|||
|
DS4LightBar.forcedFlash[device] = 0;
|
|||
|
DS4LightBar.forcelight[device] = true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void StartForcedColor(System.Windows.Media.Color color, int device)
|
|||
|
{
|
|||
|
if (device < 4)
|
|||
|
{
|
|||
|
DS4Color dcolor = new DS4Color() { red = color.R, green = color.G, blue = color.B };
|
|||
|
DS4LightBar.forcedColor[device] = dcolor;
|
|||
|
DS4LightBar.forcedFlash[device] = 0;
|
|||
|
DS4LightBar.forcelight[device] = true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void EndForcedColor(int device)
|
|||
|
{
|
|||
|
if (device < 4)
|
|||
|
{
|
|||
|
DS4LightBar.forcedColor[device] = new DS4Color(0, 0, 0);
|
|||
|
DS4LightBar.forcedFlash[device] = 0;
|
|||
|
DS4LightBar.forcelight[device] = false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void LoadAction(SpecialAction action)
|
|||
|
{
|
|||
|
string[] details = action.details.Split(',');
|
|||
|
delay = (int)action.delayTime;
|
|||
|
bool.TryParse(details[1], out notification);
|
|||
|
bool.TryParse(details[2], out lightbar);
|
|||
|
emptyColor = Color.FromArgb(255, byte.Parse(details[3]), byte.Parse(details[4]), byte.Parse(details[5]));
|
|||
|
fullColor = Color.FromArgb(255, byte.Parse(details[6]), byte.Parse(details[7]), byte.Parse(details[8]));
|
|||
|
}
|
|||
|
|
|||
|
public void SaveAction(SpecialAction action, bool edit = false)
|
|||
|
{
|
|||
|
string details = $"{delay}|{notification}|{lightbar}|{emptyColor.R}|{emptyColor.G}|{emptyColor.B}|" +
|
|||
|
$"{fullColor.R}|{fullColor.G}|{fullColor.B}";
|
|||
|
|
|||
|
Global.SaveAction(action.name, action.controls, 6, details, edit);
|
|||
|
}
|
|||
|
|
|||
|
public override bool IsValid(SpecialAction action)
|
|||
|
{
|
|||
|
ClearOldErrors();
|
|||
|
|
|||
|
bool valid = true;
|
|||
|
List<string> notificationErrors = new List<string>();
|
|||
|
List<string> lightbarErrors = new List<string>();
|
|||
|
|
|||
|
if (!notification && !lightbar)
|
|||
|
{
|
|||
|
notificationErrors.Add("Need status option");
|
|||
|
lightbarErrors.Add("Need status option");
|
|||
|
}
|
|||
|
else if (lightbar)
|
|||
|
{
|
|||
|
if (emptyColor == fullColor)
|
|||
|
{
|
|||
|
lightbarErrors.Add("Need to set two different colors");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (notificationErrors.Count > 0)
|
|||
|
{
|
|||
|
errors["Notification"] = notificationErrors;
|
|||
|
RaiseErrorsChanged("Notification");
|
|||
|
}
|
|||
|
if (lightbarErrors.Count > 0)
|
|||
|
{
|
|||
|
errors["Lightbar"] = lightbarErrors;
|
|||
|
RaiseErrorsChanged("Lightbar");
|
|||
|
}
|
|||
|
|
|||
|
return valid;
|
|||
|
}
|
|||
|
|
|||
|
public override void ClearOldErrors()
|
|||
|
{
|
|||
|
if (errors.Count > 0)
|
|||
|
{
|
|||
|
errors.Clear();
|
|||
|
RaiseErrorsChanged("Notification");
|
|||
|
RaiseErrorsChanged("Lightbar");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|