FTXUI 6.1.9
C++ functional terminal UI.
Chargement...
Recherche...
Aucune correspondance
examples/component/button.cpp
Aller à la documentation de ce fichier.
1// Copyright 2020 Arthur Sonzogni. Tous droits réservés.
2// L'utilisation de ce code source est régie par la licence MIT qui peut être trouvée dans
3// le fichier LICENSE.
4#include <memory> // pour shared_ptr, __shared_ptr_access
5#include <string> // pour operator+, to_string
6
7#include "ftxui/component/captured_mouse.hpp" // pour ftxui
8#include "ftxui/component/component.hpp" // pour Button, Horizontal, Renderer
9#include "ftxui/component/component_base.hpp" // pour ComponentBase
10#include "ftxui/component/screen_interactive.hpp" // pour ScreenInteractive
11#include "ftxui/dom/elements.hpp" // pour separator, gauge, text, Element, operator|, vbox, border
12
13using namespace ftxui;
14
15// Ceci est une fonction utilitaire pour créer un bouton avec un style personnalisé.
16// Le style est défini par une fonction lambda qui prend un EntryState et
17// retourne un Element.
18// Nous utilisons `center` pour centrer le texte à l'intérieur du bouton, puis `border` pour
19// ajouter une bordure autour du bouton, et enfin `flex` pour que le bouton remplisse
20// l'espace disponible.
22 auto option = ButtonOption::Animated();
23 option.transform = [](const EntryState& s) {
24 auto element = text(s.label);
25 if (s.focused) {
26 element |= bold;
27 }
28 return element | center | borderEmpty | flex;
29 };
30 return option;
31}
32
33int main() {
34 int value = 50;
35
36 // clang-format off
37 auto btn_dec_01 = Button("-1", [&] { value -= 1; }, Style());
38 auto btn_inc_01 = Button("+1", [&] { value += 1; }, Style());
39 auto btn_dec_10 = Button("-10", [&] { value -= 10; }, Style());
40 auto btn_inc_10 = Button("+10", [&] { value += 10; }, Style());
41 // clang-format on
42
43 // L'arbre des composants. Cela définit comment naviguer en utilisant le clavier.
44 // La `row` sélectionnée est partagée pour obtenir une disposition en grille.
45 int row = 0;
46 auto buttons = Container::Vertical({
47 Container::Horizontal({btn_dec_01, btn_inc_01}, &row) | flex,
48 Container::Horizontal({btn_dec_10, btn_inc_10}, &row) | flex,
49 });
50
51 // Modifie la manière de les afficher à l'écran :
52 auto component = Renderer(buttons, [&] {
53 return vbox({
54 text("value = " + std::to_string(value)),
55 separator(),
56 buttons->Render() | flex,
57 }) |
58 flex | border;
59 });
60
62 screen.Loop(component);
63 return 0;
64}
auto screen
ButtonOption Style()
static ButtonOption Animated()
Crée une ButtonOption, utilisant des couleurs animées.
static ScreenInteractive FitComponent()
Component Button(ButtonOption options)
Dessine un bouton. Exécute une fonction lors d'un clic.
Component Renderer(Component child, std::function< Element()>)
Renvoie un nouveau composant, similaire à |child|, mais utilisant |render| comme événement Component:...
Option pour le composant AnimatedButton.
virtual void Render(Screen &screen)
Element flex(Element)
Permet à un élément enfant de s'étendre proportionnellement à l'espace restant dans un conteneur.
Definition flex.cpp:123
Element bold(Element)
Utilise une police en gras, pour les éléments avec plus d'emphase.
Definition bold.cpp:33
Element text(std::wstring text)
Affiche un morceau de texte unicode.
Definition text.cpp:160
Element separator()
Dessine une séparation verticale ou horizontale entre deux autres éléments.
Element vbox(Elements)
Un conteneur affichant les éléments verticalement un par un.
Definition vbox.cpp:96
L'espace de noms FTXUI ftxui::
Definition animation.hpp:10
arguments pour la transformation depuis |ButtonOption|, |CheckboxOption|, |RadioboxOption|,...