FTXUI 7.0.3
C++ functional terminal UI.
Loading...
Searching...
No Matches
node.hpp
Go to the documentation of this file.
1// Copyright 2020 Arthur Sonzogni. All rights reserved.
2// Use of this source code is governed by the MIT license that can be found in
3// the LICENSE file.
4#ifndef FTXUI_DOM_NODE_HPP
5#define FTXUI_DOM_NODE_HPP
6
7#include <memory> // for shared_ptr
8#include <vector> // for vector
9
10#include "ftxui/dom/requirement.hpp" // for Requirement
11#include "ftxui/dom/selection.hpp" // for Selection
12#include "ftxui/screen/box.hpp" // for Box
14#include "ftxui/util/export.hpp"
15
16namespace ftxui {
17
18class Node;
19class Screen;
20
21using Element = std::shared_ptr<Node>;
22using Elements = std::vector<Element>;
23
24/// @brief Node es la clase base para todos los elementos en el árbol DOM.
25///
26/// Representa un único nodo en el modelo de objeto de documento (DOM) y proporciona
27/// la estructura básica para el diseño y la representación.
28/// Contiene métodos para calcular los requisitos de diseño, establecer las
29/// dimensiones del cuadro, seleccionar contenido, renderizar en la pantalla y
30/// verificar el estado del diseño.
31/// Típicamente contiene elementos hijos, que también son instancias de Node.
32///
33/// Se espera que los usuarios deriven de esta clase para crear elementos personalizados.
34///
35/// Una lista de elementos incorporados se puede encontrar en el archivo `elements.hpp`.
36///
37/// @ingroup dom
38class FTXUI_EXPORT(DOM) Node {
39 public:
40 Node();
41 explicit Node(Elements children);
42 Node(const Node&) = delete;
43 Node(const Node&&) = delete;
44 Node& operator=(const Node&) = delete;
45 Node& operator=(const Node&&) = delete;
46
47 virtual ~Node();
48
49 // Paso 1: Calcular los requisitos de diseño. Indicar al padre qué dimensiones
50 // desea tener este elemento.
51 // Propagado de Hijos a Padres.
52 virtual void ComputeRequirement();
53 Requirement requirement() { return requirement_; }
54
55 // Paso 2: Asignar a este elemento sus dimensiones finales.
56 // Propagado de Padres a Hijos.
57 virtual void SetBox(Box box);
58
59 // Paso 3: (opcional) Selección
60 // Propagado de Padres a Hijos.
61 virtual void Select(Selection& selection);
62
63 // Paso 4: Dibujar este elemento.
64 virtual void Render(Screen& screen);
65
66 virtual std::string GetSelectedContent(Selection& selection);
67
68 // El diseño puede no resolverse en una sola iteración para algunos elementos. Esto
69 // les permite solicitar iteraciones adicionales. Esta señal debe
70 // reenviarse a los hijos al menos una vez.
71 struct Status {
72 int iteration = 0;
73 bool need_iteration = false;
74 };
75 virtual void Check(Status* status);
76
77 // Reserva ABI:
78 virtual void Reserved1();
79 virtual void Reserved2();
80 virtual void Reserved3();
81 virtual void Reserved4();
82 virtual void Reserved5();
83 virtual void Reserved6();
84 virtual void Reserved7();
85 virtual void Reserved8();
86
87 friend FTXUI_EXPORT(DOM) void Render(Screen& screen, Node* node, Selection& selection);
88
89 protected:
90 Elements children_;
91 Requirement requirement_;
92 Box box_;
93};
94
95FTXUI_EXPORT(DOM) void Render(Screen& screen, const Element& element);
96FTXUI_EXPORT(DOM) void Render(Screen& screen, Node* node);
97FTXUI_EXPORT(DOM)
98void Render(Screen& screen, Node* node, Selection& selection);
99FTXUI_EXPORT(DOM)
100std::string GetNodeSelectedContent(Screen& screen,
101 Node* node,
102 Selection& selection);
103
104} // namespace ftxui
105
106#endif // FTXUI_DOM_NODE_HPP
#define FTXUI_EXPORT(component)
Definition export.hpp:24
El espacio de nombres ftxui:: de FTXUI.
Definition animation.hpp:11
std::shared_ptr< Node > Element
Definition elements.hpp:25
std::vector< Element > Elements
Definition elements.hpp:26