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.EnableTooltipsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator();
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 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.Frame = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.Log = ((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(); this.TasStatusStrip = new System.Windows.Forms.StatusStrip();
@ -659,27 +659,27 @@ namespace BizHawk.Client.EmuHawk
// //
// TASView // 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.Left)
| System.Windows.Forms.AnchorStyles.Right))); | 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.Frame,
this.Log}); 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.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.FullRowSelect = true;
this.TASView.GridLines = true; this.TasView.GridLines = true;
this.TASView.InputPaintingMode = false; this.TasView.InputPaintingMode = false;
this.TASView.ItemCount = 0; this.TasView.ItemCount = 0;
this.TASView.Location = new System.Drawing.Point(8, 27); this.TasView.Location = new System.Drawing.Point(8, 27);
this.TASView.Name = "TASView"; this.TasView.Name = "TASView";
this.TASView.selectedItem = -1; this.TasView.selectedItem = -1;
this.TASView.Size = new System.Drawing.Size(288, 471); this.TasView.Size = new System.Drawing.Size(288, 471);
this.TASView.TabIndex = 1; this.TasView.TabIndex = 1;
this.TASView.UseCompatibleStateImageBehavior = false; this.TasView.UseCompatibleStateImageBehavior = false;
this.TASView.View = System.Windows.Forms.View.Details; this.TasView.View = System.Windows.Forms.View.Details;
this.TASView.SelectedIndexChanged += new System.EventHandler(this.TASView_SelectedIndexChanged); this.TasView.SelectedIndexChanged += new System.EventHandler(this.TASView_SelectedIndexChanged);
this.TASView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.TASView_MouseDown); this.TasView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.TASView_MouseDown);
this.TASView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.TASView_MouseUp); this.TasView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.TASView_MouseUp);
// //
// Frame // Frame
// //
@ -739,7 +739,7 @@ namespace BizHawk.Client.EmuHawk
this.Controls.Add(this.TasPlaybackBox); this.Controls.Add(this.TasPlaybackBox);
this.Controls.Add(this.TasStatusStrip); this.Controls.Add(this.TasStatusStrip);
this.Controls.Add(this.TASMenu); 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.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.TASMenu; this.MainMenuStrip = this.TASMenu;
this.MinimumSize = new System.Drawing.Size(437, 148); 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 ExitMenuItem;
private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem ConfigSubMenu; private System.Windows.Forms.ToolStripMenuItem ConfigSubMenu;
private TasListView TASView; private TasListView TasView;
private System.Windows.Forms.ColumnHeader Log; private System.Windows.Forms.ColumnHeader Log;
private System.Windows.Forms.ToolStripMenuItem RecentSubMenu; private System.Windows.Forms.ToolStripMenuItem RecentSubMenu;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;

View File

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