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 est la classe de base pour tous les éléments de l'arbre DOM.
25///
26/// Il représente un nœud unique dans le modèle d'objet de document (DOM) et fournit
27/// la structure de base pour la mise en page et le rendu.
28/// Il contient des méthodes pour calculer les exigences de mise en page, définir les dimensions
29/// de la boîte, sélectionner le contenu, rendre à l'écran et vérifier l'état de la mise en page.
30/// Il contient généralement des éléments enfants, qui sont également des instances de Node.
31///
32/// Les utilisateurs sont censés dériver de cette classe pour créer des éléments personnalisés.
33///
34/// Une liste des éléments intégrés peut être trouvée dans le fichier `elements.hpp`.
35///
36/// @ingroup dom
37class FTXUI_EXPORT(DOM) Node {
38 public:
39 Node();
40 explicit Node(Elements children);
41 Node(const Node&) = delete;
42 Node(const Node&&) = delete;
43 Node& operator=(const Node&) = delete;
44 Node& operator=(const Node&&) = delete;
45
46 virtual ~Node();
47
48 // Étape 1: Calculer les exigences de mise en page. Indique au parent les dimensions
49 // que cet élément souhaite avoir.
50 // Propagé des Enfants aux Parents.
51 virtual void ComputeRequirement();
52 Requirement requirement() { return requirement_; }
53
54 // Étape 2: Attribuer à cet élément ses dimensions finales.
55 // Propagé des Parents aux Enfants.
56 virtual void SetBox(Box box);
57
58 // Étape 3: (optionnel) Sélection
59 // Propagé des Parents aux Enfants.
60 virtual void Select(Selection& selection);
61
62 // Étape 4: Dessiner cet élément.
63 virtual void Render(Screen& screen);
64
65 virtual std::string GetSelectedContent(Selection& selection);
66
67 // La mise en page peut ne pas se résoudre en une seule itération pour certains éléments. Ceci
68 // leur permet de demander des itérations supplémentaires. Ce signal doit être
69 // transmis aux enfants au moins une fois.
70 struct Status {
71 int iteration = 0;
72 bool need_iteration = false;
73 };
74 virtual void Check(Status* status);
75
76 // Réserve ABI :
77 virtual void Reserved1();
78 virtual void Reserved2();
79 virtual void Reserved3();
80 virtual void Reserved4();
81 virtual void Reserved5();
82 virtual void Reserved6();
83 virtual void Reserved7();
84 virtual void Reserved8();
85
86 friend FTXUI_EXPORT(DOM) void Render(Screen& screen, Node* node, Selection& selection);
87
88 protected:
89 Elements children_;
90 Requirement requirement_;
91 Box box_;
92};
93
94FTXUI_EXPORT(DOM) void Render(Screen& screen, const Element& element);
95FTXUI_EXPORT(DOM) void Render(Screen& screen, Node* node);
96FTXUI_EXPORT(DOM)
97void Render(Screen& screen, Node* node, Selection& selection);
98FTXUI_EXPORT(DOM)
99std::string GetNodeSelectedContent(Screen& screen,
100 Node* node,
101 Selection& selection);
102
103} // namespace ftxui
104
105#endif // FTXUI_DOM_NODE_HPP
#define FTXUI_EXPORT(component)
Definition export.hpp:24
L'espace de noms FTXUI ftxui::
Definition animation.hpp:11
std::shared_ptr< Node > Element
Definition elements.hpp:25
std::vector< Element > Elements
Definition elements.hpp:26