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