| 167 | }; |
| 168 | |
| 169 | void inspect_system::DrawObject(const skr_value_ref_t &object, const skr::String &name) |
| 170 | { |
| 171 | SKR_ASSERT(object.type->type == SKR_TYPE_CATEGORY_OBJ); |
| 172 | ImGui::PushID(object.ptr); |
| 173 | SKR_DEFER({ ImGui::PopID(); }); |
| 174 | ImGui::TableNextRow(); |
| 175 | ImGui::TableSetColumnIndex(0); |
| 176 | ImGui::AlignTextToFramePadding(); |
| 177 | bool nodeOpen = ImGui::TreeNodeEx("Object", ImGuiTreeNodeFlags_SpanFullWidth, "%s", name.c_str()); |
| 178 | if(nodeOpen) |
| 179 | { |
| 180 | auto& rtype = *(skr::type::RecordType*)object.type; |
| 181 | for(auto& field : rtype.GetFields()) |
| 182 | { |
| 183 | skr_value_ref_t child = {(char*)object.ptr + field.offset, field.type}; |
| 184 | if(field.type->type == SKR_TYPE_CATEGORY_OBJ) |
| 185 | DrawObject(child, field.name); |
| 186 | else |
| 187 | { |
| 188 | ImGui::PushID(&field); |
| 189 | SKR_DEFER({ ImGui::PopID(); }); |
| 190 | DrawLeaf(child, field.name); |
| 191 | } |
| 192 | } |
| 193 | } |
| 194 | } |
| 195 | |
| 196 | void inspect_system::DrawLeaf(const skr_value_ref_t &value, const skr::String &name) |
| 197 | { |