FTXUI 7.0.3
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#include "ftxui/util/export.hpp"
13
14namespace ftxui {
15
16class Delegate;
17class Focus;
18struct Event;
19
20namespace animation {
21class Params;
22} // namespace animation
23
24class ComponentBase;
25using Component = std::shared_ptr<ComponentBase>;
26using Components = std::vector<Component>;
27
28/// @brief Il implémente son propre rendu en tant que ftxui::Element. Il implémente
29/// la navigation au clavier en répondant à ftxui::Event.
30/// @ingroup component
31class FTXUI_EXPORT(COMPONENT) ComponentBase {
32 public:
33 explicit ComponentBase(Components children);
34 virtual ~ComponentBase();
35 ComponentBase();
36
37 // Un composant n'est ni copiable ni déplaçable.
38 ComponentBase(const ComponentBase&) = delete;
39 ComponentBase(ComponentBase&&) = delete;
40 ComponentBase& operator=(const ComponentBase&) = delete;
41 ComponentBase& operator=(ComponentBase&&) = delete;
42
43 // Hiérarchie des composants:
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 // Rend le composant.
53 Element Render();
54
55 // Outrepasse cette fonction pour modifier le fonctionnement de `Render`.
56 virtual Element OnRender();
57
58 // Gère un événement.
59 // Par défaut, réduit sur les enfants avec un OU paresseux.
60 //
61 // Retourne si l'événement a été géré ou non.
62 virtual bool OnEvent(Event);
63
64 // Gère une étape d'animation.
65 virtual void OnAnimation(animation::Params& params);
66
67 // Gestion du focus ----------------------------------------------------------
68 //
69 // Si ce composant contient des enfants, cela indique lequel est actif,
70 // nullptr si aucun n'est actif.
71 //
72 // On dit qu'un élément a le focus si la chaîne de ActiveChild() à partir du
73 // composant racine contient cet objet.
74 virtual Component ActiveChild();
75
76 // Retourne vrai lorsque le composant contient des éléments focusables.
77 // Les composants non focusables seront ignorés lors de la navigation à l'aide du
78 // clavier.
79 virtual bool Focusable() const;
80
81 // Indique si c'est l'enfant actif de son parent.
82 bool Active() const;
83 // Indique si tous les ancêtres sont actifs.
84 bool Focused() const;
85
86 // Fait de l'enfant le composant "actif".
87 virtual void SetActiveChild(ComponentBase* child);
88 void SetActiveChild(Component child);
89
90 // Configure tous les ancêtres pour donner le focus à ce composant.
91 void TakeFocus();
92
93 // Réserve ABI :
94 virtual void Reserved1();
95 virtual void Reserved2();
96 virtual void Reserved3();
97 virtual void Reserved4();
98 virtual void Reserved5();
99 virtual void Reserved6();
100 virtual void Reserved7();
101 virtual void Reserved8();
102
103 protected:
104 CapturedMouse CaptureMouse(const Event& event);
105
106 Components& children();
107 const Components& children() const;
108
109 private:
110 struct Impl;
111 std::unique_ptr<Impl> impl_;
112};
113
114} // namespace ftxui
115
116#endif /* end of include guard: FTXUI_COMPONENT_BASE_HPP */
L'espace de noms FTXUI ftxui::animation::
L'espace de noms FTXUI ftxui::
Definition animation.hpp:11
std::unique_ptr< CapturedMouseInterface > CapturedMouse
std::shared_ptr< Node > Element
Definition elements.hpp:25
std::vector< Component > Components
std::shared_ptr< ComponentBase > Component
Definition app.hpp:23