#include "ScenarioWidget.hpp" #include #include namespace Hardware { ScenarioWidget::ScenarioWidget(Scenario::ProcessModel* scenario, bugui::container_widget* parent) : bugui::container_widget{parent} , model{scenario} { model->intervals.mutable_added.connect<&ScenarioWidget::on_interval_added>(this); model->intervals.removed.connect<&ScenarioWidget::on_interval_removed>(this); connect(model, &Scenario::ProcessModel::intervalMoved, [this] { update(); }); for(Scenario::IntervalModel& i : model->intervals) add_widget(i); model->timeSyncs.mutable_added.connect<&ScenarioWidget::on_time_sync_added>(this); model->timeSyncs.removed.connect<&ScenarioWidget::on_time_sync_removed>(this); for(Scenario::TimeSyncModel& t : model->timeSyncs) add_widget(t); } int ScenarioWidget::x() const { return bugui::base_widget::parent->x(); } int ScenarioWidget::y() const { return bugui::base_widget::parent->y(); } int ScenarioWidget::width() const { return std::numeric_limits::max(); } int ScenarioWidget::height() const { return bugui::base_widget::parent->height(); } void ScenarioWidget::on_interval_added(Scenario::IntervalModel& interval) { add_widget(interval); update(); } void ScenarioWidget::on_interval_removed(const Scenario::IntervalModel& interval) { remove_widget([&interval] (const auto& w) { return static_cast*>(w.get())->this_model(interval); }); update(); } void ScenarioWidget::on_interval_changed(const Scenario::IntervalModel&) { update(); } void ScenarioWidget::on_time_sync_added(Scenario::TimeSyncModel& timeSync) { add_widget(timeSync); 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(); } } // namespace Hardware #include "wobjectimpl.h" W_OBJECT_IMPL(Hardware::ScenarioWidget)