Line data Source code
1 : /* Tree diagrams.
2 : Copyright (C) 2024-2026 Free Software Foundation, Inc.
3 : Contributed by David Malcolm <dmalcolm@redhat.com>.
4 :
5 : This file is part of GCC.
6 :
7 : GCC is free software; you can redistribute it and/or modify it
8 : under the terms of the GNU General Public License as published by
9 : the Free Software Foundation; either version 3, or (at your option)
10 : any later version.
11 :
12 : GCC is distributed in the hope that it will be useful, but
13 : WITHOUT ANY WARRANTY; without even the implied warranty of
14 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 : General Public License for more details.
16 :
17 : You should have received a copy of the GNU General Public License
18 : along with GCC; see the file COPYING3. If not see
19 : <http://www.gnu.org/licenses/>. */
20 :
21 : #ifndef GCC_TEXT_ART_TREE_WIDGET_H
22 : #define GCC_TEXT_ART_TREE_WIDGET_H
23 :
24 : #include "text-art/canvas.h"
25 : #include "text-art/widget.h"
26 :
27 : namespace text_art {
28 :
29 : class dump_widget_info;
30 :
31 : class tree_widget : public widget
32 : {
33 : public:
34 120 : tree_widget (std::unique_ptr<widget> node,
35 : const theme &theme,
36 : style::id_t style_id)
37 120 : : m_node (std::move (node)),
38 120 : m_theme (theme),
39 120 : m_style_id (style_id)
40 : {
41 : }
42 :
43 : static std::unique_ptr<tree_widget>
44 : make (styled_string str, const theme &theme, style::id_t style_id);
45 :
46 : static std::unique_ptr<tree_widget>
47 : make (const dump_widget_info &dwi, pretty_printer *pp);
48 :
49 : static std::unique_ptr<tree_widget>
50 : make (const dump_widget_info &dwi, const char *str);
51 :
52 : static std::unique_ptr<tree_widget>
53 : from_fmt (const dump_widget_info &dwi,
54 : printer_fn format_decoder,
55 : const char *fmt, ...)
56 : ATTRIBUTE_GCC_PPDIAG(3, 4);
57 :
58 : const char *get_desc () const override;
59 : canvas::size_t calc_req_size () final override;
60 : void update_child_alloc_rects () final override;
61 : void paint_to_canvas (canvas &canvas) final override;
62 :
63 112 : void add_child (std::unique_ptr<widget> child)
64 : {
65 112 : if (child)
66 104 : m_children.push_back (std::move (child));
67 : }
68 :
69 4 : size_t get_num_children () const
70 : {
71 4 : return m_children.size ();
72 : }
73 :
74 : private:
75 : std::unique_ptr<widget> m_node;
76 : std::vector<std::unique_ptr<widget>> m_children;
77 : const theme &m_theme;
78 : style::id_t m_style_id;
79 : };
80 :
81 : } // namespace text_art
82 :
83 : #endif /* GCC_TEXT_ART_TREE_WIDGET_H */
|