FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
component_options.hpp
Go to the documentation of this file.
1// Copyright 2021 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_COMPONENT_OPTIONS_HPP
5#define FTXUI_COMPONENT_COMPONENT_OPTIONS_HPP
6
7#include <chrono> // for milliseconds
8#include <ftxui/component/animation.hpp> // for Duration, QuadraticInOut, Function
9#include <ftxui/dom/direction.hpp> // for Direction, Direction::Left, Direction::Right, Direction::Down
10#include <ftxui/dom/elements.hpp> // for Element, separator
11#include <ftxui/util/ref.hpp> // for Ref, ConstRef, StringRef
13#include <functional> // for function
14#include <limits> // for numeric_limits
15#include <string> // for string
16
17#include "ftxui/component/component_base.hpp" // for Component
18#include "ftxui/screen/color.hpp" // for Color, Color::GrayDark, Color::White
19
20namespace ftxui {
21
22/// @brief |ButtonOption|、|CheckboxOption|、|RadioboxOption|、|MenuEntryOption|、|MenuOption|からの変換の引数。
23struct EntryState {
24 std::string label; ///< 表示するラベル。
25 bool state; ///< ボタン/チェックボックス/ラジオボックスの状態。
26 bool active; ///< エントリがアクティブであるかどうか。
27 bool focused; ///< エントリがユーザーによってフォーカスされているかどうか。
28 int index; ///< 該当する場合のエントリのインデックス、または-1。
29};
30
31/// @brief 下線効果のオプション。
32/// @ingroup component
55
56/// @brief アニメーション化された可能性のある色に関するオプション。
57/// @ingroup component
59 void Set(
62 animation::Duration duration = std::chrono::milliseconds(250),
63 animation::easing::Function function = animation::easing::QuadraticInOut);
64
65 bool enabled = false;
68 animation::Duration duration = std::chrono::milliseconds(250);
70};
71
76
77/// @brief MenuEntryコンポーネントのオプション。
78/// @ingroup component
84
85/// @brief Menuコンポーネントのオプション。
86/// @ingroup component
87struct MenuOption {
88 // 標準コンストラクタ:
89 static MenuOption Horizontal();
91 static MenuOption Vertical();
93 static MenuOption Toggle();
94
95 ConstStringListRef entries; ///> エントリのリスト。
96 Ref<int> selected = 0; ///> 選択されたエントリのインデックス。
97
98 // スタイル:
102 std::function<Element()> elements_prefix;
103 std::function<Element()> elements_infix;
104 std::function<Element()> elements_postfix;
105
106 // オブザーバー:
107 std::function<void()> on_change; ///> 選択されたエントリが変更されたときに呼び出されます。
108 std::function<void()> on_enter; ///> ユーザーがEnterを押したときに呼び出されます。
110};
111
112/// @brief AnimatedButtonコンポーネントのオプション。
113/// @ingroup component
115 // 標準コンストラクタ:
116 static ButtonOption Ascii();
117 static ButtonOption Simple();
118 static ButtonOption Border();
119 static ButtonOption Animated();
120 static ButtonOption Animated(Color color);
121 static ButtonOption Animated(Color background, Color foreground);
122 static ButtonOption Animated(Color background,
123 Color foreground,
124 Color background_active,
125 Color foreground_active);
126
128 std::function<void()> on_click = [] {};
129
130 // スタイル:
131 std::function<Element(const EntryState&)> transform;
133};
134
135/// @brief Checkboxコンポーネントのオプション。
136/// @ingroup component
138 // 標準コンストラクタ:
139 static CheckboxOption Simple();
140
141 ConstStringRef label = "Checkbox";
142
144
145 // スタイル:
146 std::function<Element(const EntryState&)> transform;
147
148 // オブザーバー:
149 /// ユーザーが状態を変更したときに呼び出されます。
150 std::function<void()> on_change = [] {};
151};
152
153/// @brief Inputコンポーネントのスタイルを定義するために使用されます。
156 bool hovered; ///< 入力がマウスによってホバーされているかどうか。
157 bool focused; ///< 入力がユーザーによってフォーカスされているかどうか。
158 bool is_placeholder; ///< 入力が空でプレースホルダーを表示しているかどうか。
159};
160
161/// @brief Inputコンポーネントのオプション。
162/// @ingroup component
164 // 事前定義されたスタイルセット:
165
166 /// @brief デフォルトの入力スタイルを作成します:
167 static InputOption Default();
168 /// @brief 余白の広い、白地に黒のスタイル:
169 static InputOption Spacious();
170
171 /// 入力の内容。
173
174 /// 入力が空の場合の入力内容。
176
177 // スタイル:
178 std::function<Element(InputState)> transform;
179 Ref<bool> password = false; ///< 入力内容を'*'で隠します。
180 Ref<bool> multiline = true; ///< 入力を複数行にできるかどうか。
181 Ref<bool> insert = true; ///< 文字の挿入または上書きモード。
182
183 /// 内容が変更されたときに呼び出されます。
184 std::function<void()> on_change = [] {};
185 /// ユーザーがEnterを押したときに呼び出されます。
186 std::function<void()> on_enter = [] {};
187
188 // カーソルの文字位置:
190};
191
192/// @brief Radioboxコンポーネントのオプション。
193/// @ingroup component
195 // 標準コンストラクタ:
196 static RadioboxOption Simple();
197
198 // コンテンツ:
201
202 // スタイル:
203 std::function<Element(const EntryState&)> transform;
204
205 // オブザーバー:
206 /// 選択されたエントリが変更されたときに呼び出されます。
207 std::function<void()> on_change = [] {};
209};
210
217 : 10;
218 std::function<Element()> separator_func = [] { return ::ftxui::separator(); };
219
220 // main_sizeの制約:
222 Ref<int> max = std::numeric_limits<int>::max();
223};
224
225// @brief `Slider`コンポーネントのオプション。
226// @ingroup component
227template <typename T>
231 ConstRef<T> max = T(100);
232 ConstRef<T> increment = (max() - min()) / 20;
236 std::function<void()> on_change; ///> `value`が更新されたときに呼び出されます。
237};
238
239/// @brief `Window`コンポーネントのレンダー関数に渡される状態。
240/// @ingroup component
242 Element inner; ///< このウィンドウ内にラップされた要素。
243 const std::string& title; ///< ウィンドウのタイトル。
244 bool active = false; ///< ウィンドウがアクティブであるかどうか。
245 bool drag = false; ///< ウィンドウがドラッグされているかどうか。
246 bool resize = false; ///< ウィンドウがサイズ変更されているかどうか。
247 bool hover_left = false; ///< サイズ変更可能な左側がホバーされているかどうか。
248 bool hover_right = false; ///< サイズ変更可能な右側がホバーされているかどうか。
249 bool hover_top = false; ///< サイズ変更可能な上側がホバーされているかどうか。
250 bool hover_down = false; ///< サイズ変更可能な下側がホバーされているかどうか。
251};
252
253// @brief `Window`コンポーネントのオプション。
254// @ingroup component
256 Component inner; ///< このウィンドウでラップされたコンポーネント。
257 ConstStringRef title = ""; ///< このウィンドウによって表示されるタイトル。
258
259 Ref<int> left = 0; ///< ウィンドウの左側の位置。
260 Ref<int> top = 0; ///< ウィンドウの上側の位置。
261 Ref<int> width = 20; ///< ウィンドウの幅。
262 Ref<int> height = 10; ///< ウィンドウの高さ。
263
264 Ref<bool> resize_left = true; ///< 左側をサイズ変更できるか?
265 Ref<bool> resize_right = true; ///< 右側をサイズ変更できるか?
266 Ref<bool> resize_top = true; ///< 上側をサイズ変更できるか?
267 Ref<bool> resize_down = true; ///< 下側をサイズ変更できるか?
268
269 /// ウィンドウの外観をカスタマイズするためのオプション関数:
270 std::function<Element(const WindowRenderState&)> render;
271};
272
273/// @brief ドロップダウンコンポーネントのオプション。
274/// @ingroup component
275/// ドロップダウンメニューは、ラジオボックスを開閉するチェックボックスです。
277 /// ドロップダウンが開いているか閉じているか:
279 // チェックボックスのオプション:
281 // ラジオボックスのオプション:
283 // 変換関数:
284 std::function<Element(bool open, Element checkbox, Element radiobox)>
286};
287
288} // namespace ftxui
289
290#endif /* end of include guard: FTXUI_COMPONENT_COMPONENT_OPTIONS_HPP */
アダプター。不変オブジェクトを所有または参照します。
Definition ref.hpp:16
アダプター。文字列のリストを参照します。
Definition ref.hpp:113
アダプター。定数文字列を所有または参照します。便宜上、このクラスは複数の不変文字列を共有表現に変換します。
Definition ref.hpp:91
アダプター。可変オブジェクトを所有または参照します。
Definition ref.hpp:45
アダプター。定数文字列を所有または参照します。便宜上、このクラスは複数の可変文字列を共有表現に変換します。
Definition ref.hpp:80
static ButtonOption Animated()
アニメーションカラーを使用するButtonOptionを作成します。
bool active
ウィンドウがアクティブであるかどうか。
std::function< void()> on_click
std::function< Element()> elements_prefix
static MenuOption Toggle()
セパレータ付き水平メニューの標準オプション。 これはタブバーの実装に役立ちます。
animation::Duration follower_duration
animation::easing::Function leader_function
MenuEntryOption entries_option
bool drag
ウィンドウがドラッグされているかどうか。
static InputOption Default()
デフォルトの入力スタイルを作成します:
animation::easing::Function function
animation::Duration follower_delay
static ButtonOption Border()
ButtonOptionを作成します。ボタンはボーダーを使用して表示され、 フォーカス時に反転します。これが現在のデフォルトです。
bool hover_down
サイズ変更可能な下側がホバーされているかどうか。
const std::string & title
ウィンドウのタイトル。
void SetAnimationFunction(animation::easing::Function f)
下線のアニメーション方法を設定します。
static InputOption Spacious()
余白の広い、白地に黒のスタイル:
Ref< bool > insert
文字の挿入または上書きモード。
static CheckboxOption Simple()
標準チェックボックスのオプション。
bool resize
ウィンドウがサイズ変更されているかどうか。
std::function< void()> on_enter
Element inner
このウィンドウ内にラップされた要素。
static ButtonOption Simple()
フォーカス時に反転するButtonOptionを作成します。
UnderlineOption underline
std::function< Element(const EntryState &state)> transform
static MenuOption Horizontal()
水平メニューの標準オプション。 これはタブバーの実装に役立ちます。
static MenuOption VerticalAnimated()
アニメーション付き垂直メニューの標準オプション。 これは選択可能なアイテムのリストを実装するのに役立ちます。
animation::Duration leader_duration
static MenuOption Vertical()
垂直メニューの標準オプション。 これは選択可能なアイテムのリストを実装するのに役立ちます。
static ButtonOption Ascii()
[]文字を使用して強調表示されるButtonOptionを作成します。
void SetAnimation(animation::Duration d, animation::easing::Function f)
下線のアニメーション方法を設定します。
void SetAnimationDuration(animation::Duration d)
下線のアニメーション方法を設定します。
ConstStringListRef entries
animation::easing::Function follower_function
bool hover_right
サイズ変更可能な右側がホバーされているかどうか。
Ref< bool > password
入力内容を'*'で隠します。
std::function< Element(InputState)> transform
std::function< Element()> elements_infix
Ref< bool > open
ドロップダウンが開いているか閉じているか:
StringRef placeholder
入力が空の場合の入力内容。
std::function< Element()> elements_postfix
AnimatedColorsOption animated_colors
bool hover_left
サイズ変更可能な左側がホバーされているかどうか。
std::function< void()> on_change
StringRef content
入力の内容。
bool hover_top
サイズ変更可能な上側がホバーされているかどうか。
void Set(Color inactive, Color active, animation::Duration duration=std::chrono::milliseconds(250), animation::easing::Function function=animation::easing::QuadraticInOut)
アニメーション可能なカラーオプション。 @params _inactive コンポーネントが非アクティブな時の色。 @params _active コンポーネントがアクティブな時の色。 @params ...
animation::Duration leader_delay
std::function< Element(bool open, Element checkbox, Element radiobox)> transform
static MenuOption HorizontalAnimated()
アニメーション付き水平メニューの標準オプション。 これはタブバーの実装に役立ちます。
Ref< bool > multiline
入力を複数行にできるかどうか。
static RadioboxOption Simple()
標準ラジオボックスのオプション。
std::function< Element(const EntryState &)> transform
アニメーション化された可能性のある色に関するオプション。
AnimatedButtonコンポーネントのオプション。
Checkboxコンポーネントのオプション。
ドロップダウンコンポーネントのオプション。ドロップダウンメニューは、ラジオボックスを開閉するチェックボックスです。
Inputコンポーネントのオプション。
MenuEntryコンポーネントのオプション。
Menuコンポーネントのオプション。
Radioboxコンポーネントのオプション。
下線効果のオプション。
Windowコンポーネントのレンダー関数に渡される状態。
Direction
Directionは、東西南北の4つの基本方向を表す列挙型です。
Definition direction.hpp:11
Colorは、ターミナルユーザーインターフェースにおける色を表すクラスです。
Definition color.hpp:25
float QuadraticInOut(float p)
Definition animation.cpp:45
std::function< float(float)> Function
Definition animation.hpp:39
std::chrono::duration< float > Duration
Definition animation.hpp:24
FTXUI ftxui:: 名前空間
Definition animation.hpp:9
std::shared_ptr< Node > Element
Definition elements.hpp:21
std::shared_ptr< ComponentBase > Component
|ButtonOption|、|CheckboxOption|、|RadioboxOption|、|MenuEntryOption|、|MenuOption|からの変換の引数。
bool active
エントリがアクティブであるかどうか。
std::string label
表示するラベル。
bool focused
エントリがユーザーによってフォーカスされているかどうか。
int index
該当する場合のエントリのインデックス、または-1。
bool state
ボタン/チェックボックス/ラジオボックスの状態。
Inputコンポーネントのスタイルを定義するために使用されます。
bool focused
入力がユーザーによってフォーカスされているかどうか。
bool hovered
入力がマウスによってホバーされているかどうか。
bool is_placeholder
入力が空でプレースホルダーを表示しているかどうか。
std::function< Element()> separator_func
std::function< void()> on_change
Ref< bool > resize_down
下側をサイズ変更できるか?
Component inner
このウィンドウでラップされたコンポーネント。
Ref< bool > resize_left
左側をサイズ変更できるか?
Ref< int > height
ウィンドウの高さ。
Ref< bool > resize_top
上側をサイズ変更できるか?
Ref< int > width
ウィンドウの幅。
std::function< Element(const WindowRenderState &)> render
ウィンドウの外観をカスタマイズするためのオプション関数:
ConstStringRef title
このウィンドウによって表示されるタイトル。
Ref< bool > resize_right
右側をサイズ変更できるか?
Ref< int > left
ウィンドウの左側の位置。
Ref< int > top
ウィンドウの上側の位置。