Beispiel #1
0
        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);
        }