templates
This commit is contained in:
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user