score-addon-hardware/Hardware/Widgets/ScenarioComponent.hpp

44 lines
1.3 KiB
C++
Raw Normal View History

#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