1 /* TUI display source window.
2 
3    Copyright (C) 1998-2024 Free Software Foundation, Inc.
4 
5    Contributed by Hewlett-Packard Company.
6 
7    This file is part of GDB.
8 
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13 
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18 
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21 
22 #ifndef TUI_TUI_SOURCE_H
23 #define TUI_TUI_SOURCE_H
24 
25 #include "tui/tui-data.h"
26 #include "tui-winsource.h"
27 
28 /* A TUI source window.  */
29 
30 struct tui_source_window : public tui_source_window_base
31 {
32   tui_source_window () = default;
33 
34   DISABLE_COPY_AND_ASSIGN (tui_source_window);
35 
nametui_source_window36   const char *name () const override
37   {
38     return SRC_NAME;
39   }
40 
41   /* Return true if the location LOC corresponds to the line number
42      LINE_NO in this source window; false otherwise.  */
43   bool location_matches_p (struct bp_location *loc, int line_no) override;
44 
45   bool showing_source_p (const char *filename) const;
46 
47   void maybe_update (const frame_info_ptr &fi, symtab_and_line sal) override;
48 
erase_source_contenttui_source_window49   void erase_source_content () override
50   {
51     do_erase_source_content (_("[ No Source Available ]"));
52   }
53 
54   void display_start_addr (struct gdbarch **gdbarch_p,
55                                  CORE_ADDR *addr_p) override;
56 
57 protected:
58 
59   void do_scroll_vertical (int num_to_scroll) override;
60 
61   bool set_contents (struct gdbarch *gdbarch,
62                          const struct symtab_and_line &sal) override;
63 
extra_margintui_source_window64   int extra_margin () const override
65   {
66     return m_digits;
67   }
68 
69   void show_line_number (int lineno) const override;
70 
71 private:
72 
73   /* Answer whether a particular line number or address is displayed
74      in the current source window.  */
75   bool line_is_displayed (int line) const;
76 
77   /* How many digits to use when formatting the line number.  This
78      includes the trailing space.  */
79   int m_digits;
80 
81   /* It is the resolved form as returned by symtab_to_fullname.  */
82   gdb::unique_xmalloc_ptr<char> m_fullname;
83 };
84 
85 #endif /* TUI_TUI_SOURCE_H */
86