mirror of
https://github.com/CachyOS/New-Cli-Installer.git
synced 2025-01-23 22:42:31 +08:00
🧹 widgets: refactor a bit
This commit is contained in:
parent
5cf7f775f3
commit
2eab6198d7
@ -88,15 +88,15 @@ Element centered_interative_multi(const std::string_view& title, Component& widg
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Element multiline_text(const std::vector<std::string>& lines) noexcept {
|
Element multiline_text(std::vector<std::string>&& lines) noexcept {
|
||||||
Elements multiline;
|
Elements multiline;
|
||||||
|
|
||||||
std::transform(lines.cbegin(), lines.cend(), std::back_inserter(multiline),
|
std::transform(std::make_move_iterator(lines.begin()), std::make_move_iterator(lines.end()), std::back_inserter(multiline),
|
||||||
[=](auto&& line) -> Element { return std::move(text(line)); });
|
[=](auto&& line) -> Element { return std::move(text(std::forward<decltype(line)>(line))); });
|
||||||
return std::move(vbox(std::move(multiline))) | frame;
|
return std::move(vbox(std::move(multiline))) | frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
Components from_vector_checklist(const std::vector<std::string>& opts, bool* opts_state) noexcept {
|
Components from_vector_checklist(const std::vector<std::string>& opts, bool* const opts_state) noexcept {
|
||||||
Components components;
|
Components components;
|
||||||
|
|
||||||
for (size_t i = 0; i < opts.size(); ++i) {
|
for (size_t i = 0; i < opts.size(); ++i) {
|
||||||
@ -106,7 +106,7 @@ Components from_vector_checklist(const std::vector<std::string>& opts, bool* opt
|
|||||||
return components;
|
return components;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string from_checklist_string(const std::vector<std::string>& opts, bool* opts_state) noexcept {
|
std::string from_checklist_string(const std::vector<std::string>& opts, const bool* const opts_state) noexcept {
|
||||||
std::string res{};
|
std::string res{};
|
||||||
|
|
||||||
for (size_t i = 0; i < opts.size(); ++i) {
|
for (size_t i = 0; i < opts.size(); ++i) {
|
||||||
@ -120,7 +120,7 @@ std::string from_checklist_string(const std::vector<std::string>& opts, bool* op
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> from_checklist_vector(const std::vector<std::string>& opts, bool* opts_state) noexcept {
|
std::vector<std::string> from_checklist_vector(const std::vector<std::string>& opts, const bool* const opts_state) noexcept {
|
||||||
std::vector<std::string> res{};
|
std::vector<std::string> res{};
|
||||||
|
|
||||||
for (size_t i = 0; i < opts.size(); ++i) {
|
for (size_t i = 0; i < opts.size(); ++i) {
|
||||||
@ -138,7 +138,7 @@ void msgbox_widget(const std::string_view& content, Decorator boxsize) noexcept
|
|||||||
|
|
||||||
auto container = Container::Horizontal({button_back});
|
auto container = Container::Horizontal({button_back});
|
||||||
auto renderer = Renderer(container, [&] {
|
auto renderer = Renderer(container, [&] {
|
||||||
return centered_widget(container, "New CLI Installer", multiline_text(utils::make_multiline(content)) | boxsize);
|
return detail::centered_widget(container, "New CLI Installer", detail::multiline_text(utils::make_multiline(content)) | boxsize);
|
||||||
});
|
});
|
||||||
/* clang-format on */
|
/* clang-format on */
|
||||||
|
|
||||||
@ -152,13 +152,13 @@ bool inputbox_widget(std::string& value, const std::string_view& content, Decora
|
|||||||
success = true;
|
success = true;
|
||||||
screen.ExitLoopClosure()();
|
screen.ExitLoopClosure()();
|
||||||
};
|
};
|
||||||
InputOption input_option{.on_enter = ok_callback, .password = password};
|
const InputOption input_option{.on_enter = ok_callback, .password = password};
|
||||||
auto input_value = Input(&value, "", input_option);
|
auto input_value = Input(&value, "", input_option);
|
||||||
auto content_container = Renderer([&] {
|
auto content_container = Renderer([&] {
|
||||||
return multiline_text(utils::make_multiline(content)) | hcenter | boxsize;
|
return multiline_text(utils::make_multiline(content)) | hcenter | boxsize;
|
||||||
});
|
});
|
||||||
|
|
||||||
auto controls_container = controls_widget({"OK", "Cancel"}, {ok_callback, screen.ExitLoopClosure()});
|
auto controls_container = detail::controls_widget({"OK", "Cancel"}, {ok_callback, screen.ExitLoopClosure()});
|
||||||
|
|
||||||
auto controls = Renderer(controls_container, [&] {
|
auto controls = Renderer(controls_container, [&] {
|
||||||
return controls_container->Render() | hcenter | size(HEIGHT, LESS_THAN, 3) | size(WIDTH, GREATER_THAN, 25);
|
return controls_container->Render() | hcenter | size(HEIGHT, LESS_THAN, 3) | size(WIDTH, GREATER_THAN, 25);
|
||||||
@ -173,7 +173,7 @@ bool inputbox_widget(std::string& value, const std::string_view& content, Decora
|
|||||||
});
|
});
|
||||||
|
|
||||||
auto renderer = Renderer(global, [&] {
|
auto renderer = Renderer(global, [&] {
|
||||||
return centered_interative_multi("New CLI Installer", global);
|
return detail::centered_interative_multi("New CLI Installer", global);
|
||||||
});
|
});
|
||||||
|
|
||||||
screen.Loop(renderer);
|
screen.Loop(renderer);
|
||||||
@ -186,7 +186,7 @@ void infobox_widget(const std::string_view& content, Decorator boxsize) noexcept
|
|||||||
Dimension::Full() // Height
|
Dimension::Full() // Height
|
||||||
);
|
);
|
||||||
|
|
||||||
auto element = centered_widget_nocontrols("New CLI Installer", multiline_text(utils::make_multiline(content)) | vcenter | boxsize);
|
auto element = detail::centered_widget_nocontrols("New CLI Installer", detail::multiline_text(utils::make_multiline(content)) | vcenter | boxsize);
|
||||||
Render(screen, element);
|
Render(screen, element);
|
||||||
screen.Print();
|
screen.Print();
|
||||||
}
|
}
|
||||||
@ -199,7 +199,7 @@ bool yesno_widget(const std::string_view& content, Decorator boxsize) noexcept {
|
|||||||
success = true;
|
success = true;
|
||||||
screen.ExitLoopClosure()();
|
screen.ExitLoopClosure()();
|
||||||
};
|
};
|
||||||
auto controls_container = controls_widget({"OK", "Cancel"}, {ok_callback, screen.ExitLoopClosure()});
|
auto controls_container = detail::controls_widget({"OK", "Cancel"}, {ok_callback, screen.ExitLoopClosure()});
|
||||||
|
|
||||||
auto controls = Renderer(controls_container, [&] {
|
auto controls = Renderer(controls_container, [&] {
|
||||||
return controls_container->Render() | hcenter | size(HEIGHT, LESS_THAN, 3) | size(WIDTH, GREATER_THAN, 25);
|
return controls_container->Render() | hcenter | size(HEIGHT, LESS_THAN, 3) | size(WIDTH, GREATER_THAN, 25);
|
||||||
@ -210,7 +210,7 @@ bool yesno_widget(const std::string_view& content, Decorator boxsize) noexcept {
|
|||||||
});
|
});
|
||||||
|
|
||||||
auto renderer = Renderer(container, [&] {
|
auto renderer = Renderer(container, [&] {
|
||||||
return centered_widget(container, "New CLI Installer", multiline_text(utils::make_multiline(content)) | hcenter | boxsize);
|
return detail::centered_widget(container, "New CLI Installer", detail::multiline_text(utils::make_multiline(content)) | hcenter | boxsize);
|
||||||
});
|
});
|
||||||
|
|
||||||
screen.Loop(renderer);
|
screen.Loop(renderer);
|
||||||
@ -229,7 +229,7 @@ bool yesno_widget(ftxui::Component& container, Decorator boxsize) noexcept {
|
|||||||
success = true;
|
success = true;
|
||||||
screen.ExitLoopClosure()();
|
screen.ExitLoopClosure()();
|
||||||
};
|
};
|
||||||
auto controls_container = controls_widget({"OK", "Cancel"}, {ok_callback, screen.ExitLoopClosure()});
|
auto controls_container = detail::controls_widget({"OK", "Cancel"}, {ok_callback, screen.ExitLoopClosure()});
|
||||||
|
|
||||||
auto controls = Renderer(controls_container, [&] {
|
auto controls = Renderer(controls_container, [&] {
|
||||||
return controls_container->Render() | hcenter | size(HEIGHT, LESS_THAN, 3) | size(WIDTH, GREATER_THAN, 25);
|
return controls_container->Render() | hcenter | size(HEIGHT, LESS_THAN, 3) | size(WIDTH, GREATER_THAN, 25);
|
||||||
@ -242,7 +242,7 @@ bool yesno_widget(ftxui::Component& container, Decorator boxsize) noexcept {
|
|||||||
});
|
});
|
||||||
|
|
||||||
auto renderer = Renderer(global, [&] {
|
auto renderer = Renderer(global, [&] {
|
||||||
return centered_interative_multi("New CLI Installer", global);
|
return detail::centered_interative_multi("New CLI Installer", global);
|
||||||
});
|
});
|
||||||
|
|
||||||
screen.Loop(renderer);
|
screen.Loop(renderer);
|
||||||
@ -256,7 +256,7 @@ void menu_widget(const std::vector<std::string>& entries, const std::function<vo
|
|||||||
return menu->Render() | center | widget_sizes.content_size;
|
return menu->Render() | center | widget_sizes.content_size;
|
||||||
});
|
});
|
||||||
|
|
||||||
auto controls_container = controls_widget({"OK", "Cancel"}, {ok_callback, screen->ExitLoopClosure()});
|
auto controls_container = detail::controls_widget({"OK", "Cancel"}, {ok_callback, screen->ExitLoopClosure()});
|
||||||
|
|
||||||
auto controls = Renderer(controls_container, [&] {
|
auto controls = Renderer(controls_container, [&] {
|
||||||
return controls_container->Render() | hcenter | size(HEIGHT, LESS_THAN, 3) | size(WIDTH, GREATER_THAN, 25);
|
return controls_container->Render() | hcenter | size(HEIGHT, LESS_THAN, 3) | size(WIDTH, GREATER_THAN, 25);
|
||||||
@ -279,7 +279,7 @@ void menu_widget(const std::vector<std::string>& entries, const std::function<vo
|
|||||||
auto global{Container::Vertical(children)};
|
auto global{Container::Vertical(children)};
|
||||||
|
|
||||||
auto renderer = Renderer(global, [&] {
|
auto renderer = Renderer(global, [&] {
|
||||||
return centered_interative_multi("New CLI Installer", global);
|
return detail::centered_interative_multi("New CLI Installer", global);
|
||||||
});
|
});
|
||||||
|
|
||||||
screen->Loop(renderer);
|
screen->Loop(renderer);
|
||||||
@ -294,7 +294,7 @@ void radiolist_widget(const std::vector<std::string>& entries, const std::functi
|
|||||||
return radiolist->Render() | center | widget_sizes.content_size;
|
return radiolist->Render() | center | widget_sizes.content_size;
|
||||||
});
|
});
|
||||||
|
|
||||||
auto controls_container = controls_widget({"OK", "Cancel"}, {ok_callback, screen->ExitLoopClosure()});
|
auto controls_container = detail::controls_widget({"OK", "Cancel"}, {ok_callback, screen->ExitLoopClosure()});
|
||||||
|
|
||||||
auto controls = Renderer(controls_container, [&] {
|
auto controls = Renderer(controls_container, [&] {
|
||||||
return controls_container->Render() | hcenter | size(HEIGHT, LESS_THAN, 3) | size(WIDTH, GREATER_THAN, 25);
|
return controls_container->Render() | hcenter | size(HEIGHT, LESS_THAN, 3) | size(WIDTH, GREATER_THAN, 25);
|
||||||
@ -317,7 +317,7 @@ void radiolist_widget(const std::vector<std::string>& entries, const std::functi
|
|||||||
auto global{Container::Vertical(children)};
|
auto global{Container::Vertical(children)};
|
||||||
|
|
||||||
auto renderer = Renderer(global, [&] {
|
auto renderer = Renderer(global, [&] {
|
||||||
return centered_interative_multi(widget_res.title, global);
|
return detail::centered_interative_multi(widget_res.title, global);
|
||||||
});
|
});
|
||||||
|
|
||||||
screen->Loop(renderer);
|
screen->Loop(renderer);
|
||||||
@ -329,7 +329,7 @@ void checklist_widget(const std::vector<std::string>& opts, const std::function<
|
|||||||
return checklist->Render() | center | widget_sizes.content_size;
|
return checklist->Render() | center | widget_sizes.content_size;
|
||||||
});
|
});
|
||||||
|
|
||||||
auto controls_container = controls_widget({"OK", "Cancel"}, {ok_callback, screen->ExitLoopClosure()});
|
auto controls_container = detail::controls_widget({"OK", "Cancel"}, {ok_callback, screen->ExitLoopClosure()});
|
||||||
|
|
||||||
auto controls = Renderer(controls_container, [&] {
|
auto controls = Renderer(controls_container, [&] {
|
||||||
return controls_container->Render() | hcenter | size(HEIGHT, LESS_THAN, 3) | size(WIDTH, GREATER_THAN, 25);
|
return controls_container->Render() | hcenter | size(HEIGHT, LESS_THAN, 3) | size(WIDTH, GREATER_THAN, 25);
|
||||||
@ -352,7 +352,7 @@ void checklist_widget(const std::vector<std::string>& opts, const std::function<
|
|||||||
auto global{Container::Vertical(children)};
|
auto global{Container::Vertical(children)};
|
||||||
|
|
||||||
auto renderer = Renderer(global, [&] {
|
auto renderer = Renderer(global, [&] {
|
||||||
return centered_interative_multi(title, global);
|
return detail::centered_interative_multi(title, global);
|
||||||
});
|
});
|
||||||
|
|
||||||
screen->Loop(renderer);
|
screen->Loop(renderer);
|
||||||
|
@ -31,9 +31,9 @@ namespace detail {
|
|||||||
auto controls_widget(const std::array<std::string_view, 2>&& titles, const std::array<std::function<void()>, 2>&& callbacks, ftxui::ButtonOption* button_option) noexcept -> ftxui::Component;
|
auto controls_widget(const std::array<std::string_view, 2>&& titles, const std::array<std::function<void()>, 2>&& callbacks, ftxui::ButtonOption* button_option) noexcept -> ftxui::Component;
|
||||||
auto centered_interative_multi(const std::string_view& title, ftxui::Component& widgets) noexcept -> ftxui::Element;
|
auto centered_interative_multi(const std::string_view& title, ftxui::Component& widgets) noexcept -> ftxui::Element;
|
||||||
auto multiline_text(const std::vector<std::string>& lines) noexcept -> ftxui::Element;
|
auto multiline_text(const std::vector<std::string>& lines) noexcept -> ftxui::Element;
|
||||||
auto from_vector_checklist(const std::vector<std::string>& opts, bool* opts_state) noexcept -> ftxui::Components;
|
auto from_vector_checklist(const std::vector<std::string>& opts, bool* const opts_state) noexcept -> ftxui::Components;
|
||||||
auto from_checklist_string(const std::vector<std::string>& opts, bool* opts_state) noexcept -> std::string;
|
auto from_checklist_string(const std::vector<std::string>& opts, const bool* const opts_state) noexcept -> std::string;
|
||||||
auto from_checklist_vector(const std::vector<std::string>& opts, bool* opts_state) noexcept -> std::vector<std::string>;
|
auto from_checklist_vector(const std::vector<std::string>& opts, const bool* const opts_state) noexcept -> std::vector<std::string>;
|
||||||
void msgbox_widget(const std::string_view& content, ftxui::Decorator boxsize = ftxui::hcenter | size(ftxui::HEIGHT, ftxui::GREATER_THAN, 5)) noexcept;
|
void msgbox_widget(const std::string_view& content, ftxui::Decorator boxsize = ftxui::hcenter | size(ftxui::HEIGHT, ftxui::GREATER_THAN, 5)) noexcept;
|
||||||
bool inputbox_widget(std::string& value, const std::string_view& content, ftxui::Decorator boxsize = size(ftxui::HEIGHT, ftxui::GREATER_THAN, 5), bool password = false) noexcept;
|
bool inputbox_widget(std::string& value, const std::string_view& content, ftxui::Decorator boxsize = size(ftxui::HEIGHT, ftxui::GREATER_THAN, 5), bool password = false) noexcept;
|
||||||
void infobox_widget(const std::string_view& content, ftxui::Decorator boxsize = size(ftxui::HEIGHT, ftxui::GREATER_THAN, 5)) noexcept;
|
void infobox_widget(const std::string_view& content, ftxui::Decorator boxsize = size(ftxui::HEIGHT, ftxui::GREATER_THAN, 5)) noexcept;
|
||||||
|
Loading…
Reference in New Issue
Block a user