6#include <imgui/imgui.h>
7#include <imgui/imgui_internal.h>
9#include <imgui_widgets/tooltips.h>
10#include <imgui_widgets/utils.h>
17void footer_panel::draw_footer_child(
rtti::context& ctx,
float footer_size,
const std::function<
void()>& on_draw)
19 ImGuiWindowFlags header_flags = ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoTitleBar |
20 ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar |
21 ImGuiWindowFlags_NoDecoration;
22 const std::string child_id =
"FOOTER_menubar";
23 ImGui::BeginChild(child_id.c_str(), ImVec2(0, 0),
false, header_flags);
28 auto pool_jobs = thr.pool->get_jobs_count_detailed();
31 constexpr uint64_t notification_id = 99;
32 if(!pool_jobs.empty())
34 auto callback = [jobs = std::move(pool_jobs)](
const ImGuiToast& toast,
float opacity,
const ImVec4& text_color)
36 size_t total_job_count = 0;
39 total_job_count +=
count;
43 ImGui::AlignTextToFramePadding();
45 auto spinner_size = ImGui::GetTextLineHeight();
47 ImSpinner::Spinner<ImSpinner::SpinnerTypeT::e_st_eclipse>(
"spinner",
48 ImSpinner::Radius{spinner_size * 0.5f},
49 ImSpinner::Thickness{4.0f},
50 ImSpinner::Color{ImSpinner::white},
51 ImSpinner::Speed{6.0f});
54 ImGui::TextColored(text_color,
"%s", fmt::format(
"Jobs : {}", total_job_count).c_str());
58 ImGui::TextColored(text_color,
"%s", fmt::format(
"{} : {}",
name,
count).c_str());
63 last_notification_time_ = std::chrono::steady_clock::now();
66 if(last_notification_time_ != std::chrono::steady_clock::time_point::min())
68 if(last_notification_time_ + std::chrono::milliseconds(850) < std::chrono::steady_clock::now())
70 auto callback = [](
const ImGuiToast& toast,
float opacity,
const ImVec4& text_color)
76 last_notification_time_ = std::chrono::steady_clock::time_point::min();
84 ImGuiWindowFlags footer_flags = ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoBringToFrontOnFocus |
85 ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize |
86 ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoDecoration;
87 ImGuiViewport* viewport = ImGui::GetMainViewport();
89 ImGui::SetNextWindowPos(ImVec2(viewport->WorkPos.x, viewport->WorkPos.y + viewport->WorkSize.y - footer_size));
90 ImGui::SetNextWindowSize(ImVec2(viewport->WorkSize.x, footer_size));
91 ImGui::PushStyleColor(ImGuiCol_WindowBg, ImGui::GetStyleColorVec4(ImGuiCol_MenuBarBg));
92 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f));
93 ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 1.0f);
95 ImGui::SetNextWindowViewport(viewport->ID);
96 if(ImGui::Begin(
"FOOTER",
nullptr, footer_flags))
99 ImGui::PushStyleColor(ImGuiCol_ChildBg, ImGui::GetStyleColorVec4(ImGuiCol_MenuBarBg));
100 draw_footer_child(ctx, footer_size, on_draw);
102 ImGui::PopStyleColor();
107 ImGui::PopStyleVar();
108 ImGui::PopStyleVar();
109 ImGui::PopStyleColor();
NOTIFY_INLINE auto get_color() -> const ImVec4
NOTIFY_INLINE void PushNotification(const ImGuiToast &toast)
Insert a new toast in the list.