1#ifndef GUIK_PROGRESS_MODAL_HPP
2#define GUIK_PROGRESS_MODAL_HPP
21 ProgressModal(
const std::string& modal_name) : modal_name(modal_name), running(false), max(0), current(0) {}
23 if(thread.joinable()) {
28 virtual void set_title(
const std::string& title)
override {
29 std::lock_guard<std::mutex> lock(mutex);
33 virtual void set_text(
const std::string& text)
override {
34 std::lock_guard<std::mutex> lock(mutex);
43 this->current = current;
51 this->task_name = task_name;
55 ImGui::OpenPopup(modal_name.c_str());
60 thread = std::thread([
this, task]() {
61 result_ = task(*
this);
67 std::optional<T>
run(
const std::string& task_name) {
68 if(task_name != this->task_name) {
72 bool terminated =
false;
73 if(ImGui::BeginPopupModal(modal_name.c_str(),
nullptr, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar)) {
75 std::lock_guard<std::mutex> lock(mutex);
77 ImGui::Text(
"%s", title.c_str());
80 ImGui::Text(
"%c %s",
"|/-\\"[(
int)(ImGui::GetTime() / 0.05f) & 3], text.c_str());
83 float fraction = current /
static_cast<float>(max);
84 ImGui::ProgressBar(fraction, ImVec2(128, 16));
88 ImGui::CloseCurrentPopup();
94 if(!result_.has_value() || !terminated) {
98 T ret = std::any_cast<T>(result_);
109 std::string modal_name;
113 std::atomic_bool running;
115 std::atomic_int current;
117 std::string task_name;
Definition progress_modal.hpp:19
virtual ~ProgressModal() override
Definition progress_modal.hpp:22
bool is_running() const
Definition progress_modal.hpp:103
void open(const std::string &task_name, const std::function< T(ProgressInterface &progress)> &task)
Definition progress_modal.hpp:50
virtual void increment() override
Definition progress_modal.hpp:45
virtual void set_maximum(int max) override
Definition progress_modal.hpp:38
virtual void set_current(int current) override
Definition progress_modal.hpp:42
std::optional< T > run(const std::string &task_name)
Definition progress_modal.hpp:67
virtual void set_title(const std::string &title) override
Definition progress_modal.hpp:28
ProgressModal(const std::string &modal_name)
Definition progress_modal.hpp:21
virtual void set_text(const std::string &text) override
Definition progress_modal.hpp:33
Definition drawable_container.hpp:9
Definition progress_interface.hpp:8