FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
screen.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_SCREEN_SCREEN_HPP
5#define FTXUI_SCREEN_SCREEN_HPP
6
7#include <cstdint> // for uint8_t
8#include <functional> // for function
9#include <string> // for string, basic_string, allocator
10#include <vector> // for vector
11
12#include "ftxui/screen/surface.hpp" // for Surface
13#include "ftxui/screen/terminal.hpp" // for Dimensions
14#include "ftxui/util/export.hpp" // for FTXUI_EXPORT
15
16namespace ftxui {
17
18/// @brief Define how the Screen's dimensions should look like.
19/// @ingroup screen
20namespace Dimension {
21FTXUI_EXPORT(SCREEN) Dimensions Fixed(int);
22FTXUI_EXPORT(SCREEN) Dimensions Full();
23} // namespace Dimension
24
25/// @brief A rectangular grid of Cell.
26/// @ingroup screen
27class FTXUI_EXPORT(SCREEN) Screen : public Surface {
28 public:
29 // Constructors:
30 Screen(int dimx, int dimy);
31 static Screen Create(Dimensions dimension);
32 static Screen Create(Dimensions width, Dimensions height);
33
34 // Destructor:
35 ~Screen() override = default;
36
37 std::string ToString() const;
38 void ToString(std::string& ss) const;
39
40 // Print the Screen on to the terminal.
41 void Print() const;
42
43 // Fill the screen with space and reset any screen state, like hyperlinks, and
44 // cursor
45 void Clear();
46
47 // Move the terminal cursor n-lines up with n = dimy().
48 std::string ResetPosition(bool clear = false) const;
49 void ResetPosition(std::string& ss, bool clear = false) const;
50
51 void ApplyShader();
52
53 struct Cursor {
54 int x = 0;
55 int y = 0;
56
57 enum Shape {
58 Hidden = 0,
59 BlockBlinking = 1,
60 Block = 2,
61 UnderlineBlinking = 3,
62 Underline = 4,
63 BarBlinking = 5,
64 Bar = 6,
65 };
66 Shape shape = Hidden;
67 };
68
69 Cursor cursor() const { return cursor_; }
70 void SetCursor(Cursor cursor) { cursor_ = cursor; }
71
72 // Store an hyperlink in the screen. Return the id of the hyperlink. The id is
73 // used to identify the hyperlink when the user click on it.
74 uint8_t RegisterHyperlink(std::string_view link);
75 const std::string& Hyperlink(uint8_t id) const;
76
77 using SelectionStyle = std::function<void(Cell&)>;
78 const SelectionStyle& GetSelectionStyle() const;
79 void SetSelectionStyle(SelectionStyle decorator);
80
81 protected:
82 Cursor cursor_;
83 std::vector<std::string> hyperlinks_ = {""};
84
85 // The current selection style. This is overridden by various dom elements.
86 SelectionStyle selection_style_ = [](Cell& cell) { cell.inverted ^= true; };
87};
88
89} // namespace ftxui
90
91#endif // FTXUI_SCREEN_SCREEN_HPP
#define FTXUI_EXPORT(component)
Definition export.hpp:24
The FTXUI ftxui::Dimension:: namespace.
The FTXUI ftxui:: namespace.
Definition animation.hpp:11
int y
Definition elements.hpp:126