3 #include "../../debug_ui.h"
5 #include <Strings/components/utils/string/string.h>
9 #include "components/3rdparty/imgui/misc/imgui_stdlib.h"
19 char search_buffer[128];
20 bool use_tabs =
false;
21 bool show_empty_tabs =
false;
39 ImGui::InputShort(global->
name.c_str(), &global->
short_value, 1, 10, NULL);
44 ImGui::InputLong(global->
name.c_str(), &global->
long_value, 1, 10, NULL);
64 float color_values[4];
66 color_values[0] = global->
color_value.GetRedAsFloat();
67 color_values[1] = global->
color_value.GetGreenAsFloat();
68 color_values[2] = global->
color_value.GetBlueAsFloat();
69 color_values[3] = global->
color_value.GetAlphaAsFloat();
72 ImGui::ColorEdit4(global->
name.c_str(), color_values);
82 ImGui::TextColored(ImVec4(1, 0, 0, 1), std::string(
"this global is not supported for editing: '" + global->
name +
"'").c_str());
87 if (global->
info.size() > 0)
109 void GenerateGlobalGroupedControls(std::string string_id_type, std::vector<Blam::Globals::EngineGlobal*> list)
111 if (list.size() > 0 || show_empty_tabs)
113 std::string tab_title_id =
"globals_editor_group_" + string_id_type +
"_title";
114 std::string tab_desc_id =
"globals_editor_group_" + string_id_type +
"_desc";
115 std::string empty_message_id =
"globals_editor_group_" + string_id_type +
"_empty";
117 if (ImGui::BeginTabItem(
ENGINE_TEXT(tab_title_id).c_str()))
123 if (list.size() == 0)
125 ImGui::TextDisabled(
ENGINE_TEXT(empty_message_id).c_str());
128 for (
int i = 0; i < list.size(); i++)
130 GenerateGlobalControl(list.at(i));
143 if (ImGui::Begin(
"Engine Globals", &
show))
145 ImGui::InputTextWithHint(
"",
"filter globals by name...", search_buffer, 128);
147 ImGui::Checkbox(
"group into tabs", &use_tabs);
152 ImGui::Checkbox(
"show empty tabs", &show_empty_tabs);
156 std::map<std::string, Blam::Globals::EngineGlobal>::iterator it;
158 std::string search_filter = std::string(search_buffer);
160 if (search_filter.length() == 0)
164 std::vector<Blam::Globals::EngineGlobal*> boolean_globals = std::vector<Blam::Globals::EngineGlobal*>();
165 std::vector<Blam::Globals::EngineGlobal*> float_globals = std::vector<Blam::Globals::EngineGlobal*>();
166 std::vector<Blam::Globals::EngineGlobal*> short_globals = std::vector<Blam::Globals::EngineGlobal*>();
167 std::vector<Blam::Globals::EngineGlobal*> int_globals = std::vector<Blam::Globals::EngineGlobal*>();
168 std::vector<Blam::Globals::EngineGlobal*> long_globals = std::vector<Blam::Globals::EngineGlobal*>();
169 std::vector<Blam::Globals::EngineGlobal*> string_globals = std::vector<Blam::Globals::EngineGlobal*>();
170 std::vector<Blam::Globals::EngineGlobal*> color_globals = std::vector<Blam::Globals::EngineGlobal*>();
171 std::vector<Blam::Globals::EngineGlobal*> unsorted_globals = std::vector<Blam::Globals::EngineGlobal*>();
175 switch (it->second.type)
179 boolean_globals.push_back(&it->second);
184 short_globals.push_back(&it->second);
189 long_globals.push_back(&it->second);
194 string_globals.push_back(&it->second);
199 int_globals.push_back(&it->second);
204 float_globals.push_back(&it->second);
209 color_globals.push_back(&it->second);
214 unsorted_globals.push_back(&it->second);
220 if (ImGui::BeginTabBar(
"globals_editor_tabs"))
222 if (boolean_globals.size() > 0 || show_empty_tabs)
224 GenerateGlobalGroupedControls(
"boolean", boolean_globals);
225 GenerateGlobalGroupedControls(
"float", float_globals);
226 GenerateGlobalGroupedControls(
"short", short_globals);
227 GenerateGlobalGroupedControls(
"int", int_globals);
228 GenerateGlobalGroupedControls(
"long", long_globals);
229 GenerateGlobalGroupedControls(
"string", string_globals);
230 GenerateGlobalGroupedControls(
"color", color_globals);
231 GenerateGlobalGroupedControls(
"unsorted", unsorted_globals);
243 GenerateGlobalControl(&it->second);
249 std::vector<Blam::Globals::EngineGlobal*> matching_globals = std::vector<Blam::Globals::EngineGlobal*>();
250 int omitted_count = 0;
254 if (BlamStrings::Utils::String::Contains(it->second.name, search_filter))
256 matching_globals.push_back(&it->second);
266 ImGui::TextDisabled(std::string(
"showing matching globals only, omitting " + std::to_string(omitted_count) +
" globals").c_str());
268 for (
int i = 0; i < matching_globals.size(); i++)
270 GenerateGlobalControl(matching_globals.at(i));