From 9100526a0ca5cad4167d8d62be3046103487c759 Mon Sep 17 00:00:00 2001 From: adelikat Date: Sat, 19 Oct 2019 19:16:45 -0500 Subject: [PATCH] Convert debugger to use InputRoll instead of VirtualListView --- .../CustomControls/InputRoll.cs | 8 +- .../Debugger/GenericDebugger.Designer.cs | 34 ++------ .../Debugger/GenericDebugger.Disassembler.cs | 84 +++++++++---------- .../tools/Debugger/GenericDebugger.cs | 24 +++++- BizHawk.sln.DotSettings | 1 + 5 files changed, 74 insertions(+), 77 deletions(-) diff --git a/BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs b/BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs index ae12c73001..fabf42d68e 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs @@ -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); } } diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Designer.cs b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Designer.cs index ff6dc13a11..2eaa8ea454 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Designer.cs @@ -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; diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs index df9b7328aa..0fd2c0a047 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs @@ -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) { diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.cs b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.cs index e15f973653..58fce366dc 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.cs @@ -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)), diff --git a/BizHawk.sln.DotSettings b/BizHawk.sln.DotSettings index fc09226aa4..b6b12fa574 100644 --- a/BizHawk.sln.DotSettings +++ b/BizHawk.sln.DotSettings @@ -184,6 +184,7 @@ True True True + True True True True