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. 保留所有權利。
2// 本原始碼的使用受 MIT 授權約束,詳情請參閱 LICENSE 檔案。
3#ifndef FTXUI_COMPONENT_BASE_HPP
4#define FTXUI_COMPONENT_BASE_HPP
5
6#include <memory> // for unique_ptr
7#include <vector> // for vector
8
9#include "ftxui/component/captured_mouse.hpp" // for CaptureMouse
10#include "ftxui/dom/elements.hpp" // for Element
11
12namespace ftxui {
13
14class Delegate;
15class Focus;
16struct Event;
17
18namespace animation {
19class Params;
20} // namespace animation
21
22class ComponentBase;
23using Component = std::shared_ptr<ComponentBase>;
24using Components = std::vector<Component>;
25
26/// @brief 它將自己實作為 ftxui::Element 進行渲染。它透過回應 ftxui::Event 來實現鍵盤導航。
27/// @ingroup component
29 public:
30 explicit ComponentBase(Components children)
31 : children_(std::move(children)) {}
32 virtual ~ComponentBase();
33 ComponentBase() = default;
34
35 // 元件不可複製/移動。
36 ComponentBase(const ComponentBase&) = delete;
40
41 // 元件階層:
42 ComponentBase* Parent() const;
43 Component& ChildAt(size_t i);
44 size_t ChildCount() const;
45 int Index() const;
46 void Add(Component children);
47 void Detach();
48 void DetachAllChildren();
49
50 // 渲染元件。
52
53 // 覆寫此函式以修改 `Render` 的運作方式。
54 virtual Element OnRender();
55
56 // 處理一個事件。
57 // 預設情況下,使用惰性 OR 對子元件進行縮減。
58 //
59 // 返回事件是否已處理。
60 virtual bool OnEvent(Event);
61
62 // 處理動畫步驟。
63 virtual void OnAnimation(animation::Params& params);
64
65 // 焦點管理 ----------------------------------------------------------
66 //
67 // 如果此元件包含子元件,這表示哪個是活動的,
68 // 如果沒有活動的,則為 nullptr。
69 //
70 // 如果從根元件的 ActiveChild() 鏈包含此物件,我們稱一個元素具有焦點。
71 virtual Component ActiveChild();
72
73 // 當元件包含可聚焦元素時返回 true。
74 // 使用鍵盤導航時將跳過不可聚焦的元件。
75 virtual bool Focusable() const;
76
77 // 這是否是其父元件的活動子元件。
78 bool Active() const;
79 // 是否所有祖先都處於活動狀態。
80 bool Focused() const;
81
82 // 使 |child| 成為「活動」元件。
83 virtual void SetActiveChild(ComponentBase* child);
84 void SetActiveChild(Component child);
85
86 // 配置所有祖先以將焦點賦予此元件。
87 void TakeFocus();
88
89 protected:
90 CapturedMouse CaptureMouse(const Event& event);
91
93
94 private:
95 ComponentBase* parent_ = nullptr;
96 bool in_render = false;
97};
98
99} // namespace ftxui
100
101#endif /* 包含防護結束: FTXUI_COMPONENT_BASE_HPP */
virtual bool Focusable() const
當組件包含可聚焦元素時返回 true。 使用鍵盤導航時,不可聚焦的組件將被跳過。
bool Focused() const
返回元素是否被使用者聚焦。 當 ComponentBase 被使用者聚焦時返回 true。當一個元素及其所有祖先都是其父項的 ActiveChild() 並且它是 Focusable() 時,該元素被聚...
CapturedMouse CaptureMouse(const Event &event)
如果可用,則取得 CapturedMouse。它們只有一個組件。它代表一個優先於其他組件的組件。
void Add(Component children)
新增一個子項。 @param child 要附加的子項。
Definition component.cpp:69
Element Render()
繪製組件。 建構一個 ftxui::Element,用於在表示此 ftxui::ComponentBase 的 ftxui::Screen 上繪製。請覆寫 OnRender() 以修改渲染。
void TakeFocus()
配置所有祖先以將焦點給予此組件。
bool Active() const
返回該元素是否為其父項的目前活躍子項。
virtual Component ActiveChild()
返回目前活躍的子項。
void DetachAllChildren()
移除所有子項。
Definition component.cpp:93
virtual void SetActiveChild(ComponentBase *child)
使 |child| 成為「活躍」的子項。
int Index() const
返回組件在其父項中的索引。如果沒有父項則返回 -1。
Definition component.cpp:53
size_t ChildCount() const
返回子項的數量。
Definition component.cpp:48
ComponentBase(ComponentBase &&)=delete
ComponentBase & operator=(ComponentBase &&)=delete
ComponentBase * Parent() const
返回父 ComponentBase,如果沒有則返回空。
Definition component.cpp:37
virtual Element OnRender()
繪製組件。 建構一個 ftxui::Element,用於在表示此 ftxui::ComponentBase 的 ftxi::Screen 上繪製。此函數旨在被覆寫。
virtual bool OnEvent(Event)
回應事件時呼叫。
void Detach()
將此子項從其父項中分離。
Definition component.cpp:78
ComponentBase(const ComponentBase &)=delete
ComponentBase & operator=(const ComponentBase &)=delete
Component & ChildAt(size_t i)
存取索引 i 處的子項。
Definition component.cpp:42
ComponentBase(Components children)
virtual ~ComponentBase()
Definition component.cpp:30
virtual void OnAnimation(animation::Params &params)
回應動畫事件時呼叫。
它將自己實作為 ftxui::Element 進行渲染。它透過回應 ftxui::Event 來實現鍵盤導航。
代表一個事件。它可以是按鍵事件、終端機大小調整,或更多...
Definition event.hpp:27
FTXUI 的 ftxui::animation:: 命名空間
FTXUI 的 ftxui:: 命名空間
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