void RefreshMsilView() { MsilView.BeginUpdate(); InstructionMap.Clear(); MsilView.Items.Clear(); if (SelectedNode == null || !SelectedNode.LoadMsil()) { MsilView.EndUpdate(); return; } foreach (var inst in SelectedNode.Msil) { var row = new CodeRow(inst); MsilView.Items.Add(row); InstructionMap[inst.Offset] = row; } MsilView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); MsilView.EndUpdate(); }
private void MsilView_MouseDoubleClick(object sender, MouseEventArgs e) { if (MsilView.SelectedItems.Count == 0) { return; } var item = MsilView.SelectedItems[0] as CodeRow; if (item.Inst.RefId == 0) { return; } // if a goto instruction scroll down and select that if (item.Inst.Line.StartsWith("goto ")) { item.Selected = false; if (InstructionMap.ContainsKey(item.Inst.RefId)) { var target = InstructionMap[item.Inst.RefId]; target.Selected = true; MsilView.EnsureVisible(target.Index); } } // else this is an instruction to another method, select thats else { var refNode = Model.NodeModels[item.Inst.RefId]; Main.NavigatePanelTo(refNode); } }