#include "ScenarioWidget.hpp" #include namespace Hardware { ScenarioWidget::ScenarioWidget(base_widget* parent, Scenario::ProcessModel* scenario) : bugui::base_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& s : model->intervals) widgets.emplace_back(std::make_unique(this, s)); } void ScenarioWidget::paint(bugui::painter &painter) const { for (const auto& w : widgets) w->paint(painter); } int ScenarioWidget::x() const { return bugui::base_widget::parent->x(); } int ScenarioWidget::y() const { return bugui::base_widget::parent->x(); } int ScenarioWidget::width() const { return bugui::base_widget::parent->width(); } int ScenarioWidget::height() const { return bugui::base_widget::parent->height(); } void ScenarioWidget::on_interval_added(Scenario::IntervalModel& interval) { widgets.emplace_back(std::make_unique(this, interval)); update(); } void ScenarioWidget::on_interval_removed(const Scenario::IntervalModel& interval) { std::erase_if(widgets, [&interval] (auto& w) { return static_cast(w.get())->get_model().id() == interval.id(); }); update(); } void ScenarioWidget::on_interval_changed(const Scenario::IntervalModel &) { update(); } } // namespace Hardware #include "wobjectimpl.h" W_OBJECT_IMPL(Hardware::ScenarioWidget)