rawaccel/grapher/Models/Options/LUT/LutApplyOptions.cs
2021-07-03 14:52:54 -07:00

183 lines
4.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace grapher.Models.Options.LUT
{
public class LutApplyOptions : OptionBase
{
public const string LUTApplyOptionsLabelText = "Apply as:";
public const int LUTApplyLabelDropdownSeparation = 4;
public enum LutApplyType
{
Sensitivity,
Velocity
}
public class LutApplyOption
{
public LutApplyType Type { get; set; }
public string Name => Type.ToString();
public override string ToString() => Name;
}
public static readonly LutApplyOption Sensitivity = new LutApplyOption
{
Type = LutApplyType.Sensitivity,
};
public static readonly LutApplyOption Velocity = new LutApplyOption
{
Type = LutApplyType.Velocity,
};
public LutApplyOptions(
Label label,
ComboBox applyOptionsDropdown,
ActiveValueLabel lutApplyActiveValue)
{
ApplyOptions = applyOptionsDropdown;
ApplyOptions.Items.Clear();
ApplyOptions.Items.AddRange(
new LutApplyOption[]
{
Sensitivity,
Velocity,
});
Label = label;
Label.Text = LUTApplyOptionsLabelText;
Label.AutoSize = false;
Label.Width = 50;
ActiveValueLabel = lutApplyActiveValue;
}
public LutApplyType ApplyType { get => ApplyOption.Type; }
public LutApplyOption ApplyOption {
get
{
return ApplyOptions.SelectedItem as LutApplyOption;
}
set
{
ApplyOptions.SelectedItem = value;
}
}
public Label Label { get; }
public ActiveValueLabel ActiveValueLabel { get; }
public ComboBox ApplyOptions { get; }
public override bool Visible
{
get
{
return Label.Visible || ShouldShow;
}
}
public override int Left
{
get
{
return Label.Left;
}
set
{
Label.Left = value;
ApplyOptions.Left = Label.Left + Label.Width + LUTApplyLabelDropdownSeparation;
}
}
public override int Height
{
get
{
return Label.Height;
}
}
public override int Top
{
get
{
return Label.Top;
}
set
{
ApplyOptions.Top = value;
Label.Top = (ApplyOptions.Height - Label.Height) / 2 + ApplyOptions.Top;
ActiveValueLabel.Top = value;
}
}
public override int Width
{
get
{
return Label.Width;
}
set
{
ApplyOptions.Width = value - Label.Width - Constants.OptionLabelBoxSeperation;
}
}
private bool ShouldShow { get; set; }
public override void Hide()
{
Label.Hide();
ApplyOptions.Hide();
ActiveValueLabel.Hide();
ShouldShow = false;
}
public override void Show(string labelText)
{
Label.Show();
if (!string.IsNullOrWhiteSpace(labelText))
{
Label.Text = labelText;
}
ApplyOptions.Show();
ActiveValueLabel.Show();
ShouldShow = true;
}
public override void AlignActiveValues()
{
ActiveValueLabel.Align();
}
public void SetActiveValue(bool applyAsVelocity)
{
ApplyOption = ApplyOptionFromSettings(applyAsVelocity);
ActiveValueLabel.SetValue(ApplyOption.Name);
}
public LutApplyOption ApplyOptionFromSettings(bool applyAsVelocity)
{
if (applyAsVelocity)
{
return Velocity;
}
else
{
return Sensitivity;
}
}
}
}