TAStudio - when dragging the frame column to select items, catch the "in betweens" when the mouse moves fast enough to move past some rows.

This commit is contained in:
adelikat 2013-12-20 03:28:25 +00:00
parent c2cc80ee12
commit 57c8b2f75f
2 changed files with 68 additions and 53 deletions

View File

@ -99,7 +99,7 @@ namespace BizHawk.Client.EmuHawk
this.EnableTooltipsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator();
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.TASView = new BizHawk.Client.EmuHawk.TasListView();
this.TasView = new BizHawk.Client.EmuHawk.TasListView();
this.Frame = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.Log = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.TasStatusStrip = new System.Windows.Forms.StatusStrip();
@ -659,27 +659,27 @@ namespace BizHawk.Client.EmuHawk
//
// TASView
//
this.TASView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
this.TasView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.TASView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.TasView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.Frame,
this.Log});
this.TASView.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.TASView.FullRowSelect = true;
this.TASView.GridLines = true;
this.TASView.InputPaintingMode = false;
this.TASView.ItemCount = 0;
this.TASView.Location = new System.Drawing.Point(8, 27);
this.TASView.Name = "TASView";
this.TASView.selectedItem = -1;
this.TASView.Size = new System.Drawing.Size(288, 471);
this.TASView.TabIndex = 1;
this.TASView.UseCompatibleStateImageBehavior = false;
this.TASView.View = System.Windows.Forms.View.Details;
this.TASView.SelectedIndexChanged += new System.EventHandler(this.TASView_SelectedIndexChanged);
this.TASView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.TASView_MouseDown);
this.TASView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.TASView_MouseUp);
this.TasView.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.TasView.FullRowSelect = true;
this.TasView.GridLines = true;
this.TasView.InputPaintingMode = false;
this.TasView.ItemCount = 0;
this.TasView.Location = new System.Drawing.Point(8, 27);
this.TasView.Name = "TASView";
this.TasView.selectedItem = -1;
this.TasView.Size = new System.Drawing.Size(288, 471);
this.TasView.TabIndex = 1;
this.TasView.UseCompatibleStateImageBehavior = false;
this.TasView.View = System.Windows.Forms.View.Details;
this.TasView.SelectedIndexChanged += new System.EventHandler(this.TASView_SelectedIndexChanged);
this.TasView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.TASView_MouseDown);
this.TasView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.TASView_MouseUp);
//
// Frame
//
@ -739,7 +739,7 @@ namespace BizHawk.Client.EmuHawk
this.Controls.Add(this.TasPlaybackBox);
this.Controls.Add(this.TasStatusStrip);
this.Controls.Add(this.TASMenu);
this.Controls.Add(this.TASView);
this.Controls.Add(this.TasView);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.TASMenu;
this.MinimumSize = new System.Drawing.Size(437, 148);
@ -769,7 +769,7 @@ namespace BizHawk.Client.EmuHawk
private System.Windows.Forms.ToolStripMenuItem ExitMenuItem;
private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem ConfigSubMenu;
private TasListView TASView;
private TasListView TasView;
private System.Windows.Forms.ColumnHeader Log;
private System.Windows.Forms.ToolStripMenuItem RecentSubMenu;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;

View File

@ -34,9 +34,9 @@ namespace BizHawk.Client.EmuHawk
public TAStudio()
{
InitializeComponent();
TASView.QueryItemText += TASView_QueryItemText;
TASView.QueryItemBkColor += TASView_QueryItemBkColor;
TASView.VirtualMode = true;
TasView.QueryItemText += TASView_QueryItemText;
TasView.QueryItemBkColor += TASView_QueryItemBkColor;
TasView.VirtualMode = true;
Closing += (o, e) =>
{
if (AskSave())
@ -56,8 +56,8 @@ namespace BizHawk.Client.EmuHawk
};
TopMost = Global.Config.TAStudioTopMost;
TASView.InputPaintingMode = Global.Config.TAStudioDrawInput;
TASView.PointedCellChanged += TASView_PointedCellChanged;
TasView.InputPaintingMode = Global.Config.TAStudioDrawInput;
TasView.PointedCellChanged += TASView_PointedCellChanged;
}
public bool AskSave()
@ -98,14 +98,14 @@ namespace BizHawk.Client.EmuHawk
return;
}
TASView.ItemCount = _tas.InputLogLength;
TasView.ItemCount = _tas.InputLogLength;
if (_tas.IsRecording)
{
TASView.ensureVisible(_tas.InputLogLength - 1);
TasView.ensureVisible(_tas.InputLogLength - 1);
}
else
{
TASView.ensureVisible(Global.Emulator.Frame - 1);
TasView.ensureVisible(Global.Emulator.Frame - 1);
}
}
@ -140,8 +140,8 @@ namespace BizHawk.Client.EmuHawk
{
try
{
var columnName = TASView.Columns[column].Name;
var columnText = TASView.Columns[column].Text;
var columnName = TasView.Columns[column].Name;
var columnText = TasView.Columns[column].Text;
if (columnName == MarkerColumnName)
{
@ -218,13 +218,13 @@ namespace BizHawk.Client.EmuHawk
GlobalWin.OSD.AddMessage("new TAStudio session started");
_tas.StartNewRecording();
GlobalWin.MainForm.StartNewMovie(_tas, true, true);
TASView.ItemCount = _tas.InputLogLength;
TasView.ItemCount = _tas.InputLogLength;
}
}
private void SetUpColumns()
{
TASView.Columns.Clear();
TasView.Columns.Clear();
AddColumn(MarkerColumnName, String.Empty, 18);
AddColumn(FrameColumnName, "Frame#", 68);
@ -236,7 +236,7 @@ namespace BizHawk.Client.EmuHawk
public void AddColumn(string columnName, string columnText, int columnWidth)
{
if (TASView.Columns[columnName] == null)
if (TasView.Columns[columnName] == null)
{
var column = new ColumnHeader
{
@ -245,7 +245,7 @@ namespace BizHawk.Client.EmuHawk
Width = columnWidth,
};
TASView.Columns.Add(column);
TasView.Columns.Add(column);
}
}
@ -286,7 +286,7 @@ namespace BizHawk.Client.EmuHawk
else
{
Global.Config.RecentTas.Add(path);
TASView.ItemCount = _tas.InputLogLength;
TasView.ItemCount = _tas.InputLogLength;
}
}
}
@ -305,8 +305,8 @@ namespace BizHawk.Client.EmuHawk
Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(_tas[frame].State.ToArray())));
Global.Emulator.FrameAdvance(true, true);
GlobalWin.DisplayManager.NeedsToPaint = true;
TASView.ensureVisible(frame);
TASView.Refresh();
TasView.ensureVisible(frame);
TasView.Refresh();
}
else
{
@ -318,7 +318,7 @@ namespace BizHawk.Client.EmuHawk
{
// TODO: columns selected
// TODO: clipboard
ListView.SelectedIndexCollection list = TASView.SelectedIndices;
ListView.SelectedIndexCollection list = TasView.SelectedIndices;
string message = String.Empty;
if (list.Count > 0)
@ -368,7 +368,7 @@ namespace BizHawk.Client.EmuHawk
_tas.Filename = file.FullName;
_tas.Load();
Global.Config.RecentTas.Add(_tas.Filename);
TASView.ItemCount = _tas.InputLogLength;
TasView.ItemCount = _tas.InputLogLength;
// TOOD: message to the user
}
}
@ -415,13 +415,13 @@ namespace BizHawk.Client.EmuHawk
private void DrawInputByDraggingMenuItem_Click(object sender, EventArgs e)
{
TASView.InputPaintingMode = Global.Config.TAStudioDrawInput ^= true;
TasView.InputPaintingMode = Global.Config.TAStudioDrawInput ^= true;
}
private void CopyMenuItem_Click(object sender, EventArgs e)
{
TasClipboard.Clear();
ListView.SelectedIndexCollection list = TASView.SelectedIndices;
ListView.SelectedIndexCollection list = TasView.SelectedIndices;
for (int i = 0; i < list.Count; i++)
{
TasClipboard.Add(new TasClipboardEntry(list[i], _tas[i].Buttons));
@ -477,28 +477,28 @@ namespace BizHawk.Client.EmuHawk
private void OnMovieChanged(object sender, MovieRecord.InputEventArgs e)
{
//TODO: move logic needs to go here
TASView.ItemCount = _tas.InputLogLength;
TasView.ItemCount = _tas.InputLogLength;
}
private void TASView_MouseDown(object sender, MouseEventArgs e)
{
if (TASView.PointedCell.Row.HasValue && !String.IsNullOrEmpty(TASView.PointedCell.Column))
if (TasView.PointedCell.Row.HasValue && !String.IsNullOrEmpty(TasView.PointedCell.Column))
{
if (TASView.PointedCell.Column == MarkerColumnName)
if (TasView.PointedCell.Column == MarkerColumnName)
{
StartMarkerDrag = true;
}
else if (TASView.PointedCell.Column == FrameColumnName)
else if (TasView.PointedCell.Column == FrameColumnName)
{
StartFrameDrag = true;
}
else
{
_tas.ToggleButton(TASView.PointedCell.Row.Value, TASView.PointedCell.Column);
TASView.Refresh();
_tas.ToggleButton(TasView.PointedCell.Row.Value, TasView.PointedCell.Column);
TasView.Refresh();
StartDrawColumn = TASView.PointedCell.Column;
StartOn = _tas.IsPressed(TASView.PointedCell.Row.Value, TASView.PointedCell.Column);
StartDrawColumn = TasView.PointedCell.Column;
StartOn = _tas.IsPressed(TasView.PointedCell.Row.Value, TasView.PointedCell.Column);
}
}
}
@ -521,15 +521,30 @@ namespace BizHawk.Client.EmuHawk
}
else if (StartFrameDrag)
{
if (e.NewCell.Row.HasValue)
if (e.OldCell.Row.HasValue && e.NewCell.Row.HasValue)
{
TASView.SelectItem(e.NewCell.Row.Value, true);
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;
}
for (int i = startVal + 1; i <= endVal; i++)
{
TasView.SelectItem(i, true);
}
}
}
else if (TASView.IsPaintDown && e.NewCell.Row.HasValue && !String.IsNullOrEmpty(StartDrawColumn))
else if (TasView.IsPaintDown && e.NewCell.Row.HasValue && !String.IsNullOrEmpty(StartDrawColumn))
{
_tas.SetButton(e.NewCell.Row.Value, StartDrawColumn, StartOn); //Notice it uses new row, old column, you can only paint across a single column
TASView.Refresh();
TasView.Refresh();
}
}