using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Mesen.GUI.Controls; using Mesen.GUI.Config; using Mesen.GUI.Debugger.Controls; namespace Mesen.GUI.Debugger { public partial class frmCodeTooltip : Form { private ICodeViewer _codeViewer; private Dictionary _values; private AddressTypeInfo? _previewAddress; private string _code; private Ld65DbgImporter _symbolProvider; protected override bool ShowWithoutActivation { get { return true; } } public frmCodeTooltip(Dictionary values, AddressTypeInfo? previewAddress = null, string code = null, Ld65DbgImporter symbolProvider = null) { _values = values; _previewAddress = previewAddress; _code = code; _symbolProvider = symbolProvider; InitializeComponent(); } protected override void OnShown(EventArgs e) { base.OnShown(e); tlpMain.SuspendLayout(); int i = 0; foreach(KeyValuePair kvp in _values) { tlpMain.RowStyles.Insert(1, new RowStyle()); Label lbl = new Label(); lbl.Margin = new Padding(2, 3, 2, 2); lbl.Text = kvp.Key + ":"; lbl.Font = new Font(lbl.Font, FontStyle.Bold); lbl.AutoSize = true; tlpMain.SetRow(lbl, i); tlpMain.SetColumn(lbl, 0); tlpMain.Controls.Add(lbl); lbl = new Label(); lbl.Font = new Font(BaseControl.MonospaceFontFamily, 10); lbl.Margin = new Padding(2); lbl.AutoSize = true; lbl.Text = kvp.Value; tlpMain.SetRow(lbl, i); tlpMain.SetColumn(lbl, 1); tlpMain.Controls.Add(lbl); i++; } if(_previewAddress.HasValue) { tlpMain.RowStyles.Insert(1, new RowStyle()); if(_code != null) { _codeViewer = new ctrlDebuggerCode(); (_codeViewer as ctrlDebuggerCode).Code = _code; } else { _codeViewer = new ctrlSourceViewer(); (_codeViewer as ctrlSourceViewer).HideFileDropdown = true; } _codeViewer.SymbolProvider = _symbolProvider; _codeViewer.CodeViewer.HideSelection = true; _codeViewer.CodeViewer.ShowScrollbars = false; _codeViewer.ScrollToAddress(_previewAddress.Value, true); _codeViewer.SetConfig(ConfigManager.Config.DebugInfo.LeftView); Control control = _codeViewer as Control; control.Dock = DockStyle.Fill; tlpMain.SetRow(control, i); tlpMain.SetColumn(control, 0); tlpMain.SetColumnSpan(control, 2); tlpMain.Controls.Add(control); } tlpMain.ResumeLayout(); this.Width = this.tlpMain.Width; this.Height = this.tlpMain.Height; } } }