rawaccel/grapher/Models/AccelGUIFactory.cs

722 lines
26 KiB
C#

using grapher.Models.Calculations;
using grapher.Models.Devices;
using grapher.Models.Mouse;
using grapher.Models.Options;
using grapher.Models.Options.Cap;
using grapher.Models.Options.Directionality;
using grapher.Models.Options.LUT;
using grapher.Models.Serialized;
using System;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using grapher.Models.Theming.Controls;
using grapher.Common;
namespace grapher.Models
{
public static class AccelGUIFactory
{
#region Methods
public static AccelGUI Construct(
RawAcceleration form,
Chart accelerationChart,
Chart accelerationChartY,
Chart velocityChart,
Chart velocityChartY,
Chart gainChart,
Chart gainChartY,
TableLayoutPanel chartContainer,
ThemeableComboBox accelTypeDropX,
ThemeableComboBox accelTypeDropY,
ThemeableComboBox lutApplyDropdownX,
ThemeableComboBox lutApplyDropdownY,
ThemeableComboBox capTypeDropdownXClassic,
ThemeableComboBox capTypeDropdownYClassic,
ThemeableComboBox capTypeDropdownXPower,
ThemeableComboBox capTypeDropdownYPower,
Button writeButton,
Button toggleButton,
ToolStripMenuItem showVelocityGainToolStripMenuItem,
ToolStripMenuItem showLastMouseMoveMenuItem,
ToolStripMenuItem autoWriteMenuItem,
ToolStripMenuItem deviceMenuItem,
ToolStripMenuItem scaleMenuItem,
ToolStripMenuItem themeMenuItem,
ToolStripTextBox dpiTextBox,
ToolStripTextBox pollRateTextBox,
Panel directionalityPanel,
ThemeableTextBox sensitivityBoxX,
ThemeableTextBox sensitivityBoxY,
ThemeableTextBox rotationBox,
ThemeableTextBox inCapBoxXClassic,
ThemeableTextBox inCapBoxYClassic,
ThemeableTextBox outCapBoxXClassic,
ThemeableTextBox outCapBoxYClassic,
ThemeableTextBox inCapBoxXPower,
ThemeableTextBox inCapBoxYPower,
ThemeableTextBox outCapBoxXPower,
ThemeableTextBox outCapBoxYPower,
ThemeableTextBox inputJumpBoxX,
ThemeableTextBox inputJumpBoxY,
ThemeableTextBox outputJumpBoxX,
ThemeableTextBox outputJumpBoxY,
ThemeableTextBox inputOffsetBoxX,
ThemeableTextBox inputOffsetBoxY,
ThemeableTextBox outputOffsetBoxX,
ThemeableTextBox outputOffsetBoxY,
ThemeableTextBox accelerationBoxX,
ThemeableTextBox accelerationBoxY,
ThemeableTextBox decayRateBoxX,
ThemeableTextBox decayRateBoxY,
ThemeableTextBox growthRateBoxX,
ThemeableTextBox growthRateBoxY,
ThemeableTextBox smoothBoxX,
ThemeableTextBox smoothBoxY,
ThemeableTextBox scaleBoxX,
ThemeableTextBox scaleBoxY,
ThemeableTextBox limitBoxX,
ThemeableTextBox limitBoxY,
ThemeableTextBox powerClassicBoxX,
ThemeableTextBox powerClassicBoxY,
ThemeableTextBox expBoxX,
ThemeableTextBox expBoxY,
ThemeableTextBox syncSpeedBoxX,
ThemeableTextBox syncSpeedBoxY,
ThemeableTextBox domainBoxX,
ThemeableTextBox domainBoxY,
ThemeableTextBox rangeBoxX,
ThemeableTextBox rangeBoxY,
ThemeableTextBox lpNormBox,
CheckBox sensXYLock,
CheckBox byComponentXYLock,
CheckBox fakeBox,
CheckBox wholeCheckBox,
CheckBox byComponentCheckBox,
CheckBox gainSwitchX,
CheckBox gainSwitchY,
RichTextBox xLutActiveValuesBox,
RichTextBox yLutActiveValuesBox,
RichTextBox xLutPointsBox,
RichTextBox yLutPointsBox,
Label lockXYLabel,
Label sensitivityLabel,
Label yxRatioLabel,
Label rotationLabel,
Label inCapLabelXClassic,
Label inCapLabelYClassic,
Label outCapLabelXClassic,
Label outCapLabelYClassic,
Label capTypeLabelXClassic,
Label capTypeLabelYClassic,
Label inCapLabelXPower,
Label inCapLabelYPower,
Label outCapLabelXPower,
Label outCapLabelYPower,
Label capTypeLabelXPower,
Label capTypeLabelYPower,
Label inputJumpLabelX,
Label inputJumpLabelY,
Label outputJumpLabelX,
Label outputJumpLabelY,
Label inputOffsetLabelX,
Label inputOffsetLabelY,
Label outputOffsetLabelX,
Label outputOffsetLabelY,
Label constantOneLabelX,
Label constantOneLabelY,
Label decayRateLabelX,
Label decayRateLabelY,
Label growthRateLabelX,
Label growthRateLabelY,
Label smoothLabelX,
Label smoothLabelY,
Label scaleLabelX,
Label scaleLabelY,
Label limitLabelX,
Label limitLabelY,
Label powerClassicLabelX,
Label powerClassicLabelY,
Label expLabelX,
Label expLabelY,
Label lutTextLabelX,
Label lutTextLabelY,
Label constantThreeLabelX,
Label constantThreeLabelY,
Label activeValueTitleX,
Label activeValueTitleY,
Label sensitivityActiveLabel,
Label yxRatioActiveLabel,
Label rotationActiveLabel,
Label inCapActiveXLabelClassic,
Label inCapActiveYLabelClassic,
Label outCapActiveXLabelClassic,
Label outCapActiveYLabelClassic,
Label capTypeActiveXLabelClassic,
Label capTypeActiveYLabelClassic,
Label inCapActiveXLabelPower,
Label inCapActiveYLabelPower,
Label outCapActiveXLabelPower,
Label outCapActiveYLabelPower,
Label capTypeActiveXLabelPower,
Label capTypeActiveYLabelPower,
Label inputJumpActiveLabelX,
Label inputJumpActiveLabelY,
Label outputJumpActiveLabelX,
Label outputJumpActiveLabelY,
Label inputOffsetActiveLabelX,
Label inputOffsetActiveLabelY,
Label outputOffsetActiveLabelX,
Label outputOffsetActiveLabelY,
Label accelerationActiveLabelX,
Label accelerationActiveLabelY,
Label decayRateActiveLabelX,
Label decayRateActiveLabelY,
Label growthRateActiveLabelX,
Label growthRateActiveLabelY,
Label smoothActiveLabelX,
Label smoothActiveLabelY,
Label scaleActiveLabelX,
Label scaleActiveLabelY,
Label limitActiveLabelX,
Label limitActiveLabelY,
Label powerClassicActiveLabelX,
Label powerClassicActiveLabelY,
Label expActiveLabelX,
Label expActiveLabelY,
Label syncSpeedActiveLabelX,
Label syncSpeedActiveLabelY,
Label accelTypeActiveLabelX,
Label accelTypeActiveLabelY,
Label gainSwitchActiveLabelX,
Label gainSwitchActiveLabelY,
Label optionSetXTitle,
Label optionSetYTitle,
Label mouseLabel,
Button directionalityLabel,
Label directionalityX,
Label directionalityY,
Label direcionalityActiveValueTitle,
Label lpNormLabel,
Label lpNormActiveLabel,
Label domainLabel,
Label domainActiveValueX,
Label domainActiveValueY,
Label rangeLabel,
Label rangeActiveValueX,
Label rangeActiveValueY,
Label lutApplyLabelX,
Label lutApplyLabelY,
Label lutApplyActiveValueX,
Label lutApplyActiveValueY)
{
fakeBox.Checked = false;
fakeBox.Hide();
var accelCalculator = new AccelCalculator(
new Field(dpiTextBox.TextBox, form, Constants.DefaultChartsScalingDPI, 1),
new Field(pollRateTextBox.TextBox, form, Constants.DefaultChartsScalingPollRate, 1));
var accelCharts = new AccelCharts(
form,
new ChartXY(accelerationChart, accelerationChartY, Constants.SensitivityChartTitle),
new ChartXY(velocityChart, velocityChartY, Constants.VelocityChartTitle),
new ChartXY(gainChart, gainChartY, Constants.GainChartTitle),
chartContainer,
showVelocityGainToolStripMenuItem,
showLastMouseMoveMenuItem,
writeButton,
accelCalculator);
var sensitivity = new Option(
sensitivityBoxX,
form,
1,
sensitivityLabel,
0,
new ActiveValueLabel(sensitivityActiveLabel, activeValueTitleX),
"Sens Multiplier");
var yxRatio = new LockableOption(
new Option(
sensitivityBoxY,
form,
1,
yxRatioLabel,
0,
new ActiveValueLabel(yxRatioActiveLabel, activeValueTitleX),
"Y/X Ratio"),
sensXYLock,
1);
var rotation = new Option(
rotationBox,
form,
0,
rotationLabel,
0,
new ActiveValueLabel(rotationActiveLabel, activeValueTitleX),
"Rotation");
var optionSetYLeft = activeValueTitleX.Left + activeValueTitleX.Width;
var directionalityLeft = directionalityPanel.Left;
var inputJumpX = new Option(
inputJumpBoxX,
form,
0,
inputJumpLabelX,
0,
new ActiveValueLabel(inputJumpActiveLabelX, activeValueTitleX),
"Jump");
var inputJumpY = new Option(
inputJumpBoxY,
form,
0,
inputJumpLabelY,
optionSetYLeft,
new ActiveValueLabel(inputJumpActiveLabelY, activeValueTitleY),
"Jump");
var outputJumpX = new Option(
outputJumpBoxX,
form,
0,
outputJumpLabelX,
0,
new ActiveValueLabel(outputJumpActiveLabelX, activeValueTitleX),
"Jump");
var outputJumpY = new Option(
outputJumpBoxY,
form,
0,
outputJumpLabelY,
optionSetYLeft,
new ActiveValueLabel(outputJumpActiveLabelY, activeValueTitleY),
"Jump");
var inputOffsetX = new Option(
inputOffsetBoxX,
form,
0,
inputOffsetLabelX,
0,
new ActiveValueLabel(inputOffsetActiveLabelX, activeValueTitleX),
"Offset");
var inputOffsetY = new Option(
inputOffsetBoxY,
form,
0,
inputOffsetLabelY,
optionSetYLeft,
new ActiveValueLabel(inputOffsetActiveLabelY, activeValueTitleY),
"Offset");
var outputOffsetX = new Option(
outputOffsetBoxX,
form,
0,
outputOffsetLabelX,
0,
new ActiveValueLabel(outputOffsetActiveLabelX, activeValueTitleX),
"Offset");
var outputOffsetY = new Option(
outputOffsetBoxY,
form,
0,
outputOffsetLabelY,
optionSetYLeft,
new ActiveValueLabel(outputOffsetActiveLabelY, activeValueTitleY),
"Offset");
var accelerationX = new Option(
new Field(accelerationBoxX, form, 0),
constantOneLabelX,
new ActiveValueLabel(accelerationActiveLabelX, activeValueTitleX),
0);
var accelerationY = new Option(
new Field(accelerationBoxY, form, 0),
constantOneLabelY,
new ActiveValueLabel(accelerationActiveLabelY, activeValueTitleY),
optionSetYLeft);
var decayRateX = new Option(
new Field(decayRateBoxX, form, 0),
decayRateLabelX,
new ActiveValueLabel(decayRateActiveLabelX, activeValueTitleX),
0);
var decayRateY = new Option(
new Field(decayRateBoxY, form, 0),
decayRateLabelY,
new ActiveValueLabel(decayRateActiveLabelY, activeValueTitleY),
optionSetYLeft);
var growthRateX = new Option(
new Field(growthRateBoxX, form, 0),
growthRateLabelX,
new ActiveValueLabel(growthRateActiveLabelX, activeValueTitleX),
0);
var growthRateY = new Option(
new Field(growthRateBoxY, form, 0),
growthRateLabelY,
new ActiveValueLabel(growthRateActiveLabelY, activeValueTitleY),
optionSetYLeft);
var smoothX = new Option(
new Field(smoothBoxX, form, 0),
smoothLabelX,
new ActiveValueLabel(smoothActiveLabelX, activeValueTitleX),
0);
var smoothY = new Option(
new Field(smoothBoxY, form, 0),
smoothLabelY,
new ActiveValueLabel(smoothActiveLabelY, activeValueTitleY),
optionSetYLeft);
var scaleX = new Option(
new Field(scaleBoxX, form, 0),
scaleLabelX,
new ActiveValueLabel(scaleActiveLabelX, activeValueTitleX),
0);
var scaleY = new Option(
new Field(scaleBoxY, form, 0),
scaleLabelY,
new ActiveValueLabel(scaleActiveLabelY, activeValueTitleY),
optionSetYLeft);
var limitX = new Option(
new Field(limitBoxX, form, 2),
limitLabelX,
new ActiveValueLabel(limitActiveLabelX, activeValueTitleX),
0);
var limitY = new Option(
new Field(limitBoxY, form, 2),
limitLabelY,
new ActiveValueLabel(limitActiveLabelY, activeValueTitleY),
optionSetYLeft);
var powerClassicX = new Option(
new Field(powerClassicBoxX, form, 2),
powerClassicLabelX,
new ActiveValueLabel(powerClassicActiveLabelX, activeValueTitleX),
0);
var powerClassicY = new Option(
new Field(powerClassicBoxY, form, 2),
powerClassicLabelY,
new ActiveValueLabel(powerClassicActiveLabelY, activeValueTitleY),
optionSetYLeft);
var exponentX = new Option(
new Field(expBoxX, form, 2),
expLabelX,
new ActiveValueLabel(expActiveLabelX, activeValueTitleX),
0);
var exponentY = new Option(
new Field(expBoxY, form, 2),
expLabelY,
new ActiveValueLabel(expActiveLabelY, activeValueTitleY),
optionSetYLeft);
var syncSpeedX = new Option(
new Field(syncSpeedBoxX, form, 0),
constantThreeLabelX,
new ActiveValueLabel(syncSpeedActiveLabelX, activeValueTitleX),
0);
var syncSpeedY = new Option(
new Field(syncSpeedBoxY, form, 0),
constantThreeLabelY,
new ActiveValueLabel(syncSpeedActiveLabelY, activeValueTitleY),
optionSetYLeft);
var inCapXClassic = new Option(
inCapBoxXClassic,
form,
0,
inCapLabelXClassic,
0,
new ActiveValueLabel(inCapActiveXLabelClassic, activeValueTitleX),
"Cap: Input");
var inCapYClassic = new Option(
inCapBoxYClassic,
form,
0,
inCapLabelYClassic,
optionSetYLeft,
new ActiveValueLabel(inCapActiveYLabelClassic, activeValueTitleY),
"Cap");
var outCapXClassic = new Option(
outCapBoxXClassic,
form,
0,
outCapLabelXClassic,
0,
new ActiveValueLabel(outCapActiveXLabelClassic, activeValueTitleX),
"Cap: Input");
var outCapYClassic = new Option(
outCapBoxYClassic,
form,
0,
outCapLabelYClassic,
optionSetYLeft,
new ActiveValueLabel(outCapActiveYLabelClassic, activeValueTitleY),
"Cap");
var capTypeXClassic = new CapTypeOptions(
capTypeLabelXClassic,
capTypeDropdownXClassic,
new ActiveValueLabel(capTypeActiveXLabelClassic, activeValueTitleX),
0);
var capTypeYClassic = new CapTypeOptions(
capTypeLabelYClassic,
capTypeDropdownYClassic,
new ActiveValueLabel(capTypeActiveYLabelClassic, activeValueTitleY),
optionSetYLeft);
var classicCapOptionsX = new CapOptions(
capTypeXClassic,
inCapXClassic,
outCapXClassic,
accelerationX);
var classicCapOptionsY = new CapOptions(
capTypeYClassic,
inCapYClassic,
outCapYClassic,
accelerationY);
var inCapXPower = new Option(
inCapBoxXPower,
form,
0,
inCapLabelXPower,
0,
new ActiveValueLabel(inCapActiveXLabelPower, activeValueTitleX),
"Cap: Input");
var inCapYPower = new Option(
inCapBoxYPower,
form,
0,
inCapLabelYPower,
optionSetYLeft,
new ActiveValueLabel(inCapActiveYLabelPower, activeValueTitleY),
"Cap");
var outCapXPower = new Option(
outCapBoxXPower,
form,
0,
outCapLabelXPower,
0,
new ActiveValueLabel(outCapActiveXLabelPower, activeValueTitleX),
"Cap: Input");
var outCapYPower = new Option(
outCapBoxYPower,
form,
0,
outCapLabelYPower,
optionSetYLeft,
new ActiveValueLabel(outCapActiveYLabelPower, activeValueTitleY),
"Cap");
var capTypeXPower = new CapTypeOptions(
capTypeLabelXPower,
capTypeDropdownXPower,
new ActiveValueLabel(capTypeActiveXLabelPower, activeValueTitleX),
0);
var capTypeYPower = new CapTypeOptions(
capTypeLabelYPower,
capTypeDropdownYPower,
new ActiveValueLabel(capTypeActiveYLabelPower, activeValueTitleY),
optionSetYLeft);
var lpNorm = new Option(
new Field(lpNormBox, form, 2),
lpNormLabel,
new ActiveValueLabel(lpNormActiveLabel, direcionalityActiveValueTitle),
directionalityLeft);
var domain = new OptionXY(
domainBoxX,
domainBoxY,
fakeBox,
form,
1,
domainLabel,
new ActiveValueLabelXY(
new ActiveValueLabel(domainActiveValueX, direcionalityActiveValueTitle),
new ActiveValueLabel(domainActiveValueY, direcionalityActiveValueTitle)),
false);
var range = new OptionXY(
rangeBoxX,
rangeBoxY,
fakeBox,
form,
1,
rangeLabel,
new ActiveValueLabelXY(
new ActiveValueLabel(rangeActiveValueX, direcionalityActiveValueTitle),
new ActiveValueLabel(rangeActiveValueY, direcionalityActiveValueTitle)),
false);
var lutTextX = new TextOption(lutTextLabelX);
var lutTextY = new TextOption(lutTextLabelY);
var gainSwitchOptionX = new CheckBoxOption(
gainSwitchX,
new ActiveValueLabel(gainSwitchActiveLabelX, activeValueTitleX));
var gainSwitchOptionY = new CheckBoxOption(
gainSwitchY,
new ActiveValueLabel(gainSwitchActiveLabelY, activeValueTitleY));
var powerCapOptionsX = new CapOptions(
capTypeXPower,
inCapXPower,
outCapXPower,
scaleX,
outputOffsetX,
gainSwitchOptionX);
var powerCapOptionsY = new CapOptions(
capTypeYPower,
inCapYPower,
outCapYPower,
scaleY,
outputOffsetY,
gainSwitchOptionY);
var accelerationOptionsX = new AccelTypeOptions(
accelTypeDropX,
gainSwitchOptionX,
classicCapOptionsX,
powerCapOptionsX,
outputJumpX,
outputOffsetX,
decayRateX,
growthRateX,
smoothX,
inputJumpX,
inputOffsetX,
limitX,
powerClassicX,
exponentX,
syncSpeedX,
lutTextX,
new LUTPanelOptions(xLutPointsBox, xLutActiveValuesBox),
new LutApplyOptions(
lutApplyLabelX,
lutApplyDropdownX,
new ActiveValueLabel(lutApplyActiveValueX, activeValueTitleX)),
writeButton,
new ActiveValueLabel(accelTypeActiveLabelX, activeValueTitleX));
var accelerationOptionsY = new AccelTypeOptions(
accelTypeDropY,
gainSwitchOptionY,
classicCapOptionsY,
powerCapOptionsY,
outputJumpY,
outputOffsetY,
decayRateY,
growthRateY,
smoothY,
inputJumpY,
inputOffsetY,
limitY,
powerClassicY,
exponentY,
syncSpeedY,
lutTextY,
new LUTPanelOptions(yLutPointsBox, yLutActiveValuesBox),
new LutApplyOptions(
lutApplyLabelY,
lutApplyDropdownY,
new ActiveValueLabel(lutApplyActiveValueY, activeValueTitleY)),
writeButton,
new ActiveValueLabel(accelTypeActiveLabelY, activeValueTitleY));
var optionsSetX = new AccelOptionSet(
optionSetXTitle,
activeValueTitleX,
rotationBox.Top + rotationBox.Height + Constants.OptionVerticalSeperation,
accelerationOptionsX);
var optionsSetY = new AccelOptionSet(
optionSetYTitle,
activeValueTitleY,
rotationBox.Top + rotationBox.Height + Constants.OptionVerticalSeperation,
accelerationOptionsY);
var directionalOptions = new DirectionalityOptions(
directionalityPanel,
directionalityLabel,
directionalityX,
directionalityY,
direcionalityActiveValueTitle,
lpNorm,
domain,
range,
wholeCheckBox,
byComponentCheckBox,
Constants.DirectionalityVerticalOffset);
var applyOptions = new ApplyOptions(
byComponentXYLock,
optionsSetX,
optionsSetY,
directionalOptions,
sensitivity,
yxRatio,
rotation,
lockXYLabel,
accelCharts);
var settings = new SettingsManager(
accelCalculator.DPI,
accelCalculator.PollRate,
autoWriteMenuItem,
showLastMouseMoveMenuItem,
showVelocityGainToolStripMenuItem,
themeMenuItem,
form
);
var mouseWatcher = new MouseWatcher(form, mouseLabel, accelCharts, settings);
return new AccelGUI(
form,
accelCalculator,
accelCharts,
settings,
applyOptions,
writeButton,
toggleButton,
mouseWatcher,
scaleMenuItem,
deviceMenuItem);
}
#endregion Methods
}
}