#pragma once #include "widgets/base_widget.hpp" #include #include namespace Hardware { template requires (std::same_as || std::derived_from) struct ScenarioComponent : T { 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) : T{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