private void CreateNestedTextModel() { this.nestedTextModel = new NestedTextModel(); var mixedCodeDataModel = combinedCodeView.MixedCodeDataView.Model as MixedCodeDataModel; if (mixedCodeDataModel == null) { return; } var dataItemNodes = mixedCodeDataModel.GetDataItemNodes(); this.nodeByAddress = new SortedList <Address, MixedCodeDataModel.DataItemNode>(); foreach (var dataItemNode in dataItemNodes) { var curAddr = dataItemNode.StartAddress; bool nodeCreated = false; ImageMapItem item; Procedure proc = dataItemNode.Proc; if (ShowItem(dataItemNode)) { if (proc != null) { var model = new ProcedureCodeModel(proc); //$TODO: make spacing between globals / procedures user adjustable model.NumEmptyLinesAfter = 2; nestedTextModel.Nodes.Add(model); nodeCreated = true; } else if (program.ImageMap.TryFindItem(curAddr, out item) && item.DataType != null && !(item.DataType is UnknownType)) { var dt = item.DataType; var name = item.Name ?? "<unnamed>"; var tsf = new TextSpanFormatter(); var fmt = new AbsynCodeFormatter(tsf); fmt.InnerFormatter.UseTabs = false; var gdw = new GlobalDataWriter(program, services); gdw.WriteGlobalVariable(curAddr, dt, name, tsf); //$TODO: make spacing between globals / procedures user adjustable tsf.WriteLine(""); nestedTextModel.Nodes.Add(tsf.GetModel()); nodeCreated = true; } } if (nodeCreated) { dataItemNode.ModelNode = nestedTextModel.Nodes.Last(); this.nodeByAddress[curAddr] = dataItemNode; } } combinedCodeView.CodeView.Model = nestedTextModel; }
private TextViewModel GenerateTextModel(Block b) { var tsf = new TextSpanFormatter(); var fmt = new AbsynCodeFormatter(tsf); var procf = new ProcedureFormatter(b.Procedure, fmt); fmt.InnerFormatter.UseTabs = false; procf.WriteBlock(b, fmt); return(tsf.GetModel()); }
public void DisplaySegment(ImageSegment segment, Program program) { try { if (segmentView == null || segment == null || segment.Designer == null) { return; } this.program = program; var tsf = new TextSpanFormatter(); segment.Designer.Render( segment, program, tsf); this.segmentView.TextView.Model = tsf.GetModel(); } catch { } }