diff --git a/tools/simulators.cpp b/tools/simulators.cpp index 451c2d6..6041911 100644 --- a/tools/simulators.cpp +++ b/tools/simulators.cpp @@ -3,7 +3,7 @@ Simulators::Simulators() { - + INSERT_SIMULATOR(Test_Sim); } void Simulators::run() @@ -17,6 +17,7 @@ void Simulators::run() return; } + m_before = this->m_simulators.at(m_current_simulator)->get_UI_items(); this->m_simulators.at(m_current_simulator)->run(); } @@ -59,7 +60,7 @@ std::vector Simulators::list_simulators() const return names; } -Simulator_base* Simulators::invoke_active_simulator() const +Simulator_base* Simulators::invoke_active_simulator() { if (this->m_simulators.empty()) { @@ -70,5 +71,43 @@ Simulator_base* Simulators::invoke_active_simulator() const return nullptr; } + m_before = this->m_simulators.at(m_current_simulator)->get_UI_items(); + return this->m_simulators.at(m_current_simulator).get(); +} + +json Simulators::changed_UI_items() +{ + if (this->m_simulators.empty()) + { + return json(); + } + if (this->m_current_simulator.empty()) + { + return json(); + } + + json after = this->m_simulators.at(m_current_simulator)->get_UI_items(); + json changed; + changed["event"] = "UI_changed"; + if (m_before["UI_items"].empty()) + { + changed = after; + return changed; + } + + for (const json& item : after["UI_items"]) + { + for (const json& before_item : m_before["UI_items"]) + { + if (before_item["id"] == item["id"]) + { + if (before_item != item) + { + changed["UI_items"].push_back(item); + } + } + } + } + return changed; } \ No newline at end of file diff --git a/tools/simulators.hpp b/tools/simulators.hpp index 74a41e0..7aee82f 100644 --- a/tools/simulators.hpp +++ b/tools/simulators.hpp @@ -13,8 +13,10 @@ class Simulators { void stop(); void switch_simulator(std::string name); std::vector list_simulators() const; - Simulator_base* invoke_active_simulator() const; + Simulator_base* invoke_active_simulator(); + json changed_UI_items(); private: std::map> m_simulators; std::string m_current_simulator; + json m_before; }; \ No newline at end of file