Debugger: PPU Viewer - Added a "Edit in memory viewer" right-click option on nt/chr/sprite viewer tabs

This commit is contained in:
Sour 2018-12-15 15:44:22 -05:00
parent d3384b75dd
commit 0df0c85767
9 changed files with 214 additions and 61 deletions

View file

@ -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);
}
}
}

View file

@ -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;
}
}

View file

@ -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);
}
}
}

View file

@ -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;
}
}

View file

@ -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();
}
}
}
}

View file

@ -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;
}
}

View file

@ -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);
}
}
}

View file

@ -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;

View file

@ -279,6 +279,9 @@
<Compile Include="Controls\ctrlLoadingRom.Designer.cs">
<DependentUpon>ctrlLoadingRom.cs</DependentUpon>
</Compile>
<Compile Include="Controls\ctrlMesenContextMenuStrip.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\ctrlMesenMenuStrip.cs">
<SubType>Component</SubType>
</Compile>