private void DoTabs(List <PathEntry> pathCollection)
        {
            PathTabControl.Visible = false;
            PathTabControl.TabPages.Clear();

            // Separate by system
            var systems = Global.Config.PathEntries.Select(x => x.SystemDisplayName).Distinct().ToList();

            systems.Sort();

            // Hacky way to put global first
            var global = systems.FirstOrDefault(x => x == "Global");

            systems.Remove(global);
            systems.Insert(0, global);

            var tabPages = new List <TabPage>(systems.Count);

            int _x            = UIHelper.ScaleX(6);
            int textboxWidth  = UIHelper.ScaleX(70);
            int padding       = UIHelper.ScaleX(5);
            int buttonWidth   = UIHelper.ScaleX(26);
            int buttonHeight  = UIHelper.ScaleY(23);
            int buttonOffsetY = -1;             // To align the top with the textbox I guess? Always 1 pixel regardless of scaling.
            int widgetOffset  = UIHelper.ScaleX(85);
            int rowHeight     = UIHelper.ScaleY(30);

            foreach (var systemDisplayName in systems)
            {
                var systemId = Global.Config.PathEntries.FirstOrDefault(x => x.SystemDisplayName == systemDisplayName).System;
                var t        = new TabPage
                {
                    Text  = systemDisplayName,
                    Name  = systemId,
                    Width = UIHelper.ScaleX(200)                     // Initial Left/Width of child controls are based on this size.
                };
                var paths = pathCollection.Where(x => x.System == systemId).OrderBy(x => x.Ordinal).ThenBy(x => x.Type).ToList();

                var _y = UIHelper.ScaleY(14);
                foreach (var path in paths)
                {
                    var box = new TextBox
                    {
                        Text                     = path.Path,
                        Location                 = new Point(_x, _y),
                        Width                    = textboxWidth,
                        Name                     = path.Type,
                        Anchor                   = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right,
                        MinimumSize              = new Size(UIHelper.ScaleX(26), UIHelper.ScaleY(23)),
                        AutoCompleteMode         = AutoCompleteMode.SuggestAppend,
                        AutoCompleteCustomSource = AutoCompleteOptions,
                        AutoCompleteSource       = AutoCompleteSource.CustomSource,
                    };

                    var btn = new Button
                    {
                        Text     = string.Empty,
                        Image    = Properties.Resources.OpenFile,
                        Location = new Point(widgetOffset, _y + buttonOffsetY),
                        Size     = new Size(buttonWidth, buttonHeight),
                        Name     = path.Type,
                        Anchor   = AnchorStyles.Top | AnchorStyles.Right,
                    };

                    var tempBox    = box;
                    var tempPath   = path.Type;
                    var tempSystem = path.System;
                    btn.Click += delegate
                    {
                        BrowseFolder(tempBox, tempPath, tempSystem);
                    };

                    int infoPadding = UIHelper.ScaleX(0);
                    if (t.Name.Contains("Global") && path.Type == "Firmware")
                    {
                        infoPadding = UIHelper.ScaleX(26);

                        var firmwareButton = new Button
                        {
                            Name     = "Global",
                            Text     = String.Empty,
                            Image    = Properties.Resources.Help,
                            Location = new Point(UIHelper.ScaleX(115), _y + buttonOffsetY),
                            Size     = new Size(buttonWidth, buttonHeight),
                            Anchor   = AnchorStyles.Top | AnchorStyles.Right
                        };

                        firmwareButton.Click += delegate
                        {
                            if (Owner is FirmwaresConfig)
                            {
                                MessageBox.Show("C-C-C-Combo Breaker!", "Nice try, but");
                                return;
                            }

                            var f = new FirmwaresConfig {
                                TargetSystem = "Global"
                            };
                            f.ShowDialog(this);
                        };

                        t.Controls.Add(firmwareButton);
                    }

                    var label = new Label
                    {
                        Text     = path.Type,
                        Location = new Point(widgetOffset + buttonWidth + padding + infoPadding, _y + UIHelper.ScaleY(4)),
                        Size     = new Size(UIHelper.ScaleX(100), UIHelper.ScaleY(15)),
                        Name     = path.Type,
                        Anchor   = AnchorStyles.Top | AnchorStyles.Right,
                    };

                    t.Controls.Add(label);
                    t.Controls.Add(btn);
                    t.Controls.Add(box);

                    _y += rowHeight;
                }

                var sys = systemDisplayName;
                if (systemDisplayName == "PCE")                 // Hack
                {
                    sys = "PCECD";
                }

                tabPages.Add(t);
            }

            PathTabControl.TabPages.AddRange(tabPages.ToArray());
            PathTabControl.Visible = true;
        }
Exemple #2
0
        private void EngageDebugger()
        {
            _disassemblyLines.Clear();
            GlobalWin.MainForm.OnPauseChanged += OnPauseChanged;
            CancelSeekBtn.Enabled              = false;
            if (CanDisassemble)
            {
                try
                {
                    if (CanSetCpu && Disassembler.AvailableCpus.Count() > 1)
                    {
                        var c = new ComboBox
                        {
                            Location      = new Point(UIHelper.ScaleX(35), UIHelper.ScaleY(17)),
                            Width         = UIHelper.ScaleX(121),
                            DropDownStyle = ComboBoxStyle.DropDownList
                        };

                        c.Items.AddRange(Disassembler.AvailableCpus.ToArray());
                        c.SelectedItem          = Disassembler.Cpu;
                        c.SelectedIndexChanged += OnCpuDropDownIndexChanged;

                        DisassemblerBox.Controls.Add(c);
                    }
                    else
                    {
                        DisassemblerBox.Controls.Add(new Label
                        {
                            Location = new Point(UIHelper.ScaleX(35), UIHelper.ScaleY(23)),
                            Size     = new Size(UIHelper.ScaleX(100), UIHelper.ScaleY(15)),
                            Text     = Disassembler.Cpu
                        });
                    }
                }
                catch (NotImplementedException)
                {
                    DisassemblerBox.Controls.Add(new Label
                    {
                        Location = new Point(UIHelper.ScaleX(35), UIHelper.ScaleY(23)),
                        Size     = new Size(UIHelper.ScaleX(100), UIHelper.ScaleY(15)),
                        Text     = Disassembler.Cpu
                    });
                }

                _pcRegisterSize = Debuggable.GetCpuFlagsAndRegisters()[Disassembler.PCRegisterName].BitSize / 4;
                SetDisassemblerItemCount();
                UpdateDisassembler();
            }
            else
            {
                DisassemblerBox.Enabled   = false;
                DisassemblerView.RowCount = 0;
                DisassemblerBox.Controls.Add(new Label
                {
                    Location = new Point(UIHelper.ScaleX(35), UIHelper.ScaleY(23)),
                    Size     = new Size(UIHelper.ScaleX(100), UIHelper.ScaleY(15)),
                    Text     = "Unknown"
                });

                toolTip1.SetToolTip(DisassemblerBox, "This core does not currently support disassembling");
            }

            RegisterPanel.Core           = Debuggable;
            RegisterPanel.ParentDebugger = this;
            RegisterPanel.GenerateUI();

            if (CanUseMemoryCallbacks)
            {
                BreakPointControl1.Core           = Debuggable;
                BreakPointControl1.MCS            = MemoryCallbacks;
                BreakPointControl1.ParentDebugger = this;
                BreakPointControl1.MemoryDomains  = MemoryDomains;
                BreakPointControl1.GenerateUI();
                EnabledBreakpointBox();
            }
            else
            {
                DisableBreakpointBox();
            }

            SeekToBox.Enabled = SeekToBtn.Enabled = CanUseMemoryCallbacks && RegisterPanel.CanGetCpuRegisters;

            if (RegisterPanel.CanGetCpuRegisters && CanDisassemble)
            {
                var pc = PCRegister;
                SeekToBox.Nullable = false;
                SeekToBox.SetHexProperties((long)Math.Pow(2, pc.BitSize));
                SeekToBox.SetFromRawInt(0);
            }
            else
            {
                SeekToBox.Nullable = true;
                SeekToBox.Text     = "";
            }

            StepIntoMenuItem.Enabled = StepIntoBtn.Enabled = CanStepInto;
            StepOutMenuItem.Enabled  = StepOutBtn.Enabled = CanStepOut;
            StepOverMenuItem.Enabled = StepOverBtn.Enabled = CanStepOver;

            if (!StepIntoMenuItem.Enabled)
            {
                toolTip1.SetToolTip(StepIntoBtn, "This core does not currently implement this feature");
            }

            if (!StepOutMenuItem.Enabled)
            {
                toolTip1.SetToolTip(StepOutBtn, "This core does not currently implement this feature");
            }

            if (!StepOverMenuItem.Enabled)
            {
                toolTip1.SetToolTip(StepOverBtn, "This core does not currently implement this feature");
            }
        }