diff --git a/GUI.NET/Config/DebugInfo.cs b/GUI.NET/Config/DebugInfo.cs index 82be57be..97c02599 100644 --- a/GUI.NET/Config/DebugInfo.cs +++ b/GUI.NET/Config/DebugInfo.cs @@ -124,6 +124,7 @@ namespace Mesen.GUI.Config public int RamColumnCount = 2; public float RamFontSize = BaseControl.DefaultFontSize; public bool RamShowCharacters = true; + public bool RamShowLabelInfo = true; public bool RamHighlightExecution = true; public bool RamHighlightWrites = true; public bool RamHighlightReads = true; diff --git a/GUI.NET/Debugger/Controls/ctrlHexViewer.Designer.cs b/GUI.NET/Debugger/Controls/ctrlHexViewer.Designer.cs index f33c9780..fe1d9ec9 100644 --- a/GUI.NET/Debugger/Controls/ctrlHexViewer.Designer.cs +++ b/GUI.NET/Debugger/Controls/ctrlHexViewer.Designer.cs @@ -243,6 +243,7 @@ // // ctrlHexBox // + this.ctrlHexBox.ByteColorProvider = null; this.ctrlHexBox.ColumnInfoVisible = true; this.ctrlHexBox.Dock = System.Windows.Forms.DockStyle.Fill; this.ctrlHexBox.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); @@ -257,6 +258,8 @@ this.ctrlHexBox.TabIndex = 2; this.ctrlHexBox.UseFixedBytesPerLine = true; this.ctrlHexBox.VScrollBarVisible = true; + this.ctrlHexBox.MouseLeave += new System.EventHandler(this.ctrlHexBox_MouseLeave); + this.ctrlHexBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.ctrlHexBox_MouseMove); // // ctrlHexViewer // diff --git a/GUI.NET/Debugger/Controls/ctrlHexViewer.cs b/GUI.NET/Debugger/Controls/ctrlHexViewer.cs index 138efd0d..6e5562f9 100644 --- a/GUI.NET/Debugger/Controls/ctrlHexViewer.cs +++ b/GUI.NET/Debugger/Controls/ctrlHexViewer.cs @@ -334,5 +334,18 @@ namespace Mesen.GUI.Debugger.Controls get { return this.ctrlHexBox.ReadOnly; } set { this.ctrlHexBox.ReadOnly = value; } } + + public delegate void ByteMouseHoverHandler(int address); + public event ByteMouseHoverHandler ByteMouseHover; + private void ctrlHexBox_MouseMove(object sender, MouseEventArgs e) + { + BytePositionInfo bpi = ctrlHexBox.GetHexBytePositionInfo(e.Location); + ByteMouseHover?.Invoke((int)bpi.Index); + } + + private void ctrlHexBox_MouseLeave(object sender, EventArgs e) + { + ByteMouseHover?.Invoke(-1); + } } } diff --git a/GUI.NET/Debugger/HexBox/BytePositionInfo.cs b/GUI.NET/Debugger/HexBox/BytePositionInfo.cs index 9302376e..1f029757 100644 --- a/GUI.NET/Debugger/HexBox/BytePositionInfo.cs +++ b/GUI.NET/Debugger/HexBox/BytePositionInfo.cs @@ -7,7 +7,7 @@ namespace Be.Windows.Forms /// /// Represents a position in the HexBox control /// - struct BytePositionInfo + internal struct BytePositionInfo { public BytePositionInfo(long index, int characterPosition) { diff --git a/GUI.NET/Debugger/HexBox/HexBox.cs b/GUI.NET/Debugger/HexBox/HexBox.cs index 82a12521..d887f87b 100644 --- a/GUI.NET/Debugger/HexBox/HexBox.cs +++ b/GUI.NET/Debugger/HexBox/HexBox.cs @@ -1868,7 +1868,7 @@ namespace Be.Windows.Forms } } - BytePositionInfo GetHexBytePositionInfo(Point p) + internal BytePositionInfo GetHexBytePositionInfo(Point p) { System.Diagnostics.Debug.WriteLine("GetHexBytePositionInfo()", "HexBox"); diff --git a/GUI.NET/Debugger/frmMemoryViewer.Designer.cs b/GUI.NET/Debugger/frmMemoryViewer.Designer.cs index 5c3dce16..58556376 100644 --- a/GUI.NET/Debugger/frmMemoryViewer.Designer.cs +++ b/GUI.NET/Debugger/frmMemoryViewer.Designer.cs @@ -70,14 +70,16 @@ this.mnuHideWrittenBytes = new System.Windows.Forms.ToolStripMenuItem(); this.mnuHideExecutedBytes = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuRefresh = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuConfigureColors = new System.Windows.Forms.ToolStripMenuItem(); this.fontSizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.mnuIncreaseFontSize = new System.Windows.Forms.ToolStripMenuItem(); this.mnuDecreaseFontSize = new System.Windows.Forms.ToolStripMenuItem(); this.mnuResetFontSize = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuRefresh = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); this.mnuAutoRefresh = new System.Windows.Forms.ToolStripMenuItem(); this.mnuShowCharacters = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowLabelInfoOnMouseOver = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.mnuFind = new System.Windows.Forms.ToolStripMenuItem(); this.mnuFindNext = new System.Windows.Forms.ToolStripMenuItem(); @@ -94,7 +96,6 @@ this.tpgProfiler = new System.Windows.Forms.TabPage(); this.ctrlProfiler = new Mesen.GUI.Debugger.Controls.ctrlProfiler(); this.tmrRefresh = new System.Windows.Forms.Timer(this.components); - this.mnuConfigureColors = new System.Windows.Forms.ToolStripMenuItem(); this.flowLayoutPanel1.SuspendLayout(); this.menuStrip1.SuspendLayout(); this.toolStrip1.SuspendLayout(); @@ -115,6 +116,7 @@ this.ctrlHexViewer.RequiredWidthChanged += new System.EventHandler(this.ctrlHexViewer_RequiredWidthChanged); this.ctrlHexViewer.InitializeContextMenu += new System.EventHandler(this.ctrlHexViewer_InitializeContextMenu); this.ctrlHexViewer.ByteChanged += new Be.Windows.Forms.DynamicByteProvider.ByteChangedHandler(this.ctrlHexViewer_ByteChanged); + this.ctrlHexViewer.ByteMouseHover += new Mesen.GUI.Debugger.Controls.ctrlHexViewer.ByteMouseHoverHandler(this.ctrlHexViewer_ByteMouseHover); // // flowLayoutPanel1 // @@ -249,7 +251,8 @@ this.mnuRefresh, this.toolStripMenuItem2, this.mnuAutoRefresh, - this.mnuShowCharacters}); + this.mnuShowCharacters, + this.mnuShowLabelInfoOnMouseOver}); this.mnuView.Name = "mnuView"; this.mnuView.Size = new System.Drawing.Size(44, 20); this.mnuView.Text = "View"; @@ -263,7 +266,7 @@ this.toolStripMenuItem6, this.fadeSpeedToolStripMenuItem}); this.highlightToolStripMenuItem.Name = "highlightToolStripMenuItem"; - this.highlightToolStripMenuItem.Size = new System.Drawing.Size(228, 22); + this.highlightToolStripMenuItem.Size = new System.Drawing.Size(248, 22); this.highlightToolStripMenuItem.Text = "Memory Access Highlighting"; // // mnuHightlightReads @@ -359,7 +362,7 @@ this.mnuHighlightChrDrawnBytes, this.mnuHighlightChrReadBytes}); this.dataTypeHighlightingToolStripMenuItem.Name = "dataTypeHighlightingToolStripMenuItem"; - this.dataTypeHighlightingToolStripMenuItem.Size = new System.Drawing.Size(228, 22); + this.dataTypeHighlightingToolStripMenuItem.Size = new System.Drawing.Size(248, 22); this.dataTypeHighlightingToolStripMenuItem.Text = "Data Type Highlighting"; // // mnuHighlightCodeBytes @@ -403,7 +406,7 @@ this.mnuHideWrittenBytes, this.mnuHideExecutedBytes}); this.fadeToolStripMenuItem.Name = "fadeToolStripMenuItem"; - this.fadeToolStripMenuItem.Size = new System.Drawing.Size(228, 22); + this.fadeToolStripMenuItem.Size = new System.Drawing.Size(248, 22); this.fadeToolStripMenuItem.Text = "De-emphasize"; // // mnuHideUnusedBytes @@ -441,16 +444,15 @@ // toolStripMenuItem5 // this.toolStripMenuItem5.Name = "toolStripMenuItem5"; - this.toolStripMenuItem5.Size = new System.Drawing.Size(225, 6); + this.toolStripMenuItem5.Size = new System.Drawing.Size(245, 6); // - // mnuRefresh + // mnuConfigureColors // - this.mnuRefresh.Image = global::Mesen.GUI.Properties.Resources.Reset; - this.mnuRefresh.Name = "mnuRefresh"; - this.mnuRefresh.ShortcutKeys = System.Windows.Forms.Keys.F5; - this.mnuRefresh.Size = new System.Drawing.Size(228, 22); - this.mnuRefresh.Text = "Refresh"; - this.mnuRefresh.Click += new System.EventHandler(this.mnuRefresh_Click); + this.mnuConfigureColors.Image = global::Mesen.GUI.Properties.Resources.PipetteSmall; + this.mnuConfigureColors.Name = "mnuConfigureColors"; + this.mnuConfigureColors.Size = new System.Drawing.Size(248, 22); + this.mnuConfigureColors.Text = "Configure Colors"; + this.mnuConfigureColors.Click += new System.EventHandler(this.mnuConfigureColors_Click); // // fontSizeToolStripMenuItem // @@ -460,7 +462,7 @@ this.mnuResetFontSize}); this.fontSizeToolStripMenuItem.Image = global::Mesen.GUI.Properties.Resources.Font; this.fontSizeToolStripMenuItem.Name = "fontSizeToolStripMenuItem"; - this.fontSizeToolStripMenuItem.Size = new System.Drawing.Size(228, 22); + this.fontSizeToolStripMenuItem.Size = new System.Drawing.Size(248, 22); this.fontSizeToolStripMenuItem.Text = "Text Size"; // // mnuIncreaseFontSize @@ -490,10 +492,19 @@ this.mnuResetFontSize.Text = "Reset to Default"; this.mnuResetFontSize.Click += new System.EventHandler(this.mnuResetFontSize_Click); // + // mnuRefresh + // + this.mnuRefresh.Image = global::Mesen.GUI.Properties.Resources.Reset; + this.mnuRefresh.Name = "mnuRefresh"; + this.mnuRefresh.ShortcutKeys = System.Windows.Forms.Keys.F5; + this.mnuRefresh.Size = new System.Drawing.Size(248, 22); + this.mnuRefresh.Text = "Refresh"; + this.mnuRefresh.Click += new System.EventHandler(this.mnuRefresh_Click); + // // toolStripMenuItem2 // this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - this.toolStripMenuItem2.Size = new System.Drawing.Size(225, 6); + this.toolStripMenuItem2.Size = new System.Drawing.Size(245, 6); // // mnuAutoRefresh // @@ -501,7 +512,7 @@ this.mnuAutoRefresh.CheckOnClick = true; this.mnuAutoRefresh.CheckState = System.Windows.Forms.CheckState.Checked; this.mnuAutoRefresh.Name = "mnuAutoRefresh"; - this.mnuAutoRefresh.Size = new System.Drawing.Size(228, 22); + this.mnuAutoRefresh.Size = new System.Drawing.Size(248, 22); this.mnuAutoRefresh.Text = "Auto-refresh"; this.mnuAutoRefresh.Click += new System.EventHandler(this.mnuAutoRefresh_Click); // @@ -511,9 +522,16 @@ this.mnuShowCharacters.CheckOnClick = true; this.mnuShowCharacters.CheckState = System.Windows.Forms.CheckState.Checked; this.mnuShowCharacters.Name = "mnuShowCharacters"; - this.mnuShowCharacters.Size = new System.Drawing.Size(228, 22); + this.mnuShowCharacters.Size = new System.Drawing.Size(248, 22); this.mnuShowCharacters.Text = "Show characters"; // + // mnuShowLabelInfoOnMouseOver + // + this.mnuShowLabelInfoOnMouseOver.CheckOnClick = true; + this.mnuShowLabelInfoOnMouseOver.Name = "mnuShowLabelInfoOnMouseOver"; + this.mnuShowLabelInfoOnMouseOver.Size = new System.Drawing.Size(248, 22); + this.mnuShowLabelInfoOnMouseOver.Text = "Show label tooltip on mouseover"; + // // toolStripMenuItem1 // this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -665,14 +683,6 @@ this.tmrRefresh.Enabled = true; this.tmrRefresh.Tick += new System.EventHandler(this.tmrRefresh_Tick); // - // mnuConfigureColors - // - this.mnuConfigureColors.Image = global::Mesen.GUI.Properties.Resources.PipetteSmall; - this.mnuConfigureColors.Name = "mnuConfigureColors"; - this.mnuConfigureColors.Size = new System.Drawing.Size(228, 22); - this.mnuConfigureColors.Text = "Configure Colors"; - this.mnuConfigureColors.Click += new System.EventHandler(this.mnuConfigureColors_Click); - // // frmMemoryViewer // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -767,5 +777,6 @@ private System.Windows.Forms.ToolStripMenuItem mnuHighlightChrDrawnBytes; private System.Windows.Forms.ToolStripMenuItem mnuHighlightChrReadBytes; private System.Windows.Forms.ToolStripMenuItem mnuConfigureColors; + private System.Windows.Forms.ToolStripMenuItem mnuShowLabelInfoOnMouseOver; } } \ No newline at end of file diff --git a/GUI.NET/Debugger/frmMemoryViewer.cs b/GUI.NET/Debugger/frmMemoryViewer.cs index 0761c753..a3e37bf1 100644 --- a/GUI.NET/Debugger/frmMemoryViewer.cs +++ b/GUI.NET/Debugger/frmMemoryViewer.cs @@ -34,6 +34,8 @@ namespace Mesen.GUI.Debugger this.mnuAutoRefresh.Checked = ConfigManager.Config.DebugInfo.RamAutoRefresh; this.mnuShowCharacters.Checked = ConfigManager.Config.DebugInfo.RamShowCharacters; + this.mnuShowLabelInfoOnMouseOver.Checked = ConfigManager.Config.DebugInfo.RamShowLabelInfo; + this.ctrlHexViewer.SetFontSize((int)ConfigManager.Config.DebugInfo.RamFontSize); this.mnuHighlightExecution.Checked = ConfigManager.Config.DebugInfo.RamHighlightExecution; @@ -218,6 +220,7 @@ namespace Mesen.GUI.Debugger { ConfigManager.Config.DebugInfo.RamAutoRefresh = this.mnuAutoRefresh.Checked; ConfigManager.Config.DebugInfo.RamShowCharacters = this.mnuShowCharacters.Checked; + ConfigManager.Config.DebugInfo.RamShowLabelInfo = this.mnuShowLabelInfoOnMouseOver.Checked; ConfigManager.Config.DebugInfo.RamFontSize = this.ctrlHexViewer.HexFont.Size; ConfigManager.Config.DebugInfo.RamHighlightExecution = this.mnuHighlightExecution.Checked; @@ -502,5 +505,77 @@ namespace Mesen.GUI.Debugger } } } + + private frmCodeTooltip _tooltip = null; + private CodeLabel _lastLabelTooltip = null; + private void ctrlHexViewer_ByteMouseHover(int address) + { + if(address < 0 || !mnuShowLabelInfoOnMouseOver.Checked) { + if(_tooltip != null) { + _tooltip.Close(); + _lastLabelTooltip = null; + } + return; + } + + CodeLabel label = null; + switch(_memoryType) { + case DebugMemoryType.CpuMemory: + AddressTypeInfo info = new AddressTypeInfo(); + InteropEmu.DebugGetAbsoluteAddressAndType((UInt32)address, ref info); + if(info.Address >= 0) { + label = LabelManager.GetLabel((UInt32)info.Address, info.Type); + } + if(label == null) { + label = LabelManager.GetLabel((UInt32)address, AddressType.Register); + } + break; + + case DebugMemoryType.InternalRam: + label = LabelManager.GetLabel((UInt32)address, AddressType.InternalRam); + break; + + case DebugMemoryType.WorkRam: + label = LabelManager.GetLabel((UInt32)address, AddressType.WorkRam); + break; + + case DebugMemoryType.SaveRam: + label = LabelManager.GetLabel((UInt32)address, AddressType.SaveRam); + break; + + case DebugMemoryType.PrgRom: + label = LabelManager.GetLabel((UInt32)address, AddressType.PrgRom); + break; + } + + if(label != null) { + if(_lastLabelTooltip != label) { + if(_tooltip != null) { + _tooltip.Close(); + } + + Dictionary values = new Dictionary(); + if(!string.IsNullOrWhiteSpace(label.Label)) { + values["Label"] = label.Label; + } + values["Address"] = "$" + label.Address.ToString("X4"); + values["Address Type"] = label.AddressType.ToString(); + if(!string.IsNullOrWhiteSpace(label.Comment)) { + values["Comment"] = label.Comment; + } + _tooltip = new frmCodeTooltip(values); + _tooltip.Left = Cursor.Position.X + 10; + _tooltip.Top = Cursor.Position.Y + 10; + _tooltip.Show(this); + + _lastLabelTooltip = label; + } + } else { + if(_tooltip != null) { + _tooltip.Close(); + _lastLabelTooltip = null; + } + } + } } }