72 lines
1.7 KiB
C++
72 lines
1.7 KiB
C++
|
#include "ScenarioWidget.hpp"
|
||
|
#include <Hardware/Widgets/IntervalWidget.hpp>
|
||
|
|
||
|
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<IntervalWidget>(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<IntervalWidget>(this, interval));
|
||
|
update();
|
||
|
}
|
||
|
|
||
|
void ScenarioWidget::on_interval_removed(const Scenario::IntervalModel& interval)
|
||
|
{
|
||
|
std::erase_if(widgets,
|
||
|
[&interval]
|
||
|
(auto& w)
|
||
|
{ return static_cast<IntervalWidget*>(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)
|