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);
|
||||
|
||||
if(info.Address >= 0) {
|
||||
CodeLabel existingLabel = LabelManager.GetLabel((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);
|
||||
}
|
||||
}
|
||||
ctrlLabelList.EditLabel((UInt32)info.Address, info.Type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
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.contextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
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.SuspendLayout();
|
||||
//
|
||||
|
@ -76,9 +78,11 @@
|
|||
// contextMenu
|
||||
//
|
||||
this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuAdd,
|
||||
this.mnuEdit,
|
||||
this.mnuDelete});
|
||||
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);
|
||||
//
|
||||
// mnuDelete
|
||||
|
@ -89,6 +93,21 @@
|
|||
this.mnuDelete.Text = "Delete";
|
||||
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
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
|
@ -109,5 +128,7 @@
|
|||
private System.Windows.Forms.ColumnHeader colMemoryAddress;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenu;
|
||||
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();
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
Int32[] entryPoints = InteropEmu.DebugGetFunctionEntryPoints();
|
||||
|
@ -61,13 +78,31 @@ namespace Mesen.GUI.Debugger.Controls
|
|||
private void mnuActions_Opening(object sender, CancelEventArgs e)
|
||||
{
|
||||
mnuDelete.Enabled = lstLabels.SelectedItems.Count > 0;
|
||||
mnuEdit.Enabled = lstLabels.SelectedItems.Count == 1;
|
||||
}
|
||||
|
||||
private void mnuDelete_Click(object sender, EventArgs e)
|
||||
{
|
||||
foreach(ListViewItem item in lstLabels.SelectedItems) {
|
||||
LabelManager.DeleteLabel(((CodeLabel)item.SubItems[1].Tag).Address, ((CodeLabel)item.SubItems[1].Tag).AddressType);
|
||||
}
|
||||
for(int i = lstLabels.SelectedItems.Count - 1; i >= 0; i--) {
|
||||
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;
|
||||
}
|
||||
|
||||
public static void DeleteLabel(UInt32 address, AddressType type)
|
||||
public static void DeleteLabel(UInt32 address, AddressType type, bool raiseEvent)
|
||||
{
|
||||
if(_labels.ContainsKey(GetKey(address, type))) {
|
||||
_reverseLookup.Remove(_labels[GetKey(address, type)].Label);
|
||||
}
|
||||
if(_labels.Remove(GetKey(address, type))) {
|
||||
InteropEmu.DebugSetLabel(address, type, string.Empty, string.Empty);
|
||||
if(raiseEvent) {
|
||||
OnLabelUpdated?.Invoke(null, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,15 +14,13 @@ namespace Mesen.GUI.Debugger
|
|||
{
|
||||
public partial class frmEditLabel : BaseConfigForm
|
||||
{
|
||||
private UInt32 _originalAddress;
|
||||
private AddressType _originalMemoryType;
|
||||
private CodeLabel _originalLabel;
|
||||
|
||||
public frmEditLabel(CodeLabel label)
|
||||
public frmEditLabel(CodeLabel label, CodeLabel originalLabel = null)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
_originalAddress = label.Address;
|
||||
_originalMemoryType = label.AddressType;
|
||||
_originalLabel = originalLabel;
|
||||
|
||||
Entity = label;
|
||||
|
||||
|
@ -40,9 +38,15 @@ namespace Mesen.GUI.Debugger
|
|||
|
||||
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')
|
||||
&& (txtLabel.Text.Length == 0 || Regex.IsMatch(txtLabel.Text, "^[_a-zA-Z]+[_a-zA-Z0-9]*"));
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue