2024-12-28 17:53:59 +00:00
|
|
|
#include "ScenarioWidget.hpp"
|
2025-01-10 01:38:58 +00:00
|
|
|
|
2024-12-28 17:53:59 +00:00
|
|
|
#include <Hardware/Widgets/IntervalWidget.hpp>
|
2025-01-10 01:38:58 +00:00
|
|
|
#include <Hardware/Widgets/TimeSyncWidget.hpp>
|
2024-12-28 17:53:59 +00:00
|
|
|
|
|
|
|
namespace Hardware
|
|
|
|
{
|
2025-01-03 23:27:19 +00:00
|
|
|
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}
|
2025-01-16 02:00:26 +00:00
|
|
|
, skin{Process::Style::instance()}
|
2024-12-28 17:53:59 +00:00
|
|
|
{
|
|
|
|
model->intervals.mutable_added.connect<&ScenarioWidget::on_interval_added>(this);
|
2025-01-21 00:10:21 +00:00
|
|
|
model->intervals.removing.connect<&ScenarioWidget::on_interval_removed>(this);
|
2024-12-28 17:53:59 +00:00
|
|
|
|
2025-01-10 01:38:58 +00:00
|
|
|
for(Scenario::IntervalModel& i : model->intervals)
|
2025-01-11 11:56:26 +00:00
|
|
|
add_widget<IntervalWidget>(i, this);
|
2025-01-10 01:38:58 +00:00
|
|
|
|
|
|
|
model->timeSyncs.mutable_added.connect<&ScenarioWidget::on_time_sync_added>(this);
|
2025-01-21 00:10:21 +00:00
|
|
|
model->timeSyncs.removing.connect<&ScenarioWidget::on_time_sync_removed>(this);
|
2025-01-10 01:38:58 +00:00
|
|
|
|
|
|
|
for(Scenario::TimeSyncModel& t : model->timeSyncs)
|
2025-01-11 11:56:26 +00:00
|
|
|
add_widget<TimeSyncWidget>(t, this);
|
2024-12-30 12:32:54 +00:00
|
|
|
}
|
|
|
|
|
2025-01-21 00:10:21 +00:00
|
|
|
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; });
|
|
|
|
}
|
|
|
|
|
2024-12-28 17:53:59 +00:00
|
|
|
void ScenarioWidget::on_interval_added(Scenario::IntervalModel& interval)
|
|
|
|
{
|
2025-01-11 11:56:26 +00:00
|
|
|
add_widget<IntervalWidget>(interval, this);
|
2025-01-19 00:14:26 +00:00
|
|
|
|
2024-12-28 17:53:59 +00:00
|
|
|
update();
|
|
|
|
}
|
|
|
|
|
|
|
|
void ScenarioWidget::on_interval_removed(const Scenario::IntervalModel& interval)
|
|
|
|
{
|
2025-01-03 23:27:19 +00:00
|
|
|
remove_widget([&interval]
|
2024-12-31 16:11:11 +00:00
|
|
|
(const auto& w)
|
2025-01-10 10:12:29 +00:00
|
|
|
{ return static_cast<ScenarioComponent<>*>(w.get())->this_model(interval); });
|
2024-12-28 17:53:59 +00:00
|
|
|
}
|
|
|
|
|
2025-01-10 01:38:58 +00:00
|
|
|
void ScenarioWidget::on_time_sync_added(Scenario::TimeSyncModel& timeSync)
|
2024-12-28 17:53:59 +00:00
|
|
|
{
|
2025-01-11 11:56:26 +00:00
|
|
|
add_widget<TimeSyncWidget>(timeSync, this);
|
2025-01-19 00:14:26 +00:00
|
|
|
|
|
|
|
update();
|
2025-01-10 01:38:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ScenarioWidget::on_time_sync_removed(const Scenario::TimeSyncModel& timeSync)
|
|
|
|
{
|
|
|
|
remove_widget([&timeSync]
|
|
|
|
(const auto& w)
|
2025-01-10 10:12:29 +00:00
|
|
|
{ return static_cast<ScenarioComponent<>*>(w.get())->this_model(timeSync); });
|
2025-01-19 00:14:26 +00:00
|
|
|
|
|
|
|
update();
|
2024-12-28 17:53:59 +00:00
|
|
|
}
|
|
|
|
|
2025-01-21 00:10:21 +00:00
|
|
|
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<ScenarioComponent<>*>(c.get())};
|
|
|
|
|
|
|
|
if (s->this_model(v))
|
|
|
|
{
|
|
|
|
static_cast<IntervalWidget*>(s)->change_next(state);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
update();
|
|
|
|
}
|
|
|
|
|
|
|
|
void ScenarioWidget::recursive_change(const Scenario::IntervalModel& interval)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2024-12-28 17:53:59 +00:00
|
|
|
} // namespace Hardware
|