tastudio: move arrow keys logic to hotkeys

disallow sending Minus to MainForm
This commit is contained in:
feos 2016-11-20 23:25:54 +03:00
parent 438e891358
commit 95dc2fd6b3
4 changed files with 227 additions and 153 deletions

View File

@ -229,6 +229,12 @@ namespace BizHawk.Client.Common
Bind("TAStudio", "Insert Frame", "Insert"),
Bind("TAStudio", "Delete Frames", "Ctrl+Delete"),
Bind("TAStudio", "Clone Frames", "Ctrl+Insert"),
Bind("TAStudio", "Analog Increment By One", "UpArrow"),
Bind("TAStudio", "Analog Decrement By One", "DownArrow"),
Bind("TAStudio", "Analog Increment By Ten", "Shift+UpArrow"),
Bind("TAStudio", "Analog Decrement By Ten", "Shift+DownArrow"),
Bind("TAStudio", "Analog Maximum", "RightArrow"),
Bind("TAStudio", "Analog Minimum", "LeftArrow"),
Bind("SNES", "Toggle BG 1"),
Bind("SNES", "Toggle BG 2"),

View File

@ -397,6 +397,30 @@ namespace BizHawk.Client.EmuHawk
if (GlobalWin.Tools.IsLoaded<TAStudio>())
GlobalWin.Tools.TAStudio.CloneFramesExternal();
break;
case "Analog Increment By One":
if (GlobalWin.Tools.IsLoaded<TAStudio>())
GlobalWin.Tools.TAStudio.AnalogIncrementByOne();
break;
case "Analog Decrement By One":
if (GlobalWin.Tools.IsLoaded<TAStudio>())
GlobalWin.Tools.TAStudio.AnalogDecrementByOne();
break;
case "Analog Increment By Ten":
if (GlobalWin.Tools.IsLoaded<TAStudio>())
GlobalWin.Tools.TAStudio.AnalogIncrementByTen();
break;
case "Analog Decrement By Ten":
if (GlobalWin.Tools.IsLoaded<TAStudio>())
GlobalWin.Tools.TAStudio.AnalogDecrementByTen();
break;
case "Analog Maximum":
if (GlobalWin.Tools.IsLoaded<TAStudio>())
GlobalWin.Tools.TAStudio.AnalogMax();
break;
case "Analog Minimum":
if (GlobalWin.Tools.IsLoaded<TAStudio>())
GlobalWin.Tools.TAStudio.AnalogMin();
break;
// SNES
case "Toggle BG 1":

View File

@ -695,7 +695,7 @@ namespace BizHawk.Client.EmuHawk
{
if(yield_alt) return false;
var ts = ActiveForm as TAStudio;
if(ts.IsInMenuLoop)
if(ts.IsInMenuLoop || ts.FloatEditingMode)
return false;
}

View File

@ -994,6 +994,198 @@ namespace BizHawk.Client.EmuHawk
SetSplicer();
}
public void AnalogIncrementByOne()
{
if (FloatEditingMode)
EditAnalogProgrammatically(new KeyEventArgs(Keys.Up));
}
public void AnalogDecrementByOne()
{
if (FloatEditingMode)
EditAnalogProgrammatically(new KeyEventArgs(Keys.Down));
}
public void AnalogIncrementByTen()
{
if (FloatEditingMode)
EditAnalogProgrammatically(new KeyEventArgs(Keys.Up | Keys.Shift));
}
public void AnalogDecrementByTen()
{
if (FloatEditingMode)
EditAnalogProgrammatically(new KeyEventArgs(Keys.Down | Keys.Shift));
}
public void AnalogMax()
{
if (FloatEditingMode)
EditAnalogProgrammatically(new KeyEventArgs(Keys.Right));
}
public void AnalogMin()
{
if (FloatEditingMode)
EditAnalogProgrammatically(new KeyEventArgs(Keys.Left));
}
public void EditAnalogProgrammatically(KeyEventArgs e)
{
if (!FloatEditingMode)
return;
float value = CurrentTasMovie.GetFloatState(_floatEditRow, _floatEditColumn);
float prev = value;
string prevTyped = _floatTypedValue;
Emulation.Common.ControllerDefinition.FloatRange range = Global.MovieSession.MovieControllerAdapter.Type.FloatRanges
[Global.MovieSession.MovieControllerAdapter.Type.FloatControls.IndexOf(_floatEditColumn)];
float rMax = range.Max;
float rMin = range.Min;
// Range for N64 Y axis has max -128 and min 127. That should probably be fixed ControllerDefinition.cs, but I'll put a quick fix here anyway.
if (rMax < rMin)
{
rMax = range.Min;
rMin = range.Max;
}
// feos: typing past max digits overwrites existing value, not touching the sign
// but doesn't handle situations where the range is like -50 through 100, where minimum is negative and has less digits
// it just uses 3 as maxDigits there too, leaving room for typing impossible values (that are still ignored by the game and then clamped)
int maxDigits = range.MaxDigits();
int curDigits = _floatTypedValue.Length;
string curMinus;
if (_floatTypedValue.StartsWith("-"))
{
curDigits -= 1;
curMinus = "-";
}
else
{
curMinus = "";
}
if (e.KeyCode == Keys.Right)
{
value = rMax;
_floatTypedValue = value.ToString();
}
else if (e.KeyCode == Keys.Left)
{
value = rMin;
_floatTypedValue = value.ToString();
}
else if (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
{
if (curDigits >= maxDigits)
_floatTypedValue = curMinus;
_floatTypedValue += e.KeyCode - Keys.D0;
}
else if (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)
{
if (curDigits >= maxDigits)
_floatTypedValue = curMinus;
_floatTypedValue += e.KeyCode - Keys.NumPad0;
}
else if (e.KeyCode == Keys.OemMinus || e.KeyCode == Keys.Subtract)
{
if (_floatTypedValue.StartsWith("-"))
_floatTypedValue = _floatTypedValue.Substring(1);
else
_floatTypedValue = "-" + _floatTypedValue;
}
else if (e.KeyCode == Keys.Back)
{
if (_floatTypedValue == "") // Very first key press is backspace?
_floatTypedValue = value.ToString();
_floatTypedValue = _floatTypedValue.Substring(0, _floatTypedValue.Length - 1);
if (_floatTypedValue == "" || _floatTypedValue == "-")
value = 0f;
else
value = Convert.ToSingle(_floatTypedValue);
}
else if (e.KeyCode == Keys.Enter)
{
if (_floatEditYPos != -1)
{
_floatEditYPos = -1;
}
floatEditRow = -1;
}
else if (e.KeyCode == Keys.Escape)
{
if (_floatEditYPos != -1)
{
_floatEditYPos = -1;
}
if (_floatBackupState != _floatPaintState)
{
CurrentTasMovie.SetFloatState(_floatEditRow, _floatEditColumn, _floatBackupState);
_triggerAutoRestore = true;
JumpToGreenzone();
DoTriggeredAutoRestoreIfNeeded();
}
floatEditRow = -1;
}
else
{
float changeBy = 0;
if (e.KeyCode == Keys.Up)
changeBy = 1; // We're assuming for now that ALL float controls should contain integers.
else if (e.KeyCode == Keys.Down)
changeBy = -1;
if (Control.ModifierKeys == Keys.Shift)
changeBy *= 10;
value += changeBy;
if (changeBy != 0)
_floatTypedValue = value.ToString();
}
if (!FloatEditingMode)
CurrentTasMovie.ChangeLog.EndBatch();
else
{
if (_floatTypedValue == "")
{
if (prevTyped != "")
{
value = 0f;
CurrentTasMovie.SetFloatState(_floatEditRow, _floatEditColumn, value);
}
}
else
{
if (float.TryParse(_floatTypedValue, out value)) // String "-" can't be parsed.
{
if (value > rMax)
value = rMax;
else if (value < rMin)
value = rMin;
_floatTypedValue = value.ToString();
CurrentTasMovie.SetFloatState(_floatEditRow, _floatEditColumn, value);
}
}
if (_extraFloatRows.Any())
{
foreach (int row in _extraFloatRows)
{
CurrentTasMovie.SetFloatState(row, _floatEditColumn, value);
}
}
if (value != prev) // Auto-restore
{
_triggerAutoRestore = true;
JumpToGreenzone();
DoTriggeredAutoRestoreIfNeeded();
}
}
RefreshDialog();
}
private void TasView_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && !e.Shift && !e.Alt && e.KeyCode == Keys.Left) // Ctrl + Left
@ -1005,158 +1197,10 @@ namespace BizHawk.Client.EmuHawk
GoToNextMarker();
}
// SuuperW: Float Editing
if (FloatEditingMode)
{
float value = CurrentTasMovie.GetFloatState(_floatEditRow, _floatEditColumn);
float prev = value;
string prevTyped = _floatTypedValue;
Emulation.Common.ControllerDefinition.FloatRange range = Global.MovieSession.MovieControllerAdapter.Type.FloatRanges
[Global.MovieSession.MovieControllerAdapter.Type.FloatControls.IndexOf(_floatEditColumn)];
float rMax = range.Max;
float rMin = range.Min;
// Range for N64 Y axis has max -128 and min 127. That should probably be fixed ControllerDefinition.cs, but I'll put a quick fix here anyway.
if (rMax < rMin)
{
rMax = range.Min;
rMin = range.Max;
}
// feos: typing past max digits overwrites existing value, not touching the sign
// but doesn't handle situations where the range is like -50 through 100, where minimum is negative and has less digits
// it just uses 3 as maxDigits there too, leaving room for typing impossible values (that are still ignored by the game and then clamped)
int maxDigits = range.MaxDigits();
int curDigits = _floatTypedValue.Length;
string curMinus;
if (_floatTypedValue.StartsWith("-"))
{
curDigits -= 1;
curMinus = "-";
}
else
{
curMinus = "";
}
if (e.KeyCode == Keys.Right)
{
value = rMax;
_floatTypedValue = value.ToString();
}
else if (e.KeyCode == Keys.Left)
{
value = rMin;
_floatTypedValue = value.ToString();
}
else if (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
{
if (curDigits >= maxDigits)
_floatTypedValue = curMinus;
_floatTypedValue += e.KeyCode - Keys.D0;
}
else if (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)
{
if (curDigits >= maxDigits)
_floatTypedValue = curMinus;
_floatTypedValue += e.KeyCode - Keys.NumPad0;
}
else if (e.KeyCode == Keys.OemMinus || e.KeyCode == Keys.Subtract)
{
if (_floatTypedValue.StartsWith("-"))
_floatTypedValue = _floatTypedValue.Substring(1);
else
_floatTypedValue = "-" + _floatTypedValue;
}
else if (e.KeyCode == Keys.Back)
{
if (_floatTypedValue == "") // Very first key press is backspace?
_floatTypedValue = value.ToString();
_floatTypedValue = _floatTypedValue.Substring(0, _floatTypedValue.Length - 1);
if (_floatTypedValue == "" || _floatTypedValue == "-")
value = 0f;
else
value = Convert.ToSingle(_floatTypedValue);
}
else if (e.KeyCode == Keys.Enter)
{
if (_floatEditYPos != -1)
{
_floatEditYPos = -1;
}
floatEditRow = -1;
}
else if (e.KeyCode == Keys.Escape)
{
if (_floatEditYPos != -1)
{
_floatEditYPos = -1;
}
if (_floatBackupState != _floatPaintState)
{
CurrentTasMovie.SetFloatState(_floatEditRow, _floatEditColumn, _floatBackupState);
_triggerAutoRestore = true;
JumpToGreenzone();
DoTriggeredAutoRestoreIfNeeded();
}
floatEditRow = -1;
}
else
{
float changeBy = 0;
if (e.KeyCode == Keys.Up)
changeBy = 1; // We're assuming for now that ALL float controls should contain integers.
else if (e.KeyCode == Keys.Down)
changeBy = -1;
if (e.Shift)
changeBy *= 10;
value += changeBy;
if (changeBy != 0)
_floatTypedValue = value.ToString();
}
if (!FloatEditingMode)
CurrentTasMovie.ChangeLog.EndBatch();
else
{
if (_floatTypedValue == "")
{
if (prevTyped != "")
{
value = 0f;
CurrentTasMovie.SetFloatState(_floatEditRow, _floatEditColumn, value);
}
}
else
{
if (float.TryParse(_floatTypedValue, out value)) // String "-" can't be parsed.
{
if (value > rMax)
value = rMax;
else if (value < rMin)
value = rMin;
_floatTypedValue = value.ToString();
CurrentTasMovie.SetFloatState(_floatEditRow, _floatEditColumn, value);
}
}
if (_extraFloatRows.Any())
{
foreach (int row in _extraFloatRows)
{
CurrentTasMovie.SetFloatState(row, _floatEditColumn, value);
}
}
if (value != prev) // Auto-restore
{
_triggerAutoRestore = true;
JumpToGreenzone();
DoTriggeredAutoRestoreIfNeeded();
}
}
}
if (FloatEditingMode &&
e.KeyCode != Keys.Right && e.KeyCode != Keys.Left &&
e.KeyCode != Keys.Up && e.KeyCode != Keys.Down)
EditAnalogProgrammatically(e);
RefreshDialog();
}