FTXUI  6.0.2
C++ functional terminal UI.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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
15namespace ftxui {
16
17class Node;
18class Screen;
19
20using Element = std::shared_ptr<Node>;
21using Elements = std::vector<Element>;
22
23class Node {
24 public:
26 explicit Node(Elements children);
27 Node(const Node&) = delete;
28 Node(const Node&&) = delete;
29 Node& operator=(const Node&) = delete;
30 Node& operator=(const Node&&) = delete;
31
32 virtual ~Node();
33
34 // Step 1: Compute layout requirement. Tell parent what dimensions this
35 // element wants to be.
36 // Propagated from Children to Parents.
37 virtual void ComputeRequirement();
39
40 // Step 2: Assign this element its final dimensions.
41 // Propagated from Parents to Children.
42 virtual void SetBox(Box box);
43
44 // Step 3: (optional) Selection
45 // Propagated from Parents to Children.
46 virtual void Select(Selection& selection);
47
48 // Step 4: Draw this element.
49 virtual void Render(Screen& screen);
50
51 virtual std::string GetSelectedContent(Selection& selection);
52
53 // Layout may not resolve within a single iteration for some elements. This
54 // allows them to request additionnal iterations. This signal must be
55 // forwarded to children at least once.
56 struct Status {
57 int iteration = 0;
58 bool need_iteration = false;
59 };
60 virtual void Check(Status* status);
61
62 friend void Render(Screen& screen, Node* node, Selection& selection);
63
64 protected:
68};
69
70void Render(Screen& screen, const Element& element);
71void Render(Screen& screen, Node* node);
74 Node* node,
76
77} // namespace ftxui
78
79#endif // FTXUI_DOM_NODE_HPP
virtual void Select(Selection &selection)
Compute the selection of an element.
Definition node.cpp:49
Elements children_
Definition node.hpp:65
virtual std::string GetSelectedContent(Selection &selection)
Definition node.cpp:76
virtual void SetBox(Box box)
Assign a position and a dimension to an element for drawing.
Definition node.cpp:43
Requirement requirement_
Definition node.hpp:66
Requirement requirement()
Definition node.hpp:38
virtual void ComputeRequirement()
Compute how much space an elements needs.
Definition node.cpp:21
virtual void Check(Status *status)
Definition node.cpp:69
virtual ~Node()
Node & operator=(const Node &)=delete
Node(const Node &)=delete
Box box_
Definition node.hpp:67
friend void Render(Screen &screen, Node *node, Selection &selection)
Definition node.cpp:100
Node & operator=(const Node &&)=delete
Node(const Node &&)=delete
A rectangular grid of Pixel.
Definition screen.hpp:27
Represent a selection in the terminal.
Definition selection.hpp:17
std::string GetNodeSelectedContent(Screen &screen, Node *node, Selection &selection)
Definition node.cpp:172
std::shared_ptr< Node > Element
Definition elements.hpp:22
std::shared_ptr< T > Make(Args &&... args)
Definition component.hpp:26
std::vector< Element > Elements
Definition elements.hpp:23
void Render(Screen &screen, const Element &element)
Display an element on a ftxui::Screen.
Definition node.cpp:88