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 */
virtual bool Focusable() const
Return true when the component contains focusable elements. The non focusable Components will be skip...
bool Focused() const
Returns if the elements if focused by the user. True when the ComponentBase is focused by the user....
CapturedMouse CaptureMouse(const Event &event)
Take the CapturedMouse if available. There is only one component of them. It represents a component t...
void Add(Component children)
Add a child. @param child The child to be attached.
Definition component.cpp:70
Element Render()
Draw the component. Build a ftxui::Element to be drawn on the ftxui::Screen representing this ftxui::...
void TakeFocus()
Configure all the ancestors to give focus to this component.
bool Active() const
Returns if the element if the currently active child of its parent.
virtual Component ActiveChild()
Return the currently Active child.
void DetachAllChildren()
Remove all children.
Definition component.cpp:94
virtual void SetActiveChild(ComponentBase *child)
Make the |child| to be the "active" one.
int Index() const
Return index of the component in its parent. -1 if no parent.
Definition component.cpp:54
size_t ChildCount() const
Returns the number of children.
Definition component.cpp:49
ComponentBase(ComponentBase &&)=delete
ComponentBase & operator=(ComponentBase &&)=delete
ComponentBase * Parent() const
Return the parent ComponentBase, or nul if any.
Definition component.cpp:38
virtual Element OnRender()
Draw the component. Build a ftxui::Element to be drawn on the ftxi::Screen representing this ftxui::C...
virtual bool OnEvent(Event)
Called in response to an event.
void Detach()
Detach this child from its parent.
Definition component.cpp:79
ComponentBase(const ComponentBase &)=delete
ComponentBase & operator=(const ComponentBase &)=delete
Component & ChildAt(size_t i)
Access the child at index i.
Definition component.cpp:43
ComponentBase(Components children)
virtual ~ComponentBase()
Definition component.cpp:31
virtual void OnAnimation(animation::Params &params)
Called in response to an animation event.
It implement rendering itself as ftxui::Element. It implement keyboard navigation by responding to ft...
Represent an event. It can be key press event, a terminal resize, or more ...
Definition event.hpp:29
The FTXUI ftxui:: namespace.
Definition animation.hpp:10
std::unique_ptr< CapturedMouseInterface > CapturedMouse
std::shared_ptr< Node > Element
Definition elements.hpp:22
std::vector< Component > Components
std::shared_ptr< ComponentBase > Component