#include "gui.hpp" #include #include "GraphEditor.hpp" namespace GraphC::gui { void GraphEditor::drawNode(const GraphModel::Node& node){ ImNodes::BeginNode(node.id); ImNodes::BeginNodeTitleBar(); ImGui::TextUnformatted(node.title.c_str()); ImNodes::EndNodeTitleBar(); for(auto& a_p : node.getAttributes()){ auto&& a = *a_p.value; switch (a.type){ case GraphModel::Attribute::Type::Input: ImNodes::BeginInputAttribute(a.id); ImGui::Text("%s", a.title.c_str()); ImNodes::EndInputAttribute(); break; case GraphModel::Attribute::Type::Output: ImNodes::BeginOutputAttribute(a.id); ImGui::Text("%s", a.title.c_str()); ImGui::Indent(40); ImNodes::EndOutputAttribute(); break; case GraphModel::Attribute::Type::Static: ImNodes::BeginStaticAttribute(a.id); ImGui::Text("%s", a.title.c_str()); ImNodes::EndStaticAttribute(); break; default: throw "Node::draw() invalid type"; break; } } static const char* items[]={ "static","input", "output" }; static int selected_item_i = 0; if(ImGui::Button("add attribute")) ImGui::OpenPopup("new_attribute_popup"); if(ImGui::BeginPopup("new_attribute_popup")){ ImGui::SeparatorText("New attribute properties"); static char buf[256]; ImGui::InputText("label", buf, sizeof(buf)); if(ImGui::Button("select type")) ImGui::OpenPopup("select_type_popup"); ImGui::SameLine(); ImGui::TextUnformatted(items[selected_item_i]); if(ImGui::BeginPopup("select_type_popup")){ for (int i = 0; i < IM_ARRAYSIZE(items); i++) if (ImGui::Selectable(items[i])) selected_item_i = i; ImGui::EndPopup(); } if(ImGui::Button("Create attribute")){ graph.createAttribute(GraphModel::Attribute( graph.id_gen.getNext(), const_cast(&node), (GraphModel::Attribute::Type)selected_item_i, std::string(buf))); std::cout<<"ATTRIBUTES:\n"; std::cout<