#pragma once #include "widgets/base_widget.hpp" #include #include namespace Hardware { struct ScenarioComponent : bugui::base_widget { virtual bool this_model(const Scenario::IntervalModel&) const { return false; }; virtual bool this_model(const Scenario::TimeSyncModel&) const { return false; }; virtual bool this_model(const Scenario::EventModel&) const { return false; }; virtual bool this_model(const Scenario::StateModel&) const { return false; }; protected: explicit ScenarioComponent(bugui::container_widget* parent) : bugui::base_widget{parent} { } }; template requires (std::same_as || std::same_as || std::same_as || std::same_as) struct ScenarioComponentSpec : ScenarioComponent { bool this_model(const T& m) const override { return m.id() == model.id(); }; protected: explicit ScenarioComponentSpec(T& m, bugui::container_widget* parent) : ScenarioComponent{parent} , model{m} , skin{Process::Style::instance()} { } T& model; const Process::Style& skin; }; } // hardware