Debugger: Added add/edit actions to the label list
This commit is contained in:
parent
512e37c6af
commit
24d1ae096f
5 changed files with 75 additions and 23 deletions
|
@ -247,17 +247,7 @@ namespace Mesen.GUI.Debugger
|
||||||
InteropEmu.DebugGetAbsoluteAddressAndType((UInt32)relativeAddress, ref info);
|
InteropEmu.DebugGetAbsoluteAddressAndType((UInt32)relativeAddress, ref info);
|
||||||
|
|
||||||
if(info.Address >= 0) {
|
if(info.Address >= 0) {
|
||||||
CodeLabel existingLabel = LabelManager.GetLabel((UInt32)info.Address, info.Type);
|
ctrlLabelList.EditLabel((UInt32)info.Address, info.Type);
|
||||||
CodeLabel newLabel = new CodeLabel() { Address = (UInt32)info.Address, AddressType = info.Type, Label = existingLabel?.Label, Comment = existingLabel?.Comment };
|
|
||||||
|
|
||||||
frmEditLabel frm = new frmEditLabel(newLabel);
|
|
||||||
if(frm.ShowDialog() == DialogResult.OK) {
|
|
||||||
if(string.IsNullOrWhiteSpace(newLabel.Label) && string.IsNullOrWhiteSpace(newLabel.Comment)) {
|
|
||||||
LabelManager.DeleteLabel(newLabel.Address, newLabel.AddressType);
|
|
||||||
} else {
|
|
||||||
LabelManager.SetLabel(newLabel.Address, newLabel.AddressType, newLabel.Label, newLabel.Comment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
23
GUI.NET/Debugger/Controls/ctrlLabelList.Designer.cs
generated
23
GUI.NET/Debugger/Controls/ctrlLabelList.Designer.cs
generated
|
@ -34,6 +34,8 @@
|
||||||
this.colMemoryAddress = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.colMemoryAddress = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
this.contextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
|
this.contextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||||
this.mnuDelete = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuDelete = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.mnuAdd = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.mnuEdit = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.contextMenu.SuspendLayout();
|
this.contextMenu.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
|
@ -76,9 +78,11 @@
|
||||||
// contextMenu
|
// contextMenu
|
||||||
//
|
//
|
||||||
this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.mnuAdd,
|
||||||
|
this.mnuEdit,
|
||||||
this.mnuDelete});
|
this.mnuDelete});
|
||||||
this.contextMenu.Name = "contextMenu";
|
this.contextMenu.Name = "contextMenu";
|
||||||
this.contextMenu.Size = new System.Drawing.Size(153, 48);
|
this.contextMenu.Size = new System.Drawing.Size(153, 92);
|
||||||
this.contextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.mnuActions_Opening);
|
this.contextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.mnuActions_Opening);
|
||||||
//
|
//
|
||||||
// mnuDelete
|
// mnuDelete
|
||||||
|
@ -89,6 +93,21 @@
|
||||||
this.mnuDelete.Text = "Delete";
|
this.mnuDelete.Text = "Delete";
|
||||||
this.mnuDelete.Click += new System.EventHandler(this.mnuDelete_Click);
|
this.mnuDelete.Click += new System.EventHandler(this.mnuDelete_Click);
|
||||||
//
|
//
|
||||||
|
// mnuAdd
|
||||||
|
//
|
||||||
|
this.mnuAdd.Name = "mnuAdd";
|
||||||
|
this.mnuAdd.ShortcutKeys = System.Windows.Forms.Keys.Insert;
|
||||||
|
this.mnuAdd.Size = new System.Drawing.Size(152, 22);
|
||||||
|
this.mnuAdd.Text = "Add";
|
||||||
|
this.mnuAdd.Click += new System.EventHandler(this.mnuAdd_Click);
|
||||||
|
//
|
||||||
|
// mnuEdit
|
||||||
|
//
|
||||||
|
this.mnuEdit.Name = "mnuEdit";
|
||||||
|
this.mnuEdit.Size = new System.Drawing.Size(152, 22);
|
||||||
|
this.mnuEdit.Text = "Edit";
|
||||||
|
this.mnuEdit.Click += new System.EventHandler(this.mnuEdit_Click);
|
||||||
|
//
|
||||||
// ctrlLabelList
|
// ctrlLabelList
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
@ -109,5 +128,7 @@
|
||||||
private System.Windows.Forms.ColumnHeader colMemoryAddress;
|
private System.Windows.Forms.ColumnHeader colMemoryAddress;
|
||||||
private System.Windows.Forms.ContextMenuStrip contextMenu;
|
private System.Windows.Forms.ContextMenuStrip contextMenu;
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuDelete;
|
private System.Windows.Forms.ToolStripMenuItem mnuDelete;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem mnuAdd;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem mnuEdit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,23 @@ namespace Mesen.GUI.Debugger.Controls
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void EditLabel(UInt32 address, AddressType type)
|
||||||
|
{
|
||||||
|
CodeLabel existingLabel = LabelManager.GetLabel(address, type);
|
||||||
|
CodeLabel newLabel = new CodeLabel() { Address = address, AddressType = type, Label = existingLabel?.Label, Comment = existingLabel?.Comment };
|
||||||
|
|
||||||
|
frmEditLabel frm = new frmEditLabel(newLabel, existingLabel);
|
||||||
|
if(frm.ShowDialog() == DialogResult.OK) {
|
||||||
|
bool empty = string.IsNullOrWhiteSpace(newLabel.Label) && string.IsNullOrWhiteSpace(newLabel.Comment);
|
||||||
|
if(existingLabel != null) {
|
||||||
|
LabelManager.DeleteLabel(existingLabel.Address, existingLabel.AddressType, empty);
|
||||||
|
}
|
||||||
|
if(!empty) {
|
||||||
|
LabelManager.SetLabel(newLabel.Address, newLabel.AddressType, newLabel.Label, newLabel.Comment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdateLabelList()
|
public void UpdateLabelList()
|
||||||
{
|
{
|
||||||
Int32[] entryPoints = InteropEmu.DebugGetFunctionEntryPoints();
|
Int32[] entryPoints = InteropEmu.DebugGetFunctionEntryPoints();
|
||||||
|
@ -61,13 +78,31 @@ namespace Mesen.GUI.Debugger.Controls
|
||||||
private void mnuActions_Opening(object sender, CancelEventArgs e)
|
private void mnuActions_Opening(object sender, CancelEventArgs e)
|
||||||
{
|
{
|
||||||
mnuDelete.Enabled = lstLabels.SelectedItems.Count > 0;
|
mnuDelete.Enabled = lstLabels.SelectedItems.Count > 0;
|
||||||
|
mnuEdit.Enabled = lstLabels.SelectedItems.Count == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void mnuDelete_Click(object sender, EventArgs e)
|
private void mnuDelete_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
foreach(ListViewItem item in lstLabels.SelectedItems) {
|
for(int i = lstLabels.SelectedItems.Count - 1; i >= 0; i--) {
|
||||||
LabelManager.DeleteLabel(((CodeLabel)item.SubItems[1].Tag).Address, ((CodeLabel)item.SubItems[1].Tag).AddressType);
|
CodeLabel label = (CodeLabel)lstLabels.SelectedItems[i].SubItems[1].Tag;
|
||||||
}
|
LabelManager.DeleteLabel(label.Address, label.AddressType, i == 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void mnuAdd_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
CodeLabel newLabel = new CodeLabel() { Address = 0, AddressType = AddressType.InternalRam, Label = "", Comment = "" };
|
||||||
|
|
||||||
|
frmEditLabel frm = new frmEditLabel(newLabel);
|
||||||
|
if(frm.ShowDialog() == DialogResult.OK) {
|
||||||
|
LabelManager.SetLabel(newLabel.Address, newLabel.AddressType, newLabel.Label, newLabel.Comment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void mnuEdit_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
CodeLabel label = (CodeLabel)lstLabels.SelectedItems[0].SubItems[1].Tag;
|
||||||
|
EditLabel(label.Address, label.AddressType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,15 +64,17 @@ namespace Mesen.GUI.Debugger
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DeleteLabel(UInt32 address, AddressType type)
|
public static void DeleteLabel(UInt32 address, AddressType type, bool raiseEvent)
|
||||||
{
|
{
|
||||||
if(_labels.ContainsKey(GetKey(address, type))) {
|
if(_labels.ContainsKey(GetKey(address, type))) {
|
||||||
_reverseLookup.Remove(_labels[GetKey(address, type)].Label);
|
_reverseLookup.Remove(_labels[GetKey(address, type)].Label);
|
||||||
}
|
}
|
||||||
if(_labels.Remove(GetKey(address, type))) {
|
if(_labels.Remove(GetKey(address, type))) {
|
||||||
InteropEmu.DebugSetLabel(address, type, string.Empty, string.Empty);
|
InteropEmu.DebugSetLabel(address, type, string.Empty, string.Empty);
|
||||||
|
if(raiseEvent) {
|
||||||
OnLabelUpdated?.Invoke(null, null);
|
OnLabelUpdated?.Invoke(null, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -14,15 +14,13 @@ namespace Mesen.GUI.Debugger
|
||||||
{
|
{
|
||||||
public partial class frmEditLabel : BaseConfigForm
|
public partial class frmEditLabel : BaseConfigForm
|
||||||
{
|
{
|
||||||
private UInt32 _originalAddress;
|
private CodeLabel _originalLabel;
|
||||||
private AddressType _originalMemoryType;
|
|
||||||
|
|
||||||
public frmEditLabel(CodeLabel label)
|
public frmEditLabel(CodeLabel label, CodeLabel originalLabel = null)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
_originalAddress = label.Address;
|
_originalLabel = originalLabel;
|
||||||
_originalMemoryType = label.AddressType;
|
|
||||||
|
|
||||||
Entity = label;
|
Entity = label;
|
||||||
|
|
||||||
|
@ -40,9 +38,15 @@ namespace Mesen.GUI.Debugger
|
||||||
|
|
||||||
protected override bool ValidateInput()
|
protected override bool ValidateInput()
|
||||||
{
|
{
|
||||||
CodeLabel existingLabel = LabelManager.GetLabel(txtLabel.Text);
|
UpdateObject();
|
||||||
|
|
||||||
return (existingLabel == null || (existingLabel.Address == _originalAddress && existingLabel.AddressType == _originalMemoryType))
|
CodeLabel sameLabel = LabelManager.GetLabel(txtLabel.Text);
|
||||||
|
CodeLabel sameAddress = LabelManager.GetLabel(((CodeLabel)Entity).Address, ((CodeLabel)Entity).AddressType);
|
||||||
|
|
||||||
|
return
|
||||||
|
(sameLabel == null || sameLabel == _originalLabel)
|
||||||
|
&& (sameAddress == null || sameAddress == _originalLabel)
|
||||||
|
&& (_originalLabel != null || txtLabel.Text.Length > 0 || txtComment.Text.Length > 0)
|
||||||
&& !txtComment.Text.Contains('\x1') && !txtComment.Text.Contains('\x2')
|
&& !txtComment.Text.Contains('\x1') && !txtComment.Text.Contains('\x2')
|
||||||
&& (txtLabel.Text.Length == 0 || Regex.IsMatch(txtLabel.Text, "^[_a-zA-Z]+[_a-zA-Z0-9]*"));
|
&& (txtLabel.Text.Length == 0 || Regex.IsMatch(txtLabel.Text, "^[_a-zA-Z]+[_a-zA-Z0-9]*"));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue