43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include "widgets/base_widget.hpp"
|
|
#include <Process/Style/ScenarioStyle.hpp>
|
|
#include <Scenario/Document/Interval/IntervalModel.hpp>
|
|
|
|
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 <typename T>
|
|
requires (std::same_as<T, Scenario::IntervalModel> ||
|
|
std::same_as<T, Scenario::TimeSyncModel> ||
|
|
std::same_as<T, Scenario::EventModel> ||
|
|
std::same_as<T, Scenario::StateModel>)
|
|
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
|