diff --git a/gui/include/DeviceRenderer.hpp b/gui/include/DeviceRenderer.hpp index fbc4bae..40b02ef 100644 --- a/gui/include/DeviceRenderer.hpp +++ b/gui/include/DeviceRenderer.hpp @@ -11,8 +11,10 @@ public: DeviceRenderer(std::shared_ptr device, uint16_t x, uint16_t y); void Render(SDL_Renderer* renderer) const; - void Deselect(); + void RenderImGui() const; + void Deselect(); + inline bool Selected() const { return selected; } bool PropagateEvent(SDL_Event* event); private: diff --git a/gui/include/NetworkRenderer.hpp b/gui/include/NetworkRenderer.hpp index 0ca1f1f..da575da 100644 --- a/gui/include/NetworkRenderer.hpp +++ b/gui/include/NetworkRenderer.hpp @@ -10,6 +10,7 @@ public: void AddDevice(std::shared_ptr device, uint16_t x, uint16_t y); void Render(SDL_Renderer* renderer) const; + void RenderImGui() const; void PropagateEvent(SDL_Event* event); diff --git a/gui/src/DeviceRenderer.cpp b/gui/src/DeviceRenderer.cpp index f09be2e..90c042d 100644 --- a/gui/src/DeviceRenderer.cpp +++ b/gui/src/DeviceRenderer.cpp @@ -1,6 +1,7 @@ #include "DeviceRenderer.hpp" #include +#include DeviceRenderer::DeviceRenderer(std::shared_ptr device, uint16_t x, uint16_t y) : device(device), selected(false), grabbed(false) @@ -52,4 +53,12 @@ void DeviceRenderer::Render(SDL_Renderer* renderer) const { SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); SDL_RenderRect(renderer, &bbox); } +} + +void DeviceRenderer::RenderImGui() const { + if (ImGui::Begin("Device")) { + ImGui::InputScalarN("MAC Address", ImGuiDataType_U8, device->macAddress, 6, NULL, NULL, "%02X"); + + ImGui::End(); + } } \ No newline at end of file diff --git a/gui/src/NetworkRenderer.cpp b/gui/src/NetworkRenderer.cpp index cf4e2eb..eff92e3 100644 --- a/gui/src/NetworkRenderer.cpp +++ b/gui/src/NetworkRenderer.cpp @@ -30,4 +30,12 @@ void NetworkRenderer::Render(SDL_Renderer* renderer) const { for (const DeviceRenderer& device : devices) { device.Render(renderer); } +} + +void NetworkRenderer::RenderImGui() const { + for (const DeviceRenderer& device : devices) { + if (device.Selected()) { + device.RenderImGui(); + } + } } \ No newline at end of file diff --git a/gui/src/main.cpp b/gui/src/main.cpp index d1e8218..e17a6ae 100644 --- a/gui/src/main.cpp +++ b/gui/src/main.cpp @@ -36,6 +36,11 @@ int main(int argc, char** argv) { while (!shouldClose) { while (SDL_PollEvent(&event)) { ImGui_ImplSDL3_ProcessEvent(&event); + + if (ImGui::GetIO().WantCaptureMouse) { + continue; + } + networkRenderer.PropagateEvent(&event); switch (event.type) { @@ -71,6 +76,8 @@ int main(int argc, char** argv) { ImGui::EndMainMenuBar(); } + networkRenderer.RenderImGui(); + ImGui::Render(); ImGui_ImplSDLRenderer3_RenderDrawData(ImGui::GetDrawData()); diff --git a/netsim/include/Device.hpp b/netsim/include/Device.hpp index 0d415a4..c31929d 100644 --- a/netsim/include/Device.hpp +++ b/netsim/include/Device.hpp @@ -15,6 +15,6 @@ public: private: void parseAndSetMac(const std::string& macAddress); -private: +public: uint8_t macAddress[6]; }; \ No newline at end of file