FTXUI 7.0.3
C++ functional terminal UI.
Loading...
Searching...
No Matches
event.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_EVENT_HPP
5#define FTXUI_COMPONENT_EVENT_HPP
6
7#include <cstdint>
8#include <ftxui/component/mouse.hpp> // for Mouse
9#include <memory>
10#include <string> // for string, operator==
11#include <string_view>
12#include <vector>
13
14#include "ftxui/util/export.hpp"
15
16namespace ftxui {
17
18class App;
19class ComponentBase;
20
21/// @brief Représente un événement. Il peut s'agir d'un événement de touche, d'un redimensionnement de terminal, ou plus encore...
22///
23/// Par exemple :
24/// - Un caractère imprimable peut être créé en utilisant Event::Character('a').
25/// - Certains événements spéciaux sont prédéfinis, comme Event::ArrowLeft.
26/// - On peut trouver un code arbitraire pour les événements spéciaux en utilisant :
27/// ./example/util/print_key_press
28/// Par exemple, CTLR+A correspond à Event::Special({1}) ;
29///
30/// Documentation utile sur la spécification xterm :
31/// https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
32///
33/// @ingroup component
34struct FTXUI_EXPORT(COMPONENT) Event {
35 // --- Section Constructeur ---------------------------------------------------
36 static Event Character(std::string_view);
37 static Event Character(char);
38 static Event Character(wchar_t);
39 static Event Special(std::string_view);
40 static Event Special(std::initializer_list<char>);
41 static Event Mouse(std::string_view, Mouse mouse);
42 static Event CursorPosition(std::string_view, int x, int y); // Interne
43 static Event CursorShape(std::string_view, int shape); // Interne
44 static Event TerminalNameVersion(std::string_view,
45 std::string name,
46 int version);
47 static Event TerminalEmulator(std::string_view,
48 std::string name,
49 std::string version);
50 static Event TerminalCapabilities(std::string_view,
51 std::vector<int> capabilities);
52
53 // --- Flèche ---
54 static const Event ArrowLeft;
55 static const Event ArrowRight;
56 static const Event ArrowUp;
57 static const Event ArrowDown;
58
59 static const Event ArrowLeftCtrl;
60 static const Event ArrowRightCtrl;
61 static const Event ArrowUpCtrl;
62 static const Event ArrowDownCtrl;
63
64 // --- Autre ---
65 static const Event Backspace;
66 static const Event Delete;
67 static const Event Return;
68 static const Event Escape;
69 static const Event Tab;
70 static const Event TabReverse;
71
72 // --- Touches de navigation ---
73 static const Event Insert;
74 static const Event Home;
75 static const Event End;
76 static const Event PageUp;
77 static const Event PageDown;
78
79 // --- Touches de fonction ---
80 // Le dllexport/dllimport de MSVC ne s'applique correctement qu'au premier
81 // déclarateur dans une déclaration multi-noms, donc celles-ci doivent être déclarées une
82 // par instruction (voir l'erreur C2487) lorsqu'elles sont compilées en tant que DLL Windows.
83 static const Event F1;
84 static const Event F2;
85 static const Event F3;
86 static const Event F4;
87 static const Event F5;
88 static const Event F6;
89 static const Event F7;
90 static const Event F8;
91 static const Event F9;
92 static const Event F10;
93 static const Event F11;
94 static const Event F12;
95
96 // --- Touches de contrôle ---
97 static const Event a;
98 static const Event A;
99 static const Event CtrlA;
100 static const Event AltA;
101 static const Event CtrlAltA;
102 static const Event b;
103 static const Event B;
104 static const Event CtrlB;
105 static const Event AltB;
106 static const Event CtrlAltB;
107 static const Event c;
108 static const Event C;
109 static const Event CtrlC;
110 static const Event AltC;
111 static const Event CtrlAltC;
112 static const Event d;
113 static const Event D;
114 static const Event CtrlD;
115 static const Event AltD;
116 static const Event CtrlAltD;
117 static const Event e;
118 static const Event E;
119 static const Event CtrlE;
120 static const Event AltE;
121 static const Event CtrlAltE;
122 static const Event f;
123 static const Event F;
124 static const Event CtrlF;
125 static const Event AltF;
126 static const Event CtrlAltF;
127 static const Event g;
128 static const Event G;
129 static const Event CtrlG;
130 static const Event AltG;
131 static const Event CtrlAltG;
132 static const Event h;
133 static const Event H;
134 static const Event CtrlH;
135 static const Event AltH;
136 static const Event CtrlAltH;
137 static const Event i;
138 static const Event I;
139 static const Event CtrlI;
140 static const Event AltI;
141 static const Event CtrlAltI;
142 static const Event j;
143 static const Event J;
144 static const Event CtrlJ;
145 static const Event AltJ;
146 static const Event CtrlAltJ;
147 static const Event k;
148 static const Event K;
149 static const Event CtrlK;
150 static const Event AltK;
151 static const Event CtrlAltK;
152 static const Event l;
153 static const Event L;
154 static const Event CtrlL;
155 static const Event AltL;
156 static const Event CtrlAltL;
157 static const Event m;
158 static const Event M;
159 static const Event CtrlM;
160 static const Event AltM;
161 static const Event CtrlAltM;
162 static const Event n;
163 static const Event N;
164 static const Event CtrlN;
165 static const Event AltN;
166 static const Event CtrlAltN;
167 static const Event o;
168 static const Event O;
169 static const Event CtrlO;
170 static const Event AltO;
171 static const Event CtrlAltO;
172 static const Event p;
173 static const Event P;
174 static const Event CtrlP;
175 static const Event AltP;
176 static const Event CtrlAltP;
177 static const Event q;
178 static const Event Q;
179 static const Event CtrlQ;
180 static const Event AltQ;
181 static const Event CtrlAltQ;
182 static const Event r;
183 static const Event R;
184 static const Event CtrlR;
185 static const Event AltR;
186 static const Event CtrlAltR;
187 static const Event s;
188 static const Event S;
189 static const Event CtrlS;
190 static const Event AltS;
191 static const Event CtrlAltS;
192 static const Event t;
193 static const Event T;
194 static const Event CtrlT;
195 static const Event AltT;
196 static const Event CtrlAltT;
197 static const Event u;
198 static const Event U;
199 static const Event CtrlU;
200 static const Event AltU;
201 static const Event CtrlAltU;
202 static const Event v;
203 static const Event V;
204 static const Event CtrlV;
205 static const Event AltV;
206 static const Event CtrlAltV;
207 static const Event w;
208 static const Event W;
209 static const Event CtrlW;
210 static const Event AltW;
211 static const Event CtrlAltW;
212 static const Event x;
213 static const Event X;
214 static const Event CtrlX;
215 static const Event AltX;
216 static const Event CtrlAltX;
217 static const Event y;
218 static const Event Y;
219 static const Event CtrlY;
220 static const Event AltY;
221 static const Event CtrlAltY;
222 static const Event z;
223 static const Event Z;
224 static const Event CtrlZ;
225 static const Event AltZ;
226 static const Event CtrlAltZ;
227
228 // --- Personnalisé ---
229 static const Event Custom;
230
231 //--- Section Méthodes ---------------------------------------------------------
232 bool operator==(const Event& other) const { return input_ == other.input_; }
233 bool operator!=(const Event& other) const { return !operator==(other); }
234 bool operator<(const Event& other) const { return input_ < other.input_; }
235
236 const std::string& input() const { return input_; }
237
238 bool is_character() const { return type_ == Type::Character; }
239 std::string character() const { return input_; }
240
241 bool is_mouse() const { return type_ == Type::Mouse; }
242 struct Mouse& mouse() { return data_.mouse; }
243
244 // --- Section Méthodes Internes -----------------------------------------------
245 bool is_cursor_position() const { return type_ == Type::CursorPosition; }
246 int cursor_x() const { return data_.cursor.x; }
247 int cursor_y() const { return data_.cursor.y; }
248
249 bool is_cursor_shape() const { return type_ == Type::CursorShape; }
250 int cursor_shape() const { return data_.cursor_shape; }
251
252 bool IsTerminalNameVersion() const;
253 const std::string& TerminalName() const;
254 int TerminalVersion() const;
255
256 bool IsTerminalEmulator() const;
257 const std::string& TerminalEmulatorName() const;
258 const std::string& TerminalEmulatorVersion() const;
259
260 bool IsTerminalCapabilities() const;
261 const std::vector<int>& TerminalCapabilities() const;
262 std::vector<std::string> TerminalCapabilityNames() const;
263
264 // Débogage
265 std::string DebugString() const;
266
267 //--- Section État ----------------------------------------------------------
268 App* screen_ = nullptr;
269
270 private:
271 friend ComponentBase;
272 friend App;
273 enum class Type : uint8_t {
274 Unknown,
275 Character,
276 Mouse,
277 CursorPosition,
278 CursorShape,
279 TerminalNameVersion,
280 TerminalEmulator,
281 TerminalCapabilities,
282 };
283 Type type_ = Type::Unknown;
284 struct Cursor {
285 int x = 0;
286 int y = 0;
287 };
288
289 union {
290 struct Mouse mouse;
291 struct Cursor cursor;
292 int cursor_shape;
293 int terminal_version;
294 } data_ = {};
295
296 std::string input_;
297 std::shared_ptr<std::string> terminal_name_;
298 std::shared_ptr<std::string> terminal_emulator_version_;
299 std::shared_ptr<std::vector<int>> terminal_capabilities_;
300};
301
302} // namespace ftxui
303
304#endif /* end of include guard: FTXUI_COMPONENT_EVENT_HPP */
L'espace de noms FTXUI ftxui::
Definition animation.hpp:11
int y
Definition elements.hpp:134