mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2024-11-26 12:37:06 +08:00
Add spinner.
This commit is contained in:
parent
3b0a56e114
commit
acc7012f58
@ -13,6 +13,7 @@ example(gauge)
|
|||||||
example(inverted)
|
example(inverted)
|
||||||
example(package_manager)
|
example(package_manager)
|
||||||
example(separator)
|
example(separator)
|
||||||
example(underlined)
|
example(spinner)
|
||||||
example(style_gallery)
|
example(style_gallery)
|
||||||
|
example(underlined)
|
||||||
example(vbox_hbox)
|
example(vbox_hbox)
|
||||||
|
38
examples/dom/spinner.cpp
Normal file
38
examples/dom/spinner.cpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#include <chrono>
|
||||||
|
#include <iostream>
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
|
#include "ftxui/screen/screen.hpp"
|
||||||
|
#include "ftxui/dom/elements.hpp"
|
||||||
|
#include "ftxui/util/string.hpp"
|
||||||
|
|
||||||
|
int main(int argc, const char *argv[])
|
||||||
|
{
|
||||||
|
using namespace ftxui;
|
||||||
|
using namespace ftxui::dom;
|
||||||
|
using namespace ftxui::screen;
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
|
std::string reset_position;
|
||||||
|
for(int index = 0; index < 200; ++index) {
|
||||||
|
std::vector<Element> entries;
|
||||||
|
for(int i = 0; i<22; ++i) {
|
||||||
|
if (i != 0)
|
||||||
|
entries.push_back(separator());
|
||||||
|
entries.push_back(
|
||||||
|
hbox(
|
||||||
|
text(to_wstring(i)) | size(5,1),
|
||||||
|
spinner(i, index) | bold
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
auto document = hbox(vbox(std::move(entries)) | frame, filler());
|
||||||
|
auto screen = Screen::TerminalOutput(document);
|
||||||
|
Render(screen, document.get());
|
||||||
|
std::cout << reset_position << screen.ToString() << std::flush;
|
||||||
|
reset_position = screen.ResetPosition();
|
||||||
|
|
||||||
|
std::this_thread::sleep_for(0.1s);
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
|
}
|
@ -38,6 +38,7 @@ add_library(dom
|
|||||||
src/ftxui/dom/node_decorator.cpp
|
src/ftxui/dom/node_decorator.cpp
|
||||||
src/ftxui/dom/separator.cpp
|
src/ftxui/dom/separator.cpp
|
||||||
src/ftxui/dom/size.cpp
|
src/ftxui/dom/size.cpp
|
||||||
|
src/ftxui/dom/spinner.cpp
|
||||||
src/ftxui/dom/text.cpp
|
src/ftxui/dom/text.cpp
|
||||||
src/ftxui/dom/underlined.cpp
|
src/ftxui/dom/underlined.cpp
|
||||||
src/ftxui/dom/util.cpp
|
src/ftxui/dom/util.cpp
|
||||||
|
@ -30,6 +30,7 @@ Element separator();
|
|||||||
Element gauge(float ratio);
|
Element gauge(float ratio);
|
||||||
Element frame(Element);
|
Element frame(Element);
|
||||||
Element window(Child title, Child content);
|
Element window(Child title, Child content);
|
||||||
|
Element spinner(int charset_index, size_t image_index);
|
||||||
|
|
||||||
// -- Decorator ---
|
// -- Decorator ---
|
||||||
Element bold(Element);
|
Element bold(Element);
|
||||||
@ -37,10 +38,11 @@ Element dim(Element);
|
|||||||
Element inverted(Element);
|
Element inverted(Element);
|
||||||
Element underlined(Element);
|
Element underlined(Element);
|
||||||
Element blink(Element);
|
Element blink(Element);
|
||||||
Element color(Color, Element);
|
|
||||||
Element bgcolor(Color, Element);
|
|
||||||
Decorator color(Color);
|
Decorator color(Color);
|
||||||
Decorator bgcolor(Color);
|
Decorator bgcolor(Color);
|
||||||
|
Element color(Color, Element);
|
||||||
|
Element bgcolor(Color, Element);
|
||||||
|
|
||||||
// --- Util ---
|
// --- Util ---
|
||||||
Element hcenter(Element);
|
Element hcenter(Element);
|
||||||
|
279
ftxui/src/ftxui/dom/spinner.cpp
Normal file
279
ftxui/src/ftxui/dom/spinner.cpp
Normal file
@ -0,0 +1,279 @@
|
|||||||
|
#include "ftxui/dom/node.hpp"
|
||||||
|
#include "ftxui/dom/elements.hpp"
|
||||||
|
|
||||||
|
namespace ftxui::dom {
|
||||||
|
|
||||||
|
using namespace ftxui::screen;
|
||||||
|
|
||||||
|
static const std::vector<std::vector<std::vector<std::wstring>>> elements = {
|
||||||
|
{
|
||||||
|
{L"Replaced by the gauge"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L". "},
|
||||||
|
{L".. "},
|
||||||
|
{L"..."},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"|"},
|
||||||
|
{L"/"},
|
||||||
|
{L"-"},
|
||||||
|
{L"\\"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"+"},
|
||||||
|
{L"x"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"| "},
|
||||||
|
{L"|| "},
|
||||||
|
{L"|||"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"←"},
|
||||||
|
{L"↖"},
|
||||||
|
{L"↑"},
|
||||||
|
{L"↗"},
|
||||||
|
{L"→"},
|
||||||
|
{L"↘"},
|
||||||
|
{L"↓"},
|
||||||
|
{L"↙"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"▁"},
|
||||||
|
{L"▂"},
|
||||||
|
{L"▃"},
|
||||||
|
{L"▄"},
|
||||||
|
{L"▅"},
|
||||||
|
{L"▆"},
|
||||||
|
{L"▇"},
|
||||||
|
{L"█"},
|
||||||
|
{L"▇"},
|
||||||
|
{L"▆"},
|
||||||
|
{L"▅"},
|
||||||
|
{L"▄"},
|
||||||
|
{L"▃"},
|
||||||
|
{L"▁"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"▉"},
|
||||||
|
{L"▊"},
|
||||||
|
{L"▋"},
|
||||||
|
{L"▌"},
|
||||||
|
{L"▍"},
|
||||||
|
{L"▎"},
|
||||||
|
{L"▏"},
|
||||||
|
{L"▎"},
|
||||||
|
{L"▍"},
|
||||||
|
{L"▌"},
|
||||||
|
{L"▋"},
|
||||||
|
{L"▊"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"▖"},
|
||||||
|
{L"▘"},
|
||||||
|
{L"▝"},
|
||||||
|
{L"▗"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"◢"},
|
||||||
|
{L"◣"},
|
||||||
|
{L"◤"},
|
||||||
|
{L"◥"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"◰"},
|
||||||
|
{L"◳"},
|
||||||
|
{L"◲"},
|
||||||
|
{L"◱"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"◴"},
|
||||||
|
{L"◷"},
|
||||||
|
{L"◶"},
|
||||||
|
{L"◵"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"◐"},
|
||||||
|
{L"◓"},
|
||||||
|
{L"◑"},
|
||||||
|
{L"◒"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"◡"},
|
||||||
|
{L"⊙"},
|
||||||
|
{L"◠"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"⠁"},
|
||||||
|
{L"⠂"},
|
||||||
|
{L"⠄"},
|
||||||
|
{L"⡀"},
|
||||||
|
{L"⢀"},
|
||||||
|
{L"⠠"},
|
||||||
|
{L"⠐"},
|
||||||
|
{L"⠈"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"⠋"},
|
||||||
|
{L"⠙"},
|
||||||
|
{L"⠹"},
|
||||||
|
{L"⠸"},
|
||||||
|
{L"⠼"},
|
||||||
|
{L"⠴"},
|
||||||
|
{L"⠦"},
|
||||||
|
{L"⠧"},
|
||||||
|
{L"⠇"},
|
||||||
|
{L"⠏"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"(*----------)"},
|
||||||
|
{L"(-*---------)"},
|
||||||
|
{L"(--*--------)"},
|
||||||
|
{L"(---*-------)"},
|
||||||
|
{L"(----*------)"},
|
||||||
|
{L"(-----*-----)"},
|
||||||
|
{L"(------*----)"},
|
||||||
|
{L"(-------*---)"},
|
||||||
|
{L"(--------*--)"},
|
||||||
|
{L"(---------*-)"},
|
||||||
|
{L"(----------*)"},
|
||||||
|
{L"(---------*-)"},
|
||||||
|
{L"(--------*--)"},
|
||||||
|
{L"(-------*---)"},
|
||||||
|
{L"(------*----)"},
|
||||||
|
{L"(-----*-----)"},
|
||||||
|
{L"(----*------)"},
|
||||||
|
{L"(---*-------)"},
|
||||||
|
{L"(--*--------)"},
|
||||||
|
{L"(-*---------)"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"[ ]"},
|
||||||
|
{L"[= ]"},
|
||||||
|
{L"[== ]"},
|
||||||
|
{L"[=== ]"},
|
||||||
|
{L"[==== ]"},
|
||||||
|
{L"[===== ]"},
|
||||||
|
{L"[======]"},
|
||||||
|
{L"[===== ]"},
|
||||||
|
{L"[==== ]"},
|
||||||
|
{L"[=== ]"},
|
||||||
|
{L"[== ]"},
|
||||||
|
{L"[= ]"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"[ ]"},
|
||||||
|
{L"[= ]"},
|
||||||
|
{L"[== ]"},
|
||||||
|
{L"[=== ]"},
|
||||||
|
{L"[==== ]"},
|
||||||
|
{L"[===== ]"},
|
||||||
|
{L"[======]"},
|
||||||
|
{L"[ =====]"},
|
||||||
|
{L"[ ====]"},
|
||||||
|
{L"[ ===]"},
|
||||||
|
{L"[ ==]"},
|
||||||
|
{L"[ =]"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{L"[== ]"},
|
||||||
|
{L"[== ]"},
|
||||||
|
{L"[== ]"},
|
||||||
|
{L"[== ]"},
|
||||||
|
{L"[== ]"},
|
||||||
|
{L" [== ]"},
|
||||||
|
{L"[ == ]"},
|
||||||
|
{L"[ == ]"},
|
||||||
|
{L"[ ==]"},
|
||||||
|
{L"[ ==]"},
|
||||||
|
{L"[ ==]"},
|
||||||
|
{L"[ ==]"},
|
||||||
|
{L"[ ==]"},
|
||||||
|
{L"[ ==] "},
|
||||||
|
{L"[ == ]"},
|
||||||
|
{L"[ == ]"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{
|
||||||
|
L" ─╮",
|
||||||
|
L" │",
|
||||||
|
L" ",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
L" ╮",
|
||||||
|
L" │",
|
||||||
|
L" ╯",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
L" ",
|
||||||
|
L" │",
|
||||||
|
L" ─╯",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
L" ",
|
||||||
|
L" ",
|
||||||
|
L"╰─╯",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
L" ",
|
||||||
|
L"│ ",
|
||||||
|
L"╰─ ",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
L"╭ ",
|
||||||
|
L"│ ",
|
||||||
|
L"╰ ",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
L"╭─ ",
|
||||||
|
L"│ ",
|
||||||
|
L" ",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
L"╭─╮",
|
||||||
|
L" ",
|
||||||
|
L" ",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{
|
||||||
|
L" /\\O ",
|
||||||
|
L" /\\/ ",
|
||||||
|
L" /\\ ",
|
||||||
|
L" / \\ ",
|
||||||
|
L"LOL LOL",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
L" _O ",
|
||||||
|
L" //|_ ",
|
||||||
|
L" | ",
|
||||||
|
L" /| ",
|
||||||
|
L" LLOL ",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
L" O ",
|
||||||
|
L" /_ ",
|
||||||
|
L" |\\ ",
|
||||||
|
L" / | ",
|
||||||
|
L" LOLLOL ",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
std::unique_ptr<Node> spinner(int c, size_t index) {
|
||||||
|
if (c == 0) {
|
||||||
|
index %= 40;
|
||||||
|
if (index > 20)
|
||||||
|
index = 40-index;
|
||||||
|
return gauge(index * 0.05);
|
||||||
|
}
|
||||||
|
c %= elements.size();
|
||||||
|
index %= elements[c].size();
|
||||||
|
std::vector<Element> lines;
|
||||||
|
for(const auto& it : elements[c][index])
|
||||||
|
lines.push_back(text(it));
|
||||||
|
return vbox(std::move(lines));
|
||||||
|
}
|
||||||
|
|
||||||
|
}; // namespace ftxui::dom
|
Loading…
Reference in New Issue
Block a user