TAStudio work:
-Fixed InputRoll.VisibleRows property. -Removed useless check for NeedsScrollbar. -Removed TAStudio.ListView.cs property for hiding lag frames; changed InputRoll.cs to do that work more efficiently. -Feature: User can now edit float values by holding the mouse button and dragging up/down. -Bugfix: Moving the cursor past first displayed row while painting would not cause first displayed row to be painted. (and similarly with last)
This commit is contained in:
parent
aa2984dd96
commit
81a8d38ca4
|
@ -527,22 +527,14 @@ namespace BizHawk.Client.EmuHawk
|
|||
[DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
|
||||
public int FirstVisibleRow
|
||||
{
|
||||
get
|
||||
get // SuuperW: This was checking if the scroll bars were needed, which is useless because their Value is 0 if they aren't needed.
|
||||
{
|
||||
if (HorizontalOrientation)
|
||||
{
|
||||
if (NeedsHScrollbar)
|
||||
{
|
||||
return HBar.Value / CellWidth;
|
||||
}
|
||||
return HBar.Value / CellWidth;
|
||||
}
|
||||
|
||||
if (NeedsVScrollbar)
|
||||
{
|
||||
return VBar.Value / CellHeight;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return VBar.Value / CellHeight;
|
||||
}
|
||||
|
||||
set
|
||||
|
@ -578,6 +570,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
set
|
||||
{
|
||||
FirstVisibleRow = Math.Max(value - VisibleRows, 0);
|
||||
if (LastVisibleRow != value)
|
||||
{
|
||||
FirstVisibleRow -= (LastVisibleRow - value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -597,14 +593,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
if (HorizontalOrientation)
|
||||
{
|
||||
var width = DrawWidth - (NeedsVScrollbar ? VBar.Width : 0);
|
||||
|
||||
return (width - ColumnWidth) / CellWidth;
|
||||
return (DrawWidth - ColumnWidth) / CellWidth;
|
||||
}
|
||||
|
||||
var height = DrawHeight - (NeedsHScrollbar ? HBar.Height : (CellHeight - 1));
|
||||
|
||||
return (height / CellHeight) - 1; // adelikat: -1 to compensate for what this math should be doing anyway, TODO: figure out why it doesn't work without it?
|
||||
return (DrawHeight - ColumnHeight) / CellHeight;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1196,7 +1188,24 @@ namespace BizHawk.Client.EmuHawk
|
|||
_currentX = e.X;
|
||||
_currentY = e.Y;
|
||||
|
||||
var newCell = CalculatePointedCell(e.X, e.Y);
|
||||
if (IsPaintDown)
|
||||
{
|
||||
if (HorizontalOrientation)
|
||||
{
|
||||
if (e.X <= ColumnWidth)
|
||||
_currentX = ColumnWidth + 2; // 2 because ColumnWidth/Height isn't correct
|
||||
else if (e.X > Width)
|
||||
_currentX = Width;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (e.Y <= ColumnHeight)
|
||||
_currentY = ColumnHeight + 2;
|
||||
else if (e.Y > Height)
|
||||
_currentX = Height;
|
||||
}
|
||||
}
|
||||
var newCell = CalculatePointedCell(_currentX.Value, _currentY.Value);
|
||||
// SuuperW: Hide lag frames
|
||||
if (QueryFrameLag != null && newCell.RowIndex.HasValue)
|
||||
{
|
||||
|
@ -1974,7 +1983,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
// SuuperW: Count lag frames between FirstDisplayed and given display position
|
||||
private int CountLagFramesDisplay(int relativeIndex)
|
||||
{
|
||||
if (QueryFrameLag != null)
|
||||
if (QueryFrameLag != null && LagFramesToHide != 0)
|
||||
{
|
||||
int count = 0;
|
||||
for (int i = 0; i <= relativeIndex; i++)
|
||||
|
@ -1987,7 +1996,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
// Count lag frames between FirstDisplayed and given frame index (plus FirstDisplayed)
|
||||
private int CountLagFramesAbsolute(int index)
|
||||
{
|
||||
if (QueryFrameLag != null)
|
||||
if (QueryFrameLag != null && LagFramesToHide != 0)
|
||||
{
|
||||
int count = 0;
|
||||
for (int i = 0; i + count <= index; i++)
|
||||
|
@ -2000,7 +2009,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private void SetLagFramesArray()
|
||||
{
|
||||
if (QueryFrameLag != null)
|
||||
if (QueryFrameLag != null && LagFramesToHide != 0)
|
||||
{
|
||||
bool showNext = false;
|
||||
// First one needs to check BACKWARDS for lag frame count.
|
||||
|
@ -2031,10 +2040,13 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
for (int i = 0; i < VisibleRows; i++)
|
||||
lagFrames[i] = 0;
|
||||
}
|
||||
private void SetLagFramesFirst()
|
||||
{
|
||||
if (QueryFrameLag != null)
|
||||
if (QueryFrameLag != null && LagFramesToHide != 0)
|
||||
{
|
||||
// Count how many lag frames are above displayed area.
|
||||
int count = 0;
|
||||
|
|
|
@ -43,7 +43,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private void MarkerControl_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
public InputRoll MarkerInputRoll { get { return MarkerView; } }
|
||||
|
@ -77,7 +77,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
color = Color.White;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void MarkerView_QueryItemText(int index, InputRoll.RollColumn column, out string text)
|
||||
|
@ -140,18 +140,17 @@ namespace BizHawk.Client.EmuHawk
|
|||
Tastudio.GoToMarker(SelectedMarkers.First());
|
||||
}
|
||||
|
||||
// SuuperW: Marker renaming can be done with a right-click.
|
||||
// A much more useful feature would be to easily jump to it. I'll put that in TAStudio.Navigation.cs
|
||||
private void MarkerView_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (MarkerView.CurrentCell != null && MarkerView.CurrentCell.RowIndex.HasValue &&
|
||||
MarkerView.CurrentCell.RowIndex < MarkerView.RowCount)
|
||||
{
|
||||
var marker = Tastudio.CurrentTasMovie.Markers[MarkerView.CurrentCell.RowIndex.Value];
|
||||
// Tastudio.CallEditMarkerPopUp(marker);
|
||||
Tastudio.GoToFrame(marker.Frame);
|
||||
}
|
||||
}
|
||||
// SuuperW: Marker renaming can be done with a right-click.
|
||||
// A much more useful feature would be to easily jump to it.
|
||||
private void MarkerView_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (MarkerView.CurrentCell != null && MarkerView.CurrentCell.RowIndex.HasValue &&
|
||||
MarkerView.CurrentCell.RowIndex < MarkerView.RowCount)
|
||||
{
|
||||
var marker = Tastudio.CurrentTasMovie.Markers[MarkerView.CurrentCell.RowIndex.Value];
|
||||
Tastudio.GoToFrame(marker.Frame);
|
||||
}
|
||||
}
|
||||
|
||||
public void EditMarker()
|
||||
{
|
||||
|
@ -174,6 +173,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
RemoveBtn_Click(null, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -680,7 +680,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
this.HideLagFrames0.CheckOnClick = true;
|
||||
this.HideLagFrames0.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.HideLagFrames0.Name = "HideLagFrames0";
|
||||
this.HideLagFrames0.Size = new System.Drawing.Size(152, 22);
|
||||
this.HideLagFrames0.Size = new System.Drawing.Size(131, 22);
|
||||
this.HideLagFrames0.Tag = "";
|
||||
this.HideLagFrames0.Text = "Don\'t Hide";
|
||||
this.HideLagFrames0.Click += new System.EventHandler(this.HideLagFrames0_Click);
|
||||
|
@ -689,14 +689,14 @@ namespace BizHawk.Client.EmuHawk
|
|||
//
|
||||
this.HideLagFrames1.CheckOnClick = true;
|
||||
this.HideLagFrames1.Name = "HideLagFrames1";
|
||||
this.HideLagFrames1.Size = new System.Drawing.Size(152, 22);
|
||||
this.HideLagFrames1.Size = new System.Drawing.Size(131, 22);
|
||||
this.HideLagFrames1.Text = "1 (30 fps)";
|
||||
this.HideLagFrames1.Click += new System.EventHandler(this.HideLagFrames1_Click);
|
||||
//
|
||||
// HideLagFrames2
|
||||
//
|
||||
this.HideLagFrames2.Name = "HideLagFrames2";
|
||||
this.HideLagFrames2.Size = new System.Drawing.Size(152, 22);
|
||||
this.HideLagFrames2.Size = new System.Drawing.Size(131, 22);
|
||||
this.HideLagFrames2.Text = "2 (20 fps)";
|
||||
this.HideLagFrames2.Click += new System.EventHandler(this.HideLagFrames2_Click);
|
||||
//
|
||||
|
@ -704,7 +704,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
//
|
||||
this.HideLagFrames3.CheckOnClick = true;
|
||||
this.HideLagFrames3.Name = "HideLagFrames3";
|
||||
this.HideLagFrames3.Size = new System.Drawing.Size(152, 22);
|
||||
this.HideLagFrames3.Size = new System.Drawing.Size(131, 22);
|
||||
this.HideLagFrames3.Tag = "";
|
||||
this.HideLagFrames3.Text = "3 (15fps)";
|
||||
this.HideLagFrames3.Click += new System.EventHandler(this.HideLagFrames3_Click);
|
||||
|
@ -763,7 +763,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
this.TasView.FullRowSelect = true;
|
||||
this.TasView.HorizontalOrientation = false;
|
||||
this.TasView.LagFramesToHide = 0;
|
||||
this.TasView.LastVisibleRow = 24;
|
||||
this.TasView.LastVisibleRow = 28;
|
||||
this.TasView.Location = new System.Drawing.Point(8, 27);
|
||||
this.TasView.MaxCharactersInHorizontal = 1;
|
||||
this.TasView.MultiSelect = false;
|
||||
|
@ -780,6 +780,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
this.TasView.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.TasView_MouseDoubleClick);
|
||||
this.TasView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.TasView_MouseDown);
|
||||
this.TasView.MouseEnter += new System.EventHandler(this.TasView_MouseEnter);
|
||||
this.TasView.MouseMove += new System.Windows.Forms.MouseEventHandler(this.TasView_MouseMove);
|
||||
this.TasView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.TasView_MouseUp);
|
||||
this.TasView.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.TasView_PreviewKeyDown);
|
||||
//
|
||||
|
|
|
@ -21,15 +21,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
private string _floatEditColumn = string.Empty;
|
||||
private int _floatEditRow = -1;
|
||||
private string _floatTypedValue;
|
||||
|
||||
|
||||
private bool HideLagFrames
|
||||
{
|
||||
get { return TasView.LagFramesToHide > 0; }
|
||||
}
|
||||
private int _floatEditYPos = -1;
|
||||
|
||||
private bool _triggerAutoRestore; // If true, autorestore will be called on mouse up
|
||||
private int? _triggerAutoRestoreFromFrame; // If set and _triggerAutoRestore is true, will clal GoToFrameIfNecessary() with this value
|
||||
private int? _triggerAutoRestoreFromFrame; // If set and _triggerAutoRestore is true, will call GoToFrameIfNecessary() with this value
|
||||
|
||||
public static Color CurrentFrame_FrameCol = Color.FromArgb(0xCFEDFC);
|
||||
public static Color CurrentFrame_InputLog = Color.FromArgb(0xB5E7F7);
|
||||
|
@ -191,7 +186,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
// SuuperW: Used in InputRoll.cs to hide lag frames.
|
||||
private bool TasView_QueryFrameLag(int index)
|
||||
{
|
||||
return HideLagFrames && CurrentTasMovie[index].Lagged.HasValue && CurrentTasMovie[index].Lagged.Value;
|
||||
return CurrentTasMovie[index].Lagged.HasValue && CurrentTasMovie[index].Lagged.Value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -258,15 +253,25 @@ namespace BizHawk.Client.EmuHawk
|
|||
var frame = TasView.CurrentCell.RowIndex.Value;
|
||||
var buttonName = TasView.CurrentCell.Column.Name;
|
||||
|
||||
// SuuperW: Exit float editing mode
|
||||
if (_floatEditColumn != buttonName || _floatEditRow != frame)
|
||||
{
|
||||
_floatEditRow = -1;
|
||||
TasView.Refresh();
|
||||
}
|
||||
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
// SuuperW: Exit float editing mode, or re-enter mouse editing
|
||||
if (_floatEditRow != -1)
|
||||
{
|
||||
if (_floatEditColumn != buttonName || _floatEditRow != frame)
|
||||
{
|
||||
_floatEditRow = -1;
|
||||
TasView.Refresh();
|
||||
}
|
||||
else
|
||||
{
|
||||
_floatEditYPos = e.Y;
|
||||
_floatPaintState = CurrentTasMovie.GetFloatValue(frame, buttonName);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (TasView.CurrentCell.Column.Name == MarkerColumnName)
|
||||
{
|
||||
_startMarkerDrag = true;
|
||||
|
@ -299,15 +304,37 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
else
|
||||
{
|
||||
_startFloatDrawColumn = buttonName;
|
||||
if (e.Clicks != 2)
|
||||
{
|
||||
_startFloatDrawColumn = buttonName;
|
||||
|
||||
if (frame < CurrentTasMovie.InputLogLength)
|
||||
{
|
||||
_floatPaintState = CurrentTasMovie.GetFloatValue(frame, buttonName);
|
||||
if (frame < CurrentTasMovie.InputLogLength)
|
||||
{
|
||||
_floatPaintState = CurrentTasMovie.GetFloatValue(frame, buttonName);
|
||||
}
|
||||
else
|
||||
{
|
||||
_floatPaintState = Global.ClickyVirtualPadController.GetFloat(buttonName);
|
||||
}
|
||||
}
|
||||
else
|
||||
else // Double-click enters float editing mode
|
||||
{
|
||||
_floatPaintState = Global.ClickyVirtualPadController.GetFloat(buttonName);
|
||||
if (_floatEditColumn == buttonName && _floatEditRow == frame)
|
||||
{
|
||||
_floatEditRow = -1;
|
||||
RefreshDialog();
|
||||
}
|
||||
else
|
||||
{
|
||||
_floatEditColumn = buttonName;
|
||||
_floatEditRow = frame;
|
||||
_floatTypedValue = "";
|
||||
_floatEditYPos = e.Y;
|
||||
_floatPaintState = CurrentTasMovie.GetFloatValue(_floatEditRow, _floatEditColumn);
|
||||
_triggerAutoRestore = true;
|
||||
_triggerAutoRestoreFromFrame = frame;
|
||||
RefreshDialog();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -326,7 +353,14 @@ namespace BizHawk.Client.EmuHawk
|
|||
_startFrameDrag = false;
|
||||
_startBoolDrawColumn = string.Empty;
|
||||
_startFloatDrawColumn = string.Empty;
|
||||
// Exit float editing if value was changed with cursor
|
||||
if (_floatEditRow != -1 && _floatPaintState != CurrentTasMovie.GetFloatValue(_floatEditRow, _floatEditColumn))
|
||||
{
|
||||
_floatEditRow = -1;
|
||||
RefreshDialog();
|
||||
}
|
||||
_floatPaintState = 0;
|
||||
_floatEditYPos = -1;
|
||||
}
|
||||
|
||||
_supressContextMenu = false;
|
||||
|
@ -369,34 +403,11 @@ namespace BizHawk.Client.EmuHawk
|
|||
CallAddMarkerPopUp(TasView.CurrentCell.RowIndex.Value);
|
||||
}
|
||||
}
|
||||
else if (Global.MovieSession.MovieControllerAdapter.Type.FloatControls.Contains(buttonName))
|
||||
{ // SuuperW: Edit float input
|
||||
int frame = TasView.CurrentCell.RowIndex.Value;
|
||||
if (_floatEditColumn == buttonName && _floatEditRow == frame)
|
||||
{
|
||||
_floatEditRow = -1;
|
||||
RefreshDialog();
|
||||
}
|
||||
else
|
||||
{
|
||||
_floatEditColumn = buttonName;
|
||||
_floatEditRow = frame;
|
||||
_floatTypedValue = "";
|
||||
_triggerAutoRestore = true;
|
||||
_triggerAutoRestoreFromFrame = frame;
|
||||
RefreshDialog();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void TasView_PointedCellChanged(object sender, InputRoll.CellEventArgs e)
|
||||
{
|
||||
// SuuperW: Will this allow TasView to see KeyDown?
|
||||
TasView.Select();
|
||||
// Temporary test code
|
||||
TasView.Refresh();
|
||||
|
||||
// TODO: think about nullability
|
||||
// For now return if a null because this happens OnEnter which doesn't have any of the below behaviors yet?
|
||||
// Most of these are stupid but I got annoyed at null crashes
|
||||
|
@ -470,6 +481,34 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
private void TasView_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
// For float editing
|
||||
int increment = (e.Y - _floatEditYPos) / 3;
|
||||
if (_floatEditYPos == -1)
|
||||
return;
|
||||
|
||||
float value = _floatPaintState + increment;
|
||||
Emulation.Common.ControllerDefinition.FloatRange range = Global.MovieSession.MovieControllerAdapter.Type.FloatRanges
|
||||
[Global.MovieSession.MovieControllerAdapter.Type.FloatControls.IndexOf(_floatEditColumn)];
|
||||
// Range for N64 Y axis has max -128 and min 127. That should probably be fixed elsewhere, but I'll put a quick fix here anyway.
|
||||
float rMax = range.Max;
|
||||
float rMin = range.Min;
|
||||
if (rMax < rMin)
|
||||
{
|
||||
rMax = range.Min;
|
||||
rMin = range.Max;
|
||||
}
|
||||
if (value > rMax)
|
||||
value = rMax;
|
||||
else if (value < rMin)
|
||||
value = rMin;
|
||||
|
||||
CurrentTasMovie.SetFloatState(_floatEditRow, _floatEditColumn, value);
|
||||
|
||||
RefreshDialog();
|
||||
}
|
||||
|
||||
private void TasView_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
SetSplicer();
|
||||
|
@ -546,6 +585,11 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
else if (e.KeyCode == Keys.Escape)
|
||||
{
|
||||
if (_floatEditYPos != -1) // Cancel change from dragging cursor
|
||||
{
|
||||
_floatEditYPos = -1;
|
||||
CurrentTasMovie.SetFloatState(_floatEditRow, _floatEditColumn, _floatPaintState);
|
||||
}
|
||||
_floatEditRow = -1;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -727,5 +727,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
MarkerControl.RemoveMarker();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue