// Track the "active" source file. The UI can use this as the default // target for input (eg, who processes the stepping commands). // There's one SourceViewerForm instance for each source-file // Get the instance for the new source file. // Called on UI thread. public static SourceViewerForm GetSourceFile(MainForm parent, string path) { path = CommandBase.Shell.FileLocator.GetFileLocation(path); var source = (SourceViewerForm)m_sourceList[path]; if (source == null) { source = SourceViewerForm.Build(parent, path); if (source != null) { AddSourceViewer(source); } } m_ActiveSourceFile = source; return(source); }
// Called once per sequence point to write Source lines. public void WriteSource() { string path = m_seqPaths[m_index]; ; SourceViewerForm file = GetSourceFile(m_parent, path); // Now add text for this sequence point if (file != null) { int lineStart = m_seqStartLines[m_index]; int lineEnd = m_seqEndLines[m_index]; for (int j = lineStart; j <= lineEnd; j++) { // Need to count how many source lines we've injected so that we can adjust // the il2row mapping accordingly. if (j == 0xFeeFee) { m_writer.WriteLine("// !hidden!"); //m_writer.FormatLastRow(Color.DarkGreen); } else if (j > file.Count) { m_writer.WriteLine(String.Format(CultureInfo.InvariantCulture, m_lineFormatPrefix, j, "<out of range>")); //m_writer.FormatLastRow(Color.DarkGreen); } else { // Write out: // line# : <contents> string t = String.Format(CultureInfo.InvariantCulture, m_lineFormatPrefix, j, file.GetLine(j)); m_writer.WriteLine(t); // Handle format across multiple lines. int columnStart = m_seqStartColumns[m_index] + m_PrefixLen; int columnEnd = m_seqEndColumns[m_index] + m_PrefixLen; if (j > lineStart) { columnStart = m_PrefixLen + 1; } if (j < lineEnd) { columnEnd = t.Length + 1; } //m_writer.FormatLastRow(columnStart, columnEnd, Color.Green); m_writer.FormatLastRow(columnStart, columnEnd, m_writer.Fonts.Emphasis, Color.Red); } //m_writer.FormatLastRow(Color.Green); } } else { // Source file not found. m_writer.WriteLine("// File '" + path + "' missing. Line " + m_seqStartLines[m_index] + " to line " + m_seqEndLines[m_index]); m_writer.FormatLastRow(Color.DarkGreen); } }