private void UpdateContextMenu() { LocationInfo location = GetActionTarget(); bool active = location.Address >= 0 || location.Label != null || location.Symbol != null; string suffix = location.Symbol?.Name ?? location.Label?.Label; if (string.IsNullOrWhiteSpace(suffix)) { suffix = (location.Address >= 0 ? ("$" + location.Address.ToString("X6")) : ""); } string labelName = ""; if (suffix.Length > 0) { labelName = " (" + suffix + ")"; if (location.ArrayIndex.HasValue) { suffix += "+" + location.ArrayIndex.Value.ToString(); } suffix = " (" + suffix + ")"; } else if (!active || location.Symbol != null) { suffix = ""; labelName = ""; } bool enableGoToLocation = (location.Address != _manager.Provider.GetLineAddress(ctrlCode.SelectedLine)); mnuAddToWatch.Text = "Add to Watch" + suffix; mnuEditInMemoryTools.Text = "Edit in Memory Tools" + suffix; mnuEditLabel.Text = "Edit Label" + labelName; mnuGoToLocation.Text = "Go to Location" + (enableGoToLocation ? suffix : ""); SelectedAddressRange range = GetSelectedAddressRange(); if (range != null && range.Start.Type == SnesMemoryType.PrgRom && range.End.Type == SnesMemoryType.PrgRom) { mnuMarkSelectionAs.Enabled = true; mnuMarkSelectionAs.Text = "Mark selection as... (" + range.Display + ")"; } else { mnuMarkSelectionAs.Enabled = false; mnuMarkSelectionAs.Text = "Mark selection as..."; } bool showMarkAs = !_inSourceView && (_manager.CpuType == CpuType.Cpu || _manager.CpuType == CpuType.Sa1); mnuMarkSelectionAs.Visible = showMarkAs; mnuEditSelectedCode.Visible = showMarkAs; mnuAddToWatch.Enabled = active; mnuEditInMemoryTools.Enabled = active; mnuEditLabel.Enabled = active && location.Symbol == null; mnuGoToLocation.Enabled = active && enableGoToLocation; }
private void EditSelectedCode() { SelectedAddressRange range = GetSelectedRelativeAddressRange(); if (range.Start.Address >= 0 && range.End.Address >= 0 && range.Start.Address <= range.End.Address) { int length = range.End.Address - range.Start.Address + 1; DebugWindowManager.OpenAssembler(_manager.CpuType, GetSelectedCode(), range.Start.Address, length); } }
private void MarkSelectionAs(CdlFlags type) { SelectedAddressRange range = GetSelectedAddressRange(); if (!_inSourceView && range != null && range.Start.Type == _manager.PrgMemoryType && range.End.Type == _manager.PrgMemoryType) { DebugApi.MarkBytesAs((UInt32)range.Start.Address, (UInt32)range.End.Address, type); DebugWindowManager.OpenDebugger(_manager.CpuType)?.RefreshDisassembly(); } }
private SelectedAddressRange GetSelectedAddressRange() { SelectedAddressRange range = GetSelectedRelativeAddressRange(); if (range != null && range.Start.Address >= 0 && range.End.Address >= 0) { return(new SelectedAddressRange() { Start = DebugApi.GetAbsoluteAddress(range.Start), End = DebugApi.GetAbsoluteAddress(range.End), Display = $"${range.Start.Address.ToString("X4")} - ${range.End.Address.ToString("X4")}" }); } return(null); }