#include "ScenarioWidget.hpp" #include #include namespace Hardware { ScenarioWidget::ScenarioWidget(Scenario::ProcessModel* scenario, bugui::container_widget* parent) : bugui::container_widget{parent} , model{scenario} , skin{Process::Style::instance()} { model->intervals.mutable_added.connect<&ScenarioWidget::on_interval_added>(this); model->intervals.removing.connect<&ScenarioWidget::on_interval_removed>(this); for(Scenario::IntervalModel& i : model->intervals) add_widget(i, this); model->timeSyncs.mutable_added.connect<&ScenarioWidget::on_time_sync_added>(this); model->timeSyncs.removing.connect<&ScenarioWidget::on_time_sync_removed>(this); for(Scenario::TimeSyncModel& t : model->timeSyncs) add_widget(t, this); } void ScenarioWidget::add_proxy(StateWidget* sw) { states_proxy.push_back(sw); } void ScenarioWidget::remove_proxy(StateWidget* sw) { std::erase_if(states_proxy, [sw] (StateWidget* w) { return w == sw; }); } void ScenarioWidget::on_interval_added(Scenario::IntervalModel& interval) { add_widget(interval, this); update(); } void ScenarioWidget::on_interval_removed(const Scenario::IntervalModel& interval) { remove_widget([&interval] (const auto& w) { return static_cast*>(w.get())->this_model(interval); }); } void ScenarioWidget::on_time_sync_added(Scenario::TimeSyncModel& timeSync) { add_widget(timeSync, this); update(); } void ScenarioWidget::on_time_sync_removed(const Scenario::TimeSyncModel& timeSync) { remove_widget([&timeSync] (const auto& w) { return static_cast*>(w.get())->this_model(timeSync); }); update(); } void ScenarioWidget::recursive_change(const Scenario::StateModel& state) { auto& ni{state.nextInterval()}; if (ni) { auto& v{ni.value()}; for (const auto& c : children) { ScenarioComponent<>* s{static_cast*>(c.get())}; if (s->this_model(v)) { static_cast(s)->change_next(state); break; } } } update(); } void ScenarioWidget::recursive_change(const Scenario::IntervalModel& interval) { } } // namespace Hardware