7 #include "components/3rdparty/imgui/imgui.h"
9 #include "components/3rdparty/imgui/extensions/imgui_extensions.h"
11 #include <Strings/components/utils/string/string.h>
49 ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0), std::string(
"<field '" +
display_name +
"' has no imgui control available>").c_str());
72 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
73 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
75 std::string field_string =
"<unknown id=\"" + field_id +
"\" name=\"" +
display_name +
"\" offset=\"" + std::to_string(offset) +
"\" visible=\"false\" />";
90 AsciiField(std::string _display_name, std::string _extra_info)
111 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
112 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
114 std::string field_string =
"<ascii id=\"" + field_id +
"\" name=\"" +
display_name +
"\" offset=\"" + std::to_string(offset) +
"\" length=\"" + std::to_string(
read_length) +
"\" visible=\"true\" />";
128 Int32Field(std::string _display_name, std::string _extra_info)
149 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
150 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
152 std::string field_string =
"<int32 id=\"" + field_id +
"\" name=\"" +
display_name +
"\" offset=\"" + std::to_string(offset) +
"\" visible=\"true\" />";
166 Int16Field(std::string _display_name, std::string _extra_info)
178 ImGui::DragInt(
display_name.c_str(), &value_expand, 1.0f, -32768, 32767);
191 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
192 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
194 std::string field_string =
"<int16 id=\"" + field_id +
"\" name=\"" +
display_name +
"\" offset=\"" + std::to_string(offset) +
"\" visible=\"true\" />";
208 Int8Field(std::string _display_name, std::string _extra_info)
220 ImGui::DragInt(
display_name.c_str(), &value_expand, 1.0f, 0, 255);
233 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
234 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
236 std::string field_string =
"<int8 id=\"" + field_id +
"\" name=\"" +
display_name +
"\" offset=\"" + std::to_string(offset) +
"\" visible=\"true\" />";
272 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
273 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
275 std::string field_string =
"<boolean id=\"" + field_id +
"\" name=\"" +
display_name +
"\" offset=\"" + std::to_string(offset) +
"\" visible=\"true\" />";
311 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
312 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
314 std::string field_string =
"<colorf id=\"" + field_id +
"\" name=\"" +
display_name +
"\" offset=\"" + std::to_string(offset) +
"\" visible=\"true\" format=\"rgba\" />";
329 std::vector<std::string> options;
330 int* active_item = 0;
333 EnumField(std::string _display_name, std::string _extra_info, std::vector<std::string> _options)
346 if (ImGui::BeginCombo(
display_name.c_str(), options.at(*active_item).c_str()))
348 for (
int i = 0; i < options.size(); i++)
350 if (ImGui::Selectable(options.at(i).c_str()))
368 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
369 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
371 std::string field_string =
"<enum id=\"" + field_id +
"\" name=\"" +
display_name +
"\" offset=\"" + std::to_string(offset) +
"\" visible=\"true\">";
373 for (
int i = 0; i < options.size(); i++)
375 field_string +=
"<option id=\"" + field_id +
"\" name=\"" +
display_name +
"\" value=\"" + std::to_string(i) +
"\" visible=\"true\"/>";
378 field_string +=
"</enum>";
395 Bitfield8Field(std::string _display_name, std::string _extra_info, std::vector<std::string> _options)
408 int region_width = ImGui::CalcItemWidth();
411 ImGui::BeginChild(
display_name.c_str(), ImVec2(region_width, region_height),
true, ImGuiWindowFlags_HorizontalScrollbar);
413 int max_bits_available = 0;
421 max_bits_available =
options.size();
424 for (
int i = 0; i <
options.size(); i++)
428 ImGui::Checkbox(
options.at(i).c_str(), (
bool*)prop_address);
435 for (
int i = 0; i < unused_options; i++)
437 bool helper_value =
false;
439 ImGui::Checkbox(
"", &helper_value);
441 ImGui::TextDisabled(
"unused bit");
459 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
460 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
462 std::string field_string =
"<bitfield8 id=\"" + field_id +
"\" name=\"" +
display_name +
"\" offset=\"" + std::to_string(offset) +
"\" visible=\"true\">";
464 for (
int i = 0; i <
options.size(); i++)
466 field_string +=
"<bit id=\"" + field_id +
"\" name=\"" +
display_name +
"\" index=\"" + std::to_string(i) +
"\" visible=\"true\"/>";
469 field_string +=
"</bitfield8>";
486 Bitfield16Field(std::string _display_name, std::string _extra_info, std::vector<std::string> _options)
499 int region_width = ImGui::CalcItemWidth();
502 ImGui::BeginChild(
display_name.c_str(), ImVec2(region_width, region_height),
true, ImGuiWindowFlags_HorizontalScrollbar);
504 int max_bits_available = 0;
512 max_bits_available =
options.size();
515 for (
int i = 0; i <
options.size(); i++)
519 ImGui::Checkbox(
options.at(i).c_str(), (
bool*)prop_address);
526 for (
int i = 0; i < unused_options; i++)
528 bool helper_value =
false;
530 ImGui::Checkbox(
"", &helper_value);
532 ImGui::TextDisabled(
"unused bit");
550 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
551 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
553 std::string field_string =
"<bitfield16 id=\"" + field_id +
"\" name=\"" +
display_name +
"\" offset=\"" + std::to_string(offset) +
"\" visible=\"true\">";
555 for (
int i = 0; i <
options.size(); i++)
557 field_string +=
"<bit id=\"" + field_id +
"\" name=\"" +
display_name +
"\" index=\"" + std::to_string(i) +
"\" visible=\"true\"/>";
560 field_string +=
"</bitfield16>";
577 Bitfield32Field(std::string _display_name, std::string _extra_info, std::vector<std::string> _options)
590 int region_width = ImGui::CalcItemWidth();
593 ImGui::BeginChild(
display_name.c_str(), ImVec2(region_width, region_height),
true, ImGuiWindowFlags_HorizontalScrollbar);
595 int max_bits_available = 0;
603 max_bits_available =
options.size();
606 for (
int i = 0; i <
options.size(); i++)
610 ImGui::Checkbox(
options.at(i).c_str(), (
bool*)prop_address);
617 for (
int i = 0; i < unused_options; i++)
619 bool helper_value =
false;
621 ImGui::Checkbox(
"", &helper_value);
623 ImGui::TextDisabled(
"unused bit");
641 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
642 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
644 std::string field_string =
"<bitfield32 id=\"" + field_id +
"\" name=\"" +
display_name +
"\" offset=\"" + std::to_string(offset) +
"\" visible=\"true\">";
646 for (
int i = 0; i <
options.size(); i++)
648 field_string +=
"<bit id=\"" + field_id +
"\" name=\"" +
display_name +
"\" index=\"" + std::to_string(i) +
"\" visible=\"true\"/>";
651 field_string +=
"</bitfield32>";
696 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
697 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
699 std::string field_string =
"<comment title=\"" +
display_name +
"\" visible=\"true\">";
703 field_string +=
"</comment>";
718 std::vector<std::string> valid_classes;
719 int active_class_index = 0;
720 std::string active_tag_class_label;
722 std::vector<tag_memory_data> filtered_tag_list;
723 int active_tag_index = 0;
725 TagReference(std::string _display_name, std::string _extra_info, std::vector<std::string> _valid_classes)
729 valid_classes = _valid_classes;
746 float indent = 22.0f;
755 Block(
int _entry_size, std::string _display_name, std::string _extra_info, std::vector<TagField*> _block_template)
772 std::string field_id = BlamStrings::Utils::String::ToLower(
display_name);
773 field_id = BlamStrings::Utils::String::Replace(field_id,
" ",
"_");
775 std::string field_string =
"<reflexive id=\"" + field_id +
"\" title=\"" +
display_name +
"\" offset=\"" + std::to_string(offset) +
"\" entrySize=\"" + std::to_string(
entry_size) +
"\" visible=\"true\">";
777 int field_offset = 0;
781 field_string +=
block_template.at(i)->GetFieldXMLString(field_offset);
785 field_string +=
"</reflexive>";
812 ImGui::Indent(indent);
816 ImGui::PushID(block_id.c_str());
817 if (ImGui::Button(
"Add"))
851 if (ImGui::Button(
"Insert"))
858 if (ImGui::Button(
"Duplicate"))
865 if (ImGui::Button(
"Delete"))
872 if (ImGui::Button(
"Delete All"))
879 ImGui::PushItemWidth(70.0f);
880 if (ImGui::BeginCombo(
"entry", std::to_string(
active_entry).c_str()))
884 std::string label =
"entry " + std::to_string(i);
886 if (ImGui::Selectable(label.c_str()))
894 ImGui::PopItemWidth();
900 void* next_field_address = entry_start_address;
916 ImGui::Unindent(indent);