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; }
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"); } }