FTXUI  6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
component_base.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_COMPONENT_BASE_HPP
5#define FTXUI_COMPONENT_BASE_HPP
6
7#include <memory> // for unique_ptr
8#include <vector> // for vector
9
10#include "ftxui/component/captured_mouse.hpp" // for CaptureMouse
11#include "ftxui/dom/elements.hpp" // for Element
12
13namespace ftxui {
14
15class Delegate;
16class Focus;
17struct Event;
18
19namespace animation {
20class Params;
21} // namespace animation
22
23class ComponentBase;
24using Component = std::shared_ptr<ComponentBase>;
25using Components = std::vector<Component>;
26
27/// @brief It implement rendering itself as ftxui::Element. It implement
28/// keyboard navigation by responding to ftxui::Event.
29/// @ingroup component
31 public:
32 explicit ComponentBase(Components children)
33 : children_(std::move(children)) {}
34 virtual ~ComponentBase();
35 ComponentBase() = default;
36
37 // A component is not copyable/movable.
38 ComponentBase(const ComponentBase&) = delete;
42
43 // Component hierarchy:
44 ComponentBase* Parent() const;
45 Component& ChildAt(size_t i);
46 size_t ChildCount() const;
47 int Index() const;
48 void Add(Component children);
49 void Detach();
50 void DetachAllChildren();
51
52 // Renders the component.
54
55 // Override this function modify how `Render` works.
56 virtual Element OnRender();
57
58 // Handles an event.
59 // By default, reduce on children with a lazy OR.
60 //
61 // Returns whether the event was handled or not.
62 virtual bool OnEvent(Event);
63
64 // Handle an animation step.
65 virtual void OnAnimation(animation::Params& params);
66
67 // Focus management ----------------------------------------------------------
68 //
69 // If this component contains children, this indicates which one is active,
70 // nullptr if none is active.
71 //
72 // We say an element has the focus if the chain of ActiveChild() from the
73 // root component contains this object.
74 virtual Component ActiveChild();
75
76 // Return true when the component contains focusable elements.
77 // The non focusable Component will be skipped when navigating using the
78 // keyboard.
79 virtual bool Focusable() const;
80
81 // Whether this is the active child of its parent.
82 bool Active() const;
83 // Whether all the ancestors are active.
84 bool Focused() const;
85
86 // Make the |child| to be the "active" one.
87 virtual void SetActiveChild(ComponentBase* child);
88 void SetActiveChild(Component child);
89
90 // Configure all the ancestors to give focus to this component.
91 void TakeFocus();
92
93 protected:
94 CapturedMouse CaptureMouse(const Event& event);
95
97
98 private:
99 ComponentBase* parent_ = nullptr;
100 bool in_render = false;
101};
102
103} // namespace ftxui
104
105#endif /* end of include guard: FTXUI_COMPONENT_BASE_HPP */
It implement rendering itself as ftxui::Element. It implement keyboard navigation by responding to ft...
virtual bool Focusable() const
Return true when the component contains focusable elements. The non focusable Components will be skip...
Definition: component.cpp:196
bool Focused() const
Returns if the elements if focused by the user. True when the ComponentBase is focused by the user....
Definition: component.cpp:216
CapturedMouse CaptureMouse(const Event &event)
Take the CapturedMouse if available. There is only one component of them. It represents a component t...
Definition: component.cpp:250
void Add(Component children)
Add a child. @param child The child to be attached.
Definition: component.cpp:75
Element Render()
Draw the component. Build a ftxui::Element to be drawn on the ftxui::Screen representing this ftxui::...
Definition: component.cpp:111
void TakeFocus()
Configure all the ancestors to give focus to this component.
Definition: component.cpp:238
bool Active() const
Returns if the element if the currently active child of its parent.
Definition: component.cpp:207
virtual Component ActiveChild()
Return the currently Active child.
Definition: component.cpp:183
void DetachAllChildren()
Remove all children.
Definition: component.cpp:101
virtual void SetActiveChild(ComponentBase *child)
Make the |child| to be the "active" one.
Definition: component.cpp:227
int Index() const
Return index of the component in its parent. -1 if no parent.
Definition: component.cpp:58
size_t ChildCount() const
Returns the number of children.
Definition: component.cpp:52
ComponentBase(ComponentBase &&)=delete
ComponentBase & operator=(ComponentBase &&)=delete
ComponentBase * Parent() const
Return the parent ComponentBase, or nul if any.
Definition: component.cpp:39
virtual Element OnRender()
Draw the component. Build a ftxui::Element to be drawn on the ftxi::Screen representing this ftxui::C...
Definition: component.cpp:147
virtual bool OnEvent(Event)
Called in response to an event.
Definition: component.cpp:161
void Detach()
Detach this child from its parent.
Definition: component.cpp:85
ComponentBase(const ComponentBase &)=delete
ComponentBase & operator=(const ComponentBase &)=delete
Component & ChildAt(size_t i)
Access the child at index i.
Definition: component.cpp:45
ComponentBase(Components children)
virtual ~ComponentBase()
Definition: component.cpp:31
virtual void OnAnimation(animation::Params &params)
Called in response to an animation event.
Definition: component.cpp:174
std::unique_ptr< CapturedMouseInterface > CapturedMouse
std::shared_ptr< Node > Element
Definition: elements.hpp:22
std::shared_ptr< ComponentBase > Component
std::vector< Component > Components
Represent an event. It can be key press event, a terminal resize, or more ...
Definition: event.hpp:27