-/* Copyright (C) 2016 Free Software Foundation, Inc.
+/* Copyright (C) 2016-2019 Free Software Foundation, Inc.
This file is part of GDB.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-#ifndef TUI_OUT_H
-#define TUI_OUT_H
+#ifndef TUI_TUI_OUT_H
+#define TUI_TUI_OUT_H
#include "cli-out.h"
+/* A ui_out class for the TUI. This is just like the CLI's ui_out,
+ except that it overrides output methods to detect when a source
+ line is being printed and show the source in the TUI's source
+ window instead of printing the line in the console window. */
class tui_ui_out : public cli_ui_out
{
public:
void do_field_int (int fldno, int width, ui_align align, const char *fldname,
int value) override;
void do_field_string (int fldno, int width, ui_align align, const char *fldname,
- const char *string) override;
+ const char *string, ui_out_style_kind style) override;
void do_field_fmt (int fldno, int width, ui_align align, const char *fldname,
const char *format, va_list args) override
ATTRIBUTE_PRINTF (6,0);
private:
- int m_line;
- int m_start_of_line;
+ /* These fields are used to make print_source_lines show the source
+ in the TUI's source window instead of in the console.
+ M_START_OF_LINE is incremented whenever something is output to
+ the ui_out. If an integer field named "line" is printed on the
+ ui_out, and nothing else has been printed yet (both
+ M_START_OF_LINE and M_LINE are still 0), we assume
+ print_source_lines is starting to print a source line, and thus
+ record the line number in M_LINE. Afterwards, when we see a
+ string field named "fullname" being output, we take the fullname
+ and the recorded line and show the source line in the TUI's
+ source window. tui_ui_out::do_text() suppresses text output
+ until it sees an endline being printed, at which point these
+ variables are reset back to 0. */
+ int m_line = 0;
+ int m_start_of_line = 0;
};
extern tui_ui_out *tui_out_new (struct ui_file *stream);
-#endif
+#endif /* TUI_TUI_OUT_H */