diff --git a/GUI.NET/Controls/ctrlMesenContextMenuStrip.cs b/GUI.NET/Controls/ctrlMesenContextMenuStrip.cs new file mode 100644 index 00000000..38424d2d --- /dev/null +++ b/GUI.NET/Controls/ctrlMesenContextMenuStrip.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Mesen.GUI.Controls +{ + public class ctrlMesenContextMenuStrip : ContextMenuStrip + { + public ctrlMesenContextMenuStrip() : base() + { + } + + public ctrlMesenContextMenuStrip(IContainer container) : base(container) + { + } + + internal bool ProcessCommandKey(ref Message msg, Keys keyData) + { + return this.ProcessCmdKey(ref msg, keyData); + } + } +} diff --git a/GUI.NET/Debugger/Controls/ctrlChrViewer.Designer.cs b/GUI.NET/Debugger/Controls/ctrlChrViewer.Designer.cs index 1f2ee489..b9733523 100644 --- a/GUI.NET/Debugger/Controls/ctrlChrViewer.Designer.cs +++ b/GUI.NET/Debugger/Controls/ctrlChrViewer.Designer.cs @@ -1,4 +1,6 @@ -namespace Mesen.GUI.Debugger.Controls +using Mesen.GUI.Controls; + +namespace Mesen.GUI.Debugger.Controls { partial class ctrlChrViewer { @@ -58,13 +60,15 @@ this.ctrlTilePalette = new Mesen.GUI.Debugger.Controls.ctrlTilePalette(); this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); this.picChrBank1 = new System.Windows.Forms.PictureBox(); - this.ctxMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.ctxMenu = new ctrlMesenContextMenuStrip(this.components); this.mnuCopyHdPack = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); this.mnuCopyToClipboard = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuExportToPng = new System.Windows.Forms.ToolStripMenuItem(); this.picChrBank2 = new System.Windows.Forms.PictureBox(); this.toolTip = new System.Windows.Forms.ToolTip(this.components); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuExportToPng = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuEditInMemoryViewer = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); this.tableLayoutPanel3.SuspendLayout(); this.grpDisplayOptions.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); @@ -459,18 +463,21 @@ this.picChrBank1.TabIndex = 0; this.picChrBank1.TabStop = false; this.picChrBank1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.picChrBank_MouseDown); + this.picChrBank1.MouseEnter += new System.EventHandler(this.picChrBank_MouseEnter); this.picChrBank1.MouseLeave += new System.EventHandler(this.picChrBank_MouseLeave); this.picChrBank1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picChrBank_MouseMove); // // ctxMenu // this.ctxMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuEditInMemoryViewer, + this.toolStripMenuItem2, this.mnuCopyHdPack, this.toolStripMenuItem1, this.mnuCopyToClipboard, this.mnuExportToPng}); this.ctxMenu.Name = "ctxMenu"; - this.ctxMenu.Size = new System.Drawing.Size(222, 98); + this.ctxMenu.Size = new System.Drawing.Size(222, 126); this.ctxMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ctxMenu_Opening); // // mnuCopyHdPack @@ -480,6 +487,11 @@ this.mnuCopyHdPack.Text = "Copy Tile (HD Pack Format)"; this.mnuCopyHdPack.Click += new System.EventHandler(this.mnuCopyHdPack_Click); // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(218, 6); + // // mnuCopyToClipboard // this.mnuCopyToClipboard.Image = global::Mesen.GUI.Properties.Resources.Copy; @@ -488,6 +500,14 @@ this.mnuCopyToClipboard.Text = "Copy image to clipboard"; this.mnuCopyToClipboard.Click += new System.EventHandler(this.mnuCopyToClipboard_Click); // + // mnuExportToPng + // + this.mnuExportToPng.Image = global::Mesen.GUI.Properties.Resources.Export; + this.mnuExportToPng.Name = "mnuExportToPng"; + this.mnuExportToPng.Size = new System.Drawing.Size(221, 22); + this.mnuExportToPng.Text = "Export image to PNG"; + this.mnuExportToPng.Click += new System.EventHandler(this.mnuExportToPng_Click); + // // picChrBank2 // this.picChrBank2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; @@ -501,6 +521,7 @@ this.picChrBank2.TabIndex = 1; this.picChrBank2.TabStop = false; this.picChrBank2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.picChrBank_MouseDown); + this.picChrBank2.MouseEnter += new System.EventHandler(this.picChrBank_MouseEnter); this.picChrBank2.MouseLeave += new System.EventHandler(this.picChrBank_MouseLeave); this.picChrBank2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picChrBank_MouseMove); // @@ -510,18 +531,18 @@ this.toolTip.InitialDelay = 10; this.toolTip.ReshowDelay = 10; // - // toolStripMenuItem1 + // mnuEditInMemoryViewer // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(218, 6); + this.mnuEditInMemoryViewer.Image = global::Mesen.GUI.Properties.Resources.CheatCode; + this.mnuEditInMemoryViewer.Name = "mnuEditInMemoryViewer"; + this.mnuEditInMemoryViewer.Size = new System.Drawing.Size(221, 22); + this.mnuEditInMemoryViewer.Text = "Edit in Memory Viewer"; + this.mnuEditInMemoryViewer.Click += new System.EventHandler(this.mnuEditInMemoryViewer_Click); // - // mnuExportToPng + // toolStripMenuItem2 // - this.mnuExportToPng.Image = global::Mesen.GUI.Properties.Resources.Export; - this.mnuExportToPng.Name = "mnuExportToPng"; - this.mnuExportToPng.Size = new System.Drawing.Size(221, 22); - this.mnuExportToPng.Text = "Export image to PNG"; - this.mnuExportToPng.Click += new System.EventHandler(this.mnuExportToPng_Click); + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(218, 6); // // ctrlChrViewer // @@ -586,7 +607,7 @@ private System.Windows.Forms.PictureBox picTileTooltip; private System.Windows.Forms.ToolTip toolTip; private System.Windows.Forms.PictureBox picPaletteTooltip; - private System.Windows.Forms.ContextMenuStrip ctxMenu; + private ctrlMesenContextMenuStrip ctxMenu; private System.Windows.Forms.ToolStripMenuItem mnuCopyHdPack; private ctrlTilePalette ctrlTilePalette; private System.Windows.Forms.ToolStripMenuItem mnuCopyToClipboard; @@ -594,5 +615,7 @@ private System.Windows.Forms.CheckBox chkShowSingleColorTilesInGrayscale; private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem mnuExportToPng; + private System.Windows.Forms.ToolStripMenuItem mnuEditInMemoryViewer; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; } } diff --git a/GUI.NET/Debugger/Controls/ctrlChrViewer.cs b/GUI.NET/Debugger/Controls/ctrlChrViewer.cs index e84f7e22..db8aaaba 100644 --- a/GUI.NET/Debugger/Controls/ctrlChrViewer.cs +++ b/GUI.NET/Debugger/Controls/ctrlChrViewer.cs @@ -69,9 +69,18 @@ namespace Mesen.GUI.Debugger.Controls base.OnLoad(e); if(!IsDesignMode) { mnuCopyToClipboard.InitShortcut(this, nameof(DebuggerShortcutsConfig.Copy)); + mnuEditInMemoryViewer.InitShortcut(this, nameof(DebuggerShortcutsConfig.CodeWindow_EditInMemoryViewer)); } } + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + if(ctxMenu.ProcessCommandKey(ref msg, keyData)) { + return true; + } + return base.ProcessCmdKey(ref msg, keyData); + } + [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectedTileIndex { @@ -499,5 +508,27 @@ namespace Mesen.GUI.Debugger.Controls } } } + + private void picChrBank_MouseEnter(object sender, EventArgs e) + { + if(this.ParentForm.ContainsFocus) { + this.Focus(); + } + } + + private void mnuEditInMemoryViewer_Click(object sender, EventArgs e) + { + int baseAddress = _hoverBottomBank ? 0x1000 : 0x0000; + if(this.cboChrSelection.SelectedIndex > 1) { + baseAddress += (this.cboChrSelection.SelectedIndex - 1) * 0x2000; + } + + bool ppuMemory = this.cboChrSelection.SelectedIndex == 0; + bool isChrRam = InteropEmu.DebugGetMemorySize(DebugMemoryType.ChrRom) == 0; + DebugMemoryType memType = ppuMemory ? DebugMemoryType.PpuMemory : (isChrRam ? DebugMemoryType.ChrRam : DebugMemoryType.ChrRom); + + int tileIndex = GetLargeSpriteIndex(_hoverTileIndex >= 0 ? _hoverTileIndex : _tileIndex); + DebugWindowManager.OpenMemoryViewer(baseAddress + tileIndex * 16, memType); + } } } diff --git a/GUI.NET/Debugger/Controls/ctrlNametableViewer.Designer.cs b/GUI.NET/Debugger/Controls/ctrlNametableViewer.Designer.cs index 0e156918..2cd3d71d 100644 --- a/GUI.NET/Debugger/Controls/ctrlNametableViewer.Designer.cs +++ b/GUI.NET/Debugger/Controls/ctrlNametableViewer.Designer.cs @@ -1,4 +1,6 @@ -namespace Mesen.GUI.Debugger.Controls +using Mesen.GUI.Controls; + +namespace Mesen.GUI.Debugger.Controls { partial class ctrlNametableViewer { @@ -30,12 +32,15 @@ this.components = new System.ComponentModel.Container(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.picNametable = new System.Windows.Forms.PictureBox(); - this.ctxMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.ctxMenu = new ctrlMesenContextMenuStrip(this.components); + this.mnuEditInMemoryViewer = new System.Windows.Forms.ToolStripMenuItem(); this.mnuShowInChrViewer = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); this.mnuCopyHdPack = new System.Windows.Forms.ToolStripMenuItem(); this.mnuCopyNametableHdPack = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); this.mnuCopyToClipboard = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuExportToPng = new System.Windows.Forms.ToolStripMenuItem(); this.grpTileInfo = new System.Windows.Forms.GroupBox(); this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); this.txtPpuAddress = new System.Windows.Forms.TextBox(); @@ -68,8 +73,6 @@ this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); this.lblMirroring = new System.Windows.Forms.Label(); this.lblMirroringType = new System.Windows.Forms.Label(); - this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuExportToPng = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.picNametable)).BeginInit(); this.ctxMenu.SuspendLayout(); @@ -113,11 +116,13 @@ this.picNametable.TabIndex = 0; this.picNametable.TabStop = false; this.picNametable.DoubleClick += new System.EventHandler(this.picNametable_DoubleClick); + this.picNametable.MouseEnter += new System.EventHandler(this.picNametable_MouseEnter); this.picNametable.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picNametable_MouseMove); // // ctxMenu // this.ctxMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuEditInMemoryViewer, this.mnuShowInChrViewer, this.toolStripMenuItem1, this.mnuCopyHdPack, @@ -129,6 +134,14 @@ this.ctxMenu.Size = new System.Drawing.Size(261, 148); this.ctxMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ctxMenu_Opening); // + // mnuEditInMemoryViewer + // + this.mnuEditInMemoryViewer.Image = global::Mesen.GUI.Properties.Resources.CheatCode; + this.mnuEditInMemoryViewer.Name = "mnuEditInMemoryViewer"; + this.mnuEditInMemoryViewer.Size = new System.Drawing.Size(260, 22); + this.mnuEditInMemoryViewer.Text = "Edit in Memory Viewer"; + this.mnuEditInMemoryViewer.Click += new System.EventHandler(this.mnuEditInMemoryViewer_Click); + // // mnuShowInChrViewer // this.mnuShowInChrViewer.Image = global::Mesen.GUI.Properties.Resources.NextArrow; @@ -157,6 +170,11 @@ this.mnuCopyNametableHdPack.Text = "Copy Nametable (HD Pack Format)"; this.mnuCopyNametableHdPack.Click += new System.EventHandler(this.mnuCopyNametableHdPack_Click); // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(257, 6); + // // mnuCopyToClipboard // this.mnuCopyToClipboard.Image = global::Mesen.GUI.Properties.Resources.Copy; @@ -165,6 +183,14 @@ this.mnuCopyToClipboard.Text = "Copy image to clipboard"; this.mnuCopyToClipboard.Click += new System.EventHandler(this.mnuCopyToClipboard_Click); // + // mnuExportToPng + // + this.mnuExportToPng.Image = global::Mesen.GUI.Properties.Resources.Export; + this.mnuExportToPng.Name = "mnuExportToPng"; + this.mnuExportToPng.Size = new System.Drawing.Size(260, 22); + this.mnuExportToPng.Text = "Export image to PNG"; + this.mnuExportToPng.Click += new System.EventHandler(this.mnuExportToPng_Click); + // // grpTileInfo // this.grpTileInfo.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; @@ -536,19 +562,6 @@ this.lblMirroringType.TabIndex = 1; this.lblMirroringType.Text = "Horizontal"; // - // toolStripMenuItem2 - // - this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - this.toolStripMenuItem2.Size = new System.Drawing.Size(257, 6); - // - // mnuExportToPng - // - this.mnuExportToPng.Image = global::Mesen.GUI.Properties.Resources.Export; - this.mnuExportToPng.Name = "mnuExportToPng"; - this.mnuExportToPng.Size = new System.Drawing.Size(260, 22); - this.mnuExportToPng.Text = "Export image to PNG"; - this.mnuExportToPng.Click += new System.EventHandler(this.mnuExportToPng_Click); - // // ctrlNametableViewer // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -601,7 +614,7 @@ private System.Windows.Forms.Label lblLocation; private System.Windows.Forms.TextBox txtPpuAddress; private System.Windows.Forms.Label lblPpuAddress; - private System.Windows.Forms.ContextMenuStrip ctxMenu; + private ctrlMesenContextMenuStrip ctxMenu; private System.Windows.Forms.ToolStripMenuItem mnuCopyHdPack; private ctrlTilePalette ctrlTilePalette; private System.Windows.Forms.CheckBox chkHighlightChrTile; @@ -617,5 +630,6 @@ private System.Windows.Forms.CheckBox chkHighlightAttributeUpdates; private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; private System.Windows.Forms.ToolStripMenuItem mnuExportToPng; + private System.Windows.Forms.ToolStripMenuItem mnuEditInMemoryViewer; } } diff --git a/GUI.NET/Debugger/Controls/ctrlNametableViewer.cs b/GUI.NET/Debugger/Controls/ctrlNametableViewer.cs index d5ea38c0..12b1a0e4 100644 --- a/GUI.NET/Debugger/Controls/ctrlNametableViewer.cs +++ b/GUI.NET/Debugger/Controls/ctrlNametableViewer.cs @@ -54,11 +54,20 @@ namespace Mesen.GUI.Debugger.Controls } } + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + if(ctxMenu.ProcessCommandKey(ref msg, keyData)) { + return true; + } + return base.ProcessCmdKey(ref msg, keyData); + } + protected override void OnLoad(EventArgs e) { base.OnLoad(e); if(!IsDesignMode) { mnuCopyToClipboard.InitShortcut(this, nameof(DebuggerShortcutsConfig.Copy)); + mnuEditInMemoryViewer.InitShortcut(this, nameof(DebuggerShortcutsConfig.CodeWindow_EditInMemoryViewer)); } } @@ -87,8 +96,6 @@ namespace Mesen.GUI.Debugger.Controls public void RefreshViewer() { - _currentPpuAddress = -1; - int tileIndexOffset = _state.PPU.ControlFlags.BackgroundPatternAddr == 0x1000 ? 256 : 0; lblMirroringType.Text = ResourceHelper.GetEnumText(_state.Cartridge.Mirroring); @@ -153,6 +160,7 @@ namespace Mesen.GUI.Debugger.Controls this.picNametable.Image = target; if(_firstDraw) { + _currentPpuAddress = 0x2000; UpdateTileInformation(0, 0, 0x2000, 0); _firstDraw = false; } @@ -458,5 +466,17 @@ namespace Mesen.GUI.Debugger.Controls } } } + + private void mnuEditInMemoryViewer_Click(object sender, EventArgs e) + { + DebugWindowManager.OpenMemoryViewer(_currentPpuAddress, DebugMemoryType.PpuMemory); + } + + private void picNametable_MouseEnter(object sender, EventArgs e) + { + if(this.ParentForm.ContainsFocus) { + this.Focus(); + } + } } } diff --git a/GUI.NET/Debugger/Controls/ctrlSpriteViewer.Designer.cs b/GUI.NET/Debugger/Controls/ctrlSpriteViewer.Designer.cs index a6fac2b0..837d03fe 100644 --- a/GUI.NET/Debugger/Controls/ctrlSpriteViewer.Designer.cs +++ b/GUI.NET/Debugger/Controls/ctrlSpriteViewer.Designer.cs @@ -1,4 +1,6 @@ -namespace Mesen.GUI.Debugger.Controls +using Mesen.GUI.Controls; + +namespace Mesen.GUI.Debugger.Controls { partial class ctrlSpriteViewer { @@ -35,12 +37,14 @@ this.txtSpriteIndex = new System.Windows.Forms.TextBox(); this.lblSpriteIndex = new System.Windows.Forms.Label(); this.picPreview = new System.Windows.Forms.PictureBox(); - this.ctxMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.ctxMenu = new Mesen.GUI.Controls.ctrlMesenContextMenuStrip(this.components); this.mnuShowInChrViewer = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); this.mnuCopyHdPack = new System.Windows.Forms.ToolStripMenuItem(); this.mnuCopyAllSpritesHdPack = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); this.mnuCopyToClipboard = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuExportToPng = new System.Windows.Forms.ToolStripMenuItem(); this.lblScreenPreview = new System.Windows.Forms.Label(); this.lblTile = new System.Windows.Forms.Label(); this.picTile = new System.Windows.Forms.PictureBox(); @@ -58,8 +62,7 @@ this.chkBackgroundPriority = new System.Windows.Forms.CheckBox(); this.ctrlTilePalette = new Mesen.GUI.Debugger.Controls.ctrlTilePalette(); this.picSprites = new System.Windows.Forms.PictureBox(); - this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuExportToPng = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuEditInMemoryViewer = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel3.SuspendLayout(); this.grpSpriteInfo.SuspendLayout(); this.tableLayoutPanel4.SuspendLayout(); @@ -185,6 +188,7 @@ // ctxMenu // this.ctxMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuEditInMemoryViewer, this.mnuShowInChrViewer, this.toolStripMenuItem1, this.mnuCopyHdPack, @@ -193,7 +197,7 @@ this.mnuCopyToClipboard, this.mnuExportToPng}); this.ctxMenu.Name = "ctxMenu"; - this.ctxMenu.Size = new System.Drawing.Size(255, 148); + this.ctxMenu.Size = new System.Drawing.Size(255, 170); this.ctxMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ctxMenu_Opening); // // mnuShowInChrViewer @@ -224,6 +228,11 @@ this.mnuCopyAllSpritesHdPack.Text = "Copy All Sprites (HD Pack Format)"; this.mnuCopyAllSpritesHdPack.Click += new System.EventHandler(this.mnuCopyAllSpritesHdPack_Click); // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(251, 6); + // // mnuCopyToClipboard // this.mnuCopyToClipboard.Image = global::Mesen.GUI.Properties.Resources.Copy; @@ -232,6 +241,14 @@ this.mnuCopyToClipboard.Text = "Copy image to clipboard"; this.mnuCopyToClipboard.Click += new System.EventHandler(this.mnuCopyToClipboard_Click); // + // mnuExportToPng + // + this.mnuExportToPng.Image = global::Mesen.GUI.Properties.Resources.Export; + this.mnuExportToPng.Name = "mnuExportToPng"; + this.mnuExportToPng.Size = new System.Drawing.Size(254, 22); + this.mnuExportToPng.Text = "Export image to PNG"; + this.mnuExportToPng.Click += new System.EventHandler(this.mnuExportToPng_Click); + // // lblScreenPreview // this.lblScreenPreview.AutoSize = true; @@ -421,18 +438,13 @@ this.picSprites.MouseLeave += new System.EventHandler(this.picSprites_MouseLeave); this.picSprites.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picSprites_MouseMove); // - // toolStripMenuItem2 + // mnuEditInMemoryViewer // - this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - this.toolStripMenuItem2.Size = new System.Drawing.Size(251, 6); - // - // mnuExportToPng - // - this.mnuExportToPng.Image = global::Mesen.GUI.Properties.Resources.Export; - this.mnuExportToPng.Name = "mnuExportToPng"; - this.mnuExportToPng.Size = new System.Drawing.Size(254, 22); - this.mnuExportToPng.Text = "Export image to PNG"; - this.mnuExportToPng.Click += new System.EventHandler(this.mnuExportToPng_Click); + this.mnuEditInMemoryViewer.Image = global::Mesen.GUI.Properties.Resources.CheatCode; + this.mnuEditInMemoryViewer.Name = "mnuEditInMemoryViewer"; + this.mnuEditInMemoryViewer.Size = new System.Drawing.Size(254, 22); + this.mnuEditInMemoryViewer.Text = "Edit in Memory Viewer"; + this.mnuEditInMemoryViewer.Click += new System.EventHandler(this.mnuEditInMemoryViewer_Click); // // ctrlSpriteViewer // @@ -479,7 +491,7 @@ private System.Windows.Forms.Label lblSpriteIndex; private System.Windows.Forms.TextBox txtSpriteIndex; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.ContextMenuStrip ctxMenu; + private ctrlMesenContextMenuStrip ctxMenu; private System.Windows.Forms.ToolStripMenuItem mnuCopyHdPack; private System.Windows.Forms.Label lblPalette; private ctrlTilePalette ctrlTilePalette; @@ -489,5 +501,6 @@ private System.Windows.Forms.ToolStripMenuItem mnuCopyAllSpritesHdPack; private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; private System.Windows.Forms.ToolStripMenuItem mnuExportToPng; + private System.Windows.Forms.ToolStripMenuItem mnuEditInMemoryViewer; } } diff --git a/GUI.NET/Debugger/Controls/ctrlSpriteViewer.cs b/GUI.NET/Debugger/Controls/ctrlSpriteViewer.cs index 534f3ccc..943b6dfd 100644 --- a/GUI.NET/Debugger/Controls/ctrlSpriteViewer.cs +++ b/GUI.NET/Debugger/Controls/ctrlSpriteViewer.cs @@ -41,11 +41,20 @@ namespace Mesen.GUI.Debugger.Controls picSprites.Image = new Bitmap(256, 512, PixelFormat.Format32bppArgb); } + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + if(ctxMenu.ProcessCommandKey(ref msg, keyData)) { + return true; + } + return base.ProcessCmdKey(ref msg, keyData); + } + protected override void OnLoad(EventArgs e) { base.OnLoad(e); if(!IsDesignMode) { mnuCopyToClipboard.InitShortcut(this, nameof(DebuggerShortcutsConfig.Copy)); + mnuEditInMemoryViewer.InitShortcut(this, nameof(DebuggerShortcutsConfig.CodeWindow_EditInMemoryViewer)); } } @@ -335,11 +344,17 @@ namespace Mesen.GUI.Debugger.Controls private void picSprites_MouseEnter(object sender, EventArgs e) { _copyPreview = false; + if(this.ParentForm.ContainsFocus) { + this.Focus(); + } } private void picPreview_MouseEnter(object sender, EventArgs e) { _copyPreview = true; + if(this.ParentForm.ContainsFocus) { + this.Focus(); + } } private void mnuCopyToClipboard_Click(object sender, EventArgs e) @@ -404,5 +419,21 @@ namespace Mesen.GUI.Debugger.Controls Clipboard.Clear(); } } + + private void mnuEditInMemoryViewer_Click(object sender, EventArgs e) + { + if(_selectedSprite < 0 && _contextMenuSpriteIndex < 0) { + return; + } + + int ramAddr = (_selectedSprite >= 0 ? _selectedSprite : _contextMenuSpriteIndex) * 4; + int tileIndex = _spriteRam[ramAddr + 1]; + + DebugState state = new DebugState(); + InteropEmu.DebugGetState(ref state); + + int tileIndexOffset = (!_largeSprites && state.PPU.ControlFlags.SpritePatternAddr == 0x1000) ? 256 : 0; + DebugWindowManager.OpenMemoryViewer((tileIndex + tileIndexOffset) * 16, DebugMemoryType.PpuMemory); + } } } diff --git a/GUI.NET/Debugger/frmPpuViewer.cs b/GUI.NET/Debugger/frmPpuViewer.cs index bfc29fb8..c3273810 100644 --- a/GUI.NET/Debugger/frmPpuViewer.cs +++ b/GUI.NET/Debugger/frmPpuViewer.cs @@ -170,15 +170,7 @@ namespace Mesen.GUI.Debugger protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if(!this.ctrlScanlineCycle.ContainsFocus) { - if(keyData == ConfigManager.Config.DebugInfo.Shortcuts.Copy) { - if(this.tabMain.SelectedTab == tpgNametableViewer) { - ctrlNametableViewer.CopyToClipboard(); - } else if(this.tabMain.SelectedTab == tpgChrViewer) { - ctrlChrViewer.CopyToClipboard(); - } else if(this.tabMain.SelectedTab == tpgSpriteViewer) { - ctrlSpriteViewer.CopyToClipboard(); - } - } else if(this.tabMain.SelectedTab == tpgChrViewer) { + if(this.tabMain.SelectedTab == tpgChrViewer) { bool shift = keyData.HasFlag(Keys.Shift); keyData &= ~Keys.Shift; diff --git a/GUI.NET/GUI.NET.csproj b/GUI.NET/GUI.NET.csproj index 01ee44b7..fef09691 100644 --- a/GUI.NET/GUI.NET.csproj +++ b/GUI.NET/GUI.NET.csproj @@ -279,6 +279,9 @@ ctrlLoadingRom.cs + + Component + Component