Convert debugger to use InputRoll instead of VirtualListView

This commit is contained in:
adelikat 2019-10-19 19:16:45 -05:00
parent 701533f4fe
commit 9100526a0c
5 changed files with 74 additions and 77 deletions

View File

@ -1573,11 +1573,11 @@ namespace BizHawk.Client.EmuHawk
if (_horizontalOrientation)
{
ColumnScroll?.Invoke(this, e);
ColumnScroll?.Invoke(_vBar, e);
}
else
{
RowScroll?.Invoke(this, e);
RowScroll?.Invoke(_vBar, e);
}
}
@ -1590,11 +1590,11 @@ namespace BizHawk.Client.EmuHawk
if (_horizontalOrientation)
{
RowScroll?.Invoke(this, e);
RowScroll?.Invoke(_hBar, e);
}
else
{
ColumnScroll?.Invoke(this, e);
ColumnScroll?.Invoke(_vBar, e);
}
}

View File

@ -46,9 +46,7 @@
this.DisassemblerBox = new System.Windows.Forms.GroupBox();
this.ToPCBtn = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.DisassemblerView = new BizHawk.Client.EmuHawk.VirtualListView();
this.Address = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.Instruction = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.DisassemblerView = new InputRoll();
this.DisassemblerContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.AddBreakpointContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.StepOutBtn = new System.Windows.Forms.Button();
@ -239,39 +237,21 @@
this.DisassemblerView.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.DisassemblerView.BlazingFast = false;
this.DisassemblerView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.Address,
this.Instruction});
this.DisassemblerView.AllowColumnReorder = false;
this.DisassemblerView.AllowColumnResize = true;
this.DisassemblerView.ContextMenuStrip = this.DisassemblerContextMenu;
this.DisassemblerView.Font = new System.Drawing.Font("Courier New", 8F);
this.DisassemblerView.FullRowSelect = true;
this.DisassemblerView.GridLines = true;
this.DisassemblerView.HideSelection = false;
this.DisassemblerView.ItemCount = 0;
this.DisassemblerView.RowCount = 0;
this.DisassemblerView.Location = new System.Drawing.Point(6, 39);
this.DisassemblerView.Name = "DisassemblerView";
this.DisassemblerView.SelectAllInProgress = false;
this.DisassemblerView.selectedItem = -1;
this.DisassemblerView.Size = new System.Drawing.Size(395, 476);
this.DisassemblerView.TabIndex = 1;
this.DisassemblerView.UseCompatibleStateImageBehavior = false;
this.DisassemblerView.UseCustomBackground = true;
this.DisassemblerView.View = System.Windows.Forms.View.Details;
this.DisassemblerView.Scroll += new System.Windows.Forms.ScrollEventHandler(this.DisassemblerView_Scroll);
this.DisassemblerView.RowScroll += new InputRoll.RowScrollEvent(this.DisassemblerView_Scroll);
this.DisassemblerView.SizeChanged += new System.EventHandler(this.DisassemblerView_SizeChanged);
this.DisassemblerView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.DisassemblerView_KeyDown);
this.DisassemblerView.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.DisassemblerView_Wheel);
//
// Address
//
this.Address.Text = "Address";
this.Address.Width = 94;
//
// Instruction
//
this.Instruction.Text = "Instruction";
this.Instruction.Width = 291;
//
// DisassemblerContextMenu
//
@ -412,9 +392,7 @@
private System.Windows.Forms.GroupBox BreakpointsGroupBox;
private BreakpointControl BreakPointControl1;
private System.Windows.Forms.GroupBox DisassemblerBox;
private VirtualListView DisassemblerView;
private System.Windows.Forms.ColumnHeader Address;
private System.Windows.Forms.ColumnHeader Instruction;
private InputRoll DisassemblerView;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button StepOutBtn;
private System.Windows.Forms.Button StepIntoBtn;

View File

@ -43,16 +43,14 @@ namespace BizHawk.Client.EmuHawk
{
if (CanDisassemble)
{
DisassemblerView.BlazingFast = true;
Disassemble();
SetDisassemblerItemCount();
DisassemblerView.BlazingFast = false;
}
}
private void Disassemble()
{
int lineCount = DisassemblerView.NumberOfVisibleRows;
int lineCount = DisassemblerView.RowCount + 2;
_disassemblyLines.Clear();
uint a = _currentDisassemblerAddress;
@ -69,24 +67,24 @@ namespace BizHawk.Client.EmuHawk
}
}
private void DisassemblerView_QueryItemText(int index, int column, out string text)
private void DisassemblerView_QueryItemText(int index, InputRoll.RollColumn column, out string text, ref int offsetX, ref int offsetY)
{
text = "";
if (index < _disassemblyLines.Count)
{
if (column == 0)
if (column.Name == AddressColumnName)
{
text = _disassemblyLines[index].Address.ToHexString(_pcRegisterSize);
}
else if (column == 1)
else if (column.Name == InstructionColumnName)
{
text = _disassemblyLines[index].Mnemonic;
}
}
}
private void DisassemblerView_QueryItemBkColor(int index, int column, ref Color color)
private void DisassemblerView_QueryItemBkColor(int index, InputRoll.RollColumn column, ref Color color)
{
if (_disassemblyLines.Any() && index < _disassemblyLines.Count)
{
@ -97,9 +95,16 @@ namespace BizHawk.Client.EmuHawk
}
}
private void DecrementCurrentAddress()
{
if (_currentDisassemblerAddress == 0)
{
return;
}
uint newaddress = _currentDisassemblerAddress;
while (true)
{
int bytestoadvance;
@ -137,51 +142,44 @@ namespace BizHawk.Client.EmuHawk
}
}
private void DisassemblerView_Scroll(object sender, ScrollEventArgs e)
private bool _blockScroll;
private void DisassemblerView_Scroll(object sender, EventArgs e)
{
if (e.Type == ScrollEventType.SmallIncrement)
// This is really really gross, but it works
if (_blockScroll)
{
SmallIncrement();
return;
}
if (e.Type == ScrollEventType.SmallDecrement)
var scrollBar = sender as ScrollBar;
if (scrollBar != null)
{
SmallDecrement();
}
}
if (scrollBar.Value > 0)
{
SmallIncrement();
private void DisassemblerView_Wheel(object sender, MouseEventArgs e)
{
if (e.Delta > 0)
{
SmallDecrement();
}
if (e.Delta > 120)
{
SmallDecrement();
}
if (e.Delta > 240)
{
SmallDecrement();
}
_blockScroll = true;
scrollBar.Value = 14;
_blockScroll = false;
}
else
{
SmallDecrement();
if (e.Delta < 0)
{
SmallIncrement();
}
if (e.Delta < -120)
{
SmallIncrement();
}
if (e.Delta < -240)
{
SmallIncrement();
if (_currentDisassemblerAddress != 0)
{
_blockScroll = true;
scrollBar.Value = 14;
_blockScroll = false;
}
}
}
}
private void SetDisassemblerItemCount()
{
DisassemblerView.ItemCount = DisassemblerView.NumberOfVisibleRows + 1;
DisassemblerView.RowCount = DisassemblerView.VisibleRows + 2;
}
private void DisassemblerView_SizeChanged(object sender, EventArgs e)
@ -225,7 +223,7 @@ namespace BizHawk.Client.EmuHawk
private void CopySelectedDisassembler()
{
var indices = DisassemblerView.SelectedIndices;
var indices = DisassemblerView.SelectedRows.ToList();
if (indices.Count > 0)
{
@ -256,12 +254,12 @@ namespace BizHawk.Client.EmuHawk
private void DisassemblerContextMenu_Opening(object sender, EventArgs e)
{
AddBreakpointContextMenuItem.Enabled = DisassemblerView.SelectedIndices.Count > 0;
AddBreakpointContextMenuItem.Enabled = DisassemblerView.SelectedRows.Any();
}
private void AddBreakpointContextMenuItem_Click(object sender, EventArgs e)
{
var indices = DisassemblerView.SelectedIndices;
var indices = DisassemblerView.SelectedRows.ToList();
if (indices.Count > 0)
{

View File

@ -10,6 +10,9 @@ namespace BizHawk.Client.EmuHawk
{
public partial class GenericDebugger : Form, IToolFormAutoConfig, IControlMainform
{
private const string AddressColumnName = "Address";
private const string InstructionColumnName = "Instruction";
public GenericDebugger()
{
InitializeComponent();
@ -17,7 +20,24 @@ namespace BizHawk.Client.EmuHawk
DisassemblerView.QueryItemText += DisassemblerView_QueryItemText;
DisassemblerView.QueryItemBkColor += DisassemblerView_QueryItemBkColor;
DisassemblerView.VirtualMode = true;
DisassemblerView.AllColumns.Clear();
DisassemblerView.AllColumns.AddRange(new[]
{
new InputRoll.RollColumn
{
Name = AddressColumnName,
Text = AddressColumnName,
Width = 94,
Type = InputRoll.RollColumn.InputType.Text
},
new InputRoll.RollColumn
{
Name = InstructionColumnName,
Text = InstructionColumnName,
Width = 291,
Type = InputRoll.RollColumn.InputType.Text
}
});
}
private void GenericDebugger_Load(object sender, EventArgs e)
@ -75,7 +95,7 @@ namespace BizHawk.Client.EmuHawk
else
{
DisassemblerBox.Enabled = false;
DisassemblerView.ItemCount = 0;
DisassemblerView.RowCount = 0;
DisassemblerBox.Controls.Add(new Label
{
Location = new Point(UIHelper.ScaleX(35), UIHelper.ScaleY(23)),

View File

@ -184,6 +184,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=Autosave/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=bsnes/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Disasm/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=disassembly/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Dontfire/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Endian/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=frameadvance/@EntryIndexedValue">True</s:Boolean>