From 5dcebd4eb491cc633da56e17f548dec51efcdc03 Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Sun, 29 Sep 2019 12:32:23 -0700 Subject: Updated ImGuiUtils --- Imgui/interface/ImGuiUtils.h | 50 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'Imgui/interface') diff --git a/Imgui/interface/ImGuiUtils.h b/Imgui/interface/ImGuiUtils.h index 0f174a3..aec7494 100644 --- a/Imgui/interface/ImGuiUtils.h +++ b/Imgui/interface/ImGuiUtils.h @@ -23,6 +23,9 @@ #pragma once +#include +#include + #include "imgui.h" #include "imgui_internal.h" @@ -70,4 +73,51 @@ inline bool Checkbox(const char* label, T* v) return pressed; } +inline void HelpMarker(const char* desc, bool IsSameLine = true, const char* marker = "(?)") +{ + if (IsSameLine) + SameLine(); + + TextDisabled(marker); + if (IsItemHovered()) + { + BeginTooltip(); + PushTextWrapPos(GetFontSize() * 35.0f); + TextUnformatted(desc); + PopTextWrapPos(); + EndTooltip(); + } +} + +template::is_integer>::type> +bool SliderIntT(const char* label, T* v, int v_min, int v_max, const char* format = "%d") +{ + int i = static_cast(*v); + auto value_changed = ImGui::SliderInt(label, &i, v_min, v_max, format); + if (value_changed) + *v = static_cast(i); + return value_changed; +} + +template +bool Combo(const char* label, T* current_item, const std::pair items[], int items_count, int popup_max_height_in_items = -1) +{ + int item_idx = 0; + while(item_idx < items_count && items[item_idx].first != *current_item) + ++item_idx; + if(item_idx >= items_count) + { + UNEXPECTED("Current item was not found in the items list"); + return false; + } + std::vector names(items_count); + for(int i=0; i < items_count; ++i) + names[i] = items[i].second; + auto value_changed = Combo(label, &item_idx, names.data(), items_count, popup_max_height_in_items); + if (value_changed) + *current_item = items[item_idx].first; + + return value_changed; +} + } -- cgit v1.2.3