BizHawk/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs

268 lines
6.8 KiB
C#
Raw Normal View History

2014-07-09 23:04:22 +00:00
using System;
using System.Drawing;
using System.Windows.Forms;
using BizHawk.Client.Common;
namespace BizHawk.Client.EmuHawk
{
public partial class TAStudio
{
// Input Painting
2014-07-11 16:26:19 +00:00
private string _startBoolDrawColumn = string.Empty;
private string _startFloatDrawColumn = string.Empty;
private bool _boolPaintState;
2014-07-11 16:26:19 +00:00
private float _floatPaintState;
private bool _startMarkerDrag;
private bool _startFrameDrag;
private bool _rightMouseHeld = false;
2014-07-16 00:10:37 +00:00
private Color CurrentFrame_FrameCol = Color.FromArgb(0xCFEDFC);
private Color CurrentFrame_InputLog = Color.FromArgb(0xB5E7F7);
private Color GreenZone_FrameCol = Color.FromArgb(0xDDFFDD);
private Color GreenZone_InputLog = Color.FromArgb(0xC4F7C8);
private Color LagZone_FrameCol = Color.FromArgb(0xFFDCDD);
private Color LagZone_InputLog = Color.FromArgb(0xF0D0D2);
private Color NoState_GreenZone_FrameCol = Color.FromArgb(0xF9FFF9);
private Color NoState_GreenZone_InputLog = Color.FromArgb(0xE0FBE0);
private Color NoState_LagZone_FrameCol = Color.FromArgb(0xFFE9E9);
private Color NoState_LagZone_InputLog = Color.FromArgb(0xF0D0D2);
private Color Marker_FrameCol = Color.FromArgb(0xF7FFC9);
2014-07-09 23:04:22 +00:00
#region Query callbacks
private void TasView_QueryItemBkColor(int index, int column, ref Color color)
{
var record = _tas[index];
var columnName = TasView.Columns[column].Name;
2014-07-16 00:10:37 +00:00
if (columnName == MarkerColumnName)
2014-07-09 23:04:22 +00:00
{
2014-07-16 00:10:37 +00:00
color = Color.White;
2014-07-09 23:04:22 +00:00
}
2014-07-16 00:10:37 +00:00
else if (columnName == FrameColumnName)
2014-07-09 23:04:22 +00:00
{
2014-07-16 00:10:37 +00:00
if (Global.Emulator.Frame == index)
{
color = CurrentFrame_FrameCol;
}
else if (_tas.Markers.IsMarker(index))
{
color = Marker_FrameCol;
}
else if (record.Lagged.HasValue)
{
if (record.Lagged.Value)
{
2014-07-16 00:10:37 +00:00
color = record.HasState ? GreenZone_FrameCol : NoState_GreenZone_FrameCol;
}
else
{
2014-07-16 00:10:37 +00:00
color = record.HasState ? LagZone_FrameCol : NoState_LagZone_InputLog;
}
}
else
{
2014-07-16 00:10:37 +00:00
color = Color.White;
}
}
else
{
if (Global.Emulator.Frame == index)
{
color = CurrentFrame_InputLog;
}
else
{
if (record.Lagged.HasValue)
{
if (record.Lagged.Value)
{
color = record.HasState ? GreenZone_InputLog : NoState_GreenZone_InputLog;
}
else
{
color = record.HasState ? LagZone_InputLog : NoState_LagZone_InputLog;
}
}
else
{
color = (columnName == MarkerColumnName || columnName == FrameColumnName) ?
Color.White :
SystemColors.ControlLight;
}
}
2014-07-09 23:04:22 +00:00
}
}
private void TasView_QueryItemText(int index, int column, out string text)
{
try
{
var columnName = TasView.Columns[column].Name;
if (columnName == MarkerColumnName)
{
2014-07-10 20:15:46 +00:00
text = Global.Emulator.Frame == index ? ">" : string.Empty;
2014-07-09 23:04:22 +00:00
}
else if (columnName == FrameColumnName)
{
2014-07-10 20:15:46 +00:00
text = (index).ToString().PadLeft(5, '0');
2014-07-09 23:04:22 +00:00
}
else
{
2014-07-10 02:45:56 +00:00
text = _tas.DisplayValue(index, columnName);
2014-07-09 23:04:22 +00:00
}
}
catch (Exception ex)
{
text = string.Empty;
MessageBox.Show("oops\n" + ex);
}
}
#endregion
#region Events
private void TasView_MouseDown(object sender, MouseEventArgs e)
{
if (TasView.PointedCell.Row.HasValue && !string.IsNullOrEmpty(TasView.PointedCell.Column))
{
if (e.Button == MouseButtons.Left)
2014-07-09 23:04:22 +00:00
{
if (TasView.PointedCell.Column == MarkerColumnName)
{
_startMarkerDrag = true;
GoToFrame(TasView.PointedCell.Row.Value - 1);
}
else if (TasView.PointedCell.Column == FrameColumnName)
{
_startFrameDrag = true;
}
2014-07-11 16:26:19 +00:00
else
{
var frame = TasView.PointedCell.Row.Value;
var buttonName = TasView.PointedCell.Column;
if (Global.MovieSession.MovieControllerAdapter.Type.BoolButtons.Contains(buttonName))
{
_tas.ToggleBoolState(TasView.PointedCell.Row.Value, TasView.PointedCell.Column);
GoToLastEmulatedFrameIfNecessary(TasView.PointedCell.Row.Value);
TasView.Refresh();
_startBoolDrawColumn = TasView.PointedCell.Column;
_boolPaintState = _tas.BoolIsPressed(frame, buttonName);
}
else
{
_startFloatDrawColumn = TasView.PointedCell.Column;
_floatPaintState = _tas.GetFloatValue(frame, buttonName);
}
2014-07-11 16:26:19 +00:00
}
2014-07-09 23:04:22 +00:00
}
else if (e.Button == MouseButtons.Right)
{
_rightMouseHeld = true;
}
2014-07-09 23:04:22 +00:00
}
}
private void TasView_MouseUp(object sender, MouseEventArgs e)
{
_startMarkerDrag = false;
_startFrameDrag = false;
2014-07-11 16:26:19 +00:00
_startBoolDrawColumn = string.Empty;
_startFloatDrawColumn = string.Empty;
_floatPaintState = 0;
_rightMouseHeld = false;
2014-07-09 23:04:22 +00:00
}
private void TasView_PointedCellChanged(object sender, TasListView.CellEventArgs e)
{
int startVal, endVal;
if (e.OldCell.Row.Value < e.NewCell.Row.Value)
{
startVal = e.OldCell.Row.Value;
endVal = e.NewCell.Row.Value;
}
else
{
startVal = e.NewCell.Row.Value;
endVal = e.OldCell.Row.Value;
}
2014-07-09 23:04:22 +00:00
if (_startMarkerDrag)
{
if (e.NewCell.Row.HasValue)
{
GoToFrame(e.NewCell.Row.Value - 1);
2014-07-09 23:04:22 +00:00
}
}
else if (_startFrameDrag)
{
if (e.OldCell.Row.HasValue && e.NewCell.Row.HasValue)
{
for (var i = startVal + 1; i <= endVal; i++)
{
TasView.SelectItem(i, true);
}
}
}
2014-07-11 16:26:19 +00:00
else if (TasView.IsPaintDown && e.NewCell.Row.HasValue && !string.IsNullOrEmpty(_startBoolDrawColumn))
{
if (e.OldCell.Row.HasValue && e.NewCell.Row.HasValue)
{
for (var i = startVal; i < endVal; i++)
{
_tas.SetBoolState(i, _startBoolDrawColumn, _boolPaintState); // Notice it uses new row, old column, you can only paint across a single column
2014-07-13 17:41:30 +00:00
GoToLastEmulatedFrameIfNecessary(TasView.PointedCell.Row.Value);
2014-07-11 16:26:19 +00:00
}
TasView.Refresh();
}
}
else if (TasView.IsPaintDown && e.NewCell.Row.HasValue && !string.IsNullOrEmpty(_startFloatDrawColumn))
2014-07-09 23:04:22 +00:00
{
if (e.OldCell.Row.HasValue && e.NewCell.Row.HasValue)
{
for (var i = startVal; i < endVal; i++)
{
2014-07-11 16:26:19 +00:00
_tas.SetFloatState(i, _startFloatDrawColumn, _floatPaintState); // Notice it uses new row, old column, you can only paint across a single column
2014-07-13 17:41:30 +00:00
GoToLastEmulatedFrameIfNecessary(TasView.PointedCell.Row.Value);
}
2014-07-11 16:26:19 +00:00
TasView.Refresh();
}
2014-07-09 23:04:22 +00:00
}
}
private void TasView_MouseWheel(object sender, MouseEventArgs e)
{
if (_rightMouseHeld)
{
if (e.Delta < 0)
{
GoToFrame(Global.Emulator.Frame);
}
else
{
GoToFrame(Global.Emulator.Frame - 2);
}
}
}
2014-07-09 23:04:22 +00:00
private void TasView_SelectedIndexChanged(object sender, EventArgs e)
{
SetSplicer();
}
#endregion
}
}