templates

This commit is contained in:
2022-07-15 05:00:44 +02:00
parent be949ea8a3
commit 4f804dc5c3
8 changed files with 571 additions and 583 deletions

View File

@@ -12,13 +12,13 @@ int main()
{
ApplicationData applicationData{};
startImgui(&applicationData, init, draw, "Node Test", 1280, 720);
startImgui<ApplicationData>(applicationData, init, draw, "Node Test", 1280, 720);
}
/// <summary>
/// Setup before first draw.
/// </summary>
void init(DrawData& drawData, void* customData)
void init(DrawData& drawData, ApplicationData& customData)
{
ImGuiIO& io = ImGui::GetIO();
io.Fonts->AddFontFromFileTTF("Montserrat-Regular.ttf", 16.0f);
@@ -27,17 +27,15 @@ void init(DrawData& drawData, void* customData)
/// <summary>
/// Draw main application content.
/// </summary>
void draw(DrawData& drawData, void* customData)
void draw(DrawData& drawData, ApplicationData& applicationData)
{
ApplicationData* applicationData = static_cast<ApplicationData*>(customData);
// Top menu bar
ImGui::BeginMainMenuBar();
if (ImGui::Button("Add Node"))
{
std::string name{ "Node " };
name.append(std::to_string(applicationData->nodes.size() + 1));
applicationData->nodes.push_back(NodeWindow(name));
name.append(std::to_string(applicationData.nodes.size() + 1));
applicationData.nodes.push_back(NodeWindow(name));
}
ImGui::EndMainMenuBar();
@@ -45,8 +43,8 @@ void draw(DrawData& drawData, void* customData)
bool isDraggingLine = false;
ImVec2 lineStartPos = ImVec2{};
auto nodeIterator = applicationData->nodes.begin();
while (nodeIterator != applicationData->nodes.end())
auto nodeIterator = applicationData.nodes.begin();
while (nodeIterator != applicationData.nodes.end())
{
NodeWindow& node = *nodeIterator;
@@ -56,7 +54,7 @@ void draw(DrawData& drawData, void* customData)
if (!nodeOpen)
{
cleanEreaseNodeElements(*nodeIterator, applicationData);
nodeIterator = applicationData->nodes.erase(nodeIterator);
nodeIterator = applicationData.nodes.erase(nodeIterator);
ImGui::End();
break; // TODO: contine creates bug with closing too many windows???
}
@@ -112,7 +110,7 @@ void draw(DrawData& drawData, void* customData)
if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("NODE_CONNECTION"))
{
ConnectionPayload* payloadData = static_cast<ConnectionPayload*>(payload->Data);
applicationData->addConnection(payloadData->sourceID, triggerIterator->id);
applicationData.addConnection(payloadData->sourceID, triggerIterator->id);
}
ImGui::EndDragDropTarget();
}
@@ -153,11 +151,11 @@ void draw(DrawData& drawData, void* customData)
// Draw connected lines in background
ImDrawList* bgDrawList = ImGui::GetBackgroundDrawList();
for (NodeConnection& nodeConnection : applicationData->connections)
for (NodeConnection& nodeConnection : applicationData.connections)
{
ImVec2 sourcePos = ImVec2{ 0, 0 };
ImVec2 targetPos = ImVec2{ 0, 0 };
for (auto node : applicationData->nodes)
for (auto node : applicationData.nodes)
{
for (auto alert : node.alerts)
{
@@ -237,14 +235,14 @@ bool invisibleInlineButton(const char* title, const char* id)
/// Removes any attached connections before erasing this NodeElement from a vector.
/// </summary>
/// <returns>Continued iterator</returns>
std::vector<NodeElement>::iterator cleanEraseElement(std::vector<NodeElement>& elements, std::vector<NodeElement>::iterator toErase, ApplicationData* data)
std::vector<NodeElement>::iterator cleanEraseElement(std::vector<NodeElement>& elements, std::vector<NodeElement>::iterator toErase, ApplicationData& data)
{
auto connectionIterator = data->connections.begin();
while (connectionIterator != data->connections.end())
auto connectionIterator = data.connections.begin();
while (connectionIterator != data.connections.end())
{
if (connectionIterator->sourceID == toErase->id || connectionIterator->targetID == toErase->id)
{
connectionIterator = data->connections.erase(connectionIterator);
connectionIterator = data.connections.erase(connectionIterator);
continue;
}
connectionIterator++;
@@ -252,7 +250,7 @@ std::vector<NodeElement>::iterator cleanEraseElement(std::vector<NodeElement>& e
return elements.erase(toErase);
}
void cleanEreaseNodeElements(NodeWindow& node, ApplicationData* data)
void cleanEreaseNodeElements(NodeWindow& node, ApplicationData& data)
{
auto triggerIterator = node.triggers.begin();
while (triggerIterator != node.triggers.end())