score-addon-hardware/Hardware/Widgets/ScenarioWidget.cpp

89 lines
2.1 KiB
C++
Raw Normal View History

2024-12-28 17:53:59 +00:00
#include "ScenarioWidget.hpp"
2024-12-28 17:53:59 +00:00
#include <Hardware/Widgets/IntervalWidget.hpp>
#include <Hardware/Widgets/TimeSyncWidget.hpp>
2024-12-28 17:53:59 +00:00
namespace Hardware
{
ScenarioWidget::ScenarioWidget(Scenario::ProcessModel* scenario,
bugui::container_widget* parent)
2024-12-31 16:11:11 +00:00
: bugui::container_widget{parent}
2024-12-28 17:53:59 +00:00
, 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<IntervalWidget>(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<TimeSyncWidget>(t);
2024-12-30 12:32:54 +00:00
}
2024-12-28 17:53:59 +00:00
int ScenarioWidget::x() const
{
return bugui::base_widget::parent->x();
}
int ScenarioWidget::y() const
{
return bugui::base_widget::parent->y();
2024-12-28 17:53:59 +00:00
}
int ScenarioWidget::width() const
{
return std::numeric_limits<int>::max();
2024-12-28 17:53:59 +00:00
}
int ScenarioWidget::height() const
{
return bugui::base_widget::parent->height();
}
void ScenarioWidget::on_interval_added(Scenario::IntervalModel& interval)
{
add_widget<IntervalWidget>(interval);
2024-12-28 17:53:59 +00:00
update();
}
void ScenarioWidget::on_interval_removed(const Scenario::IntervalModel& interval)
{
remove_widget([&interval]
2024-12-31 16:11:11 +00:00
(const auto& w)
{ return static_cast<ScenarioComponent*>(w.get())->this_model(interval); });
2024-12-28 17:53:59 +00:00
update();
}
void ScenarioWidget::on_interval_changed(const Scenario::IntervalModel&)
{
update();
}
void ScenarioWidget::on_time_sync_added(Scenario::TimeSyncModel& timeSync)
2024-12-28 17:53:59 +00:00
{
add_widget<TimeSyncWidget>(timeSync);
update();
}
void ScenarioWidget::on_time_sync_removed(const Scenario::TimeSyncModel& timeSync)
{
remove_widget([&timeSync]
(const auto& w)
{ return static_cast<ScenarioComponent*>(w.get())->this_model(timeSync); });
2024-12-28 17:53:59 +00:00
update();
}
} // namespace Hardware
#include "wobjectimpl.h"
W_OBJECT_IMPL(Hardware::ScenarioWidget)