OSSIAConstraintElement::OSSIAConstraintElement( std::shared_ptr<OSSIA::TimeConstraint> ossia_cst, ConstraintModel& iscore_cst, QObject* parent): QObject{parent}, m_iscore_constraint{iscore_cst}, m_ossia_constraint{ossia_cst} { con(iscore_cst.processes, &NotifyingMap<Process>::added, this, &OSSIAConstraintElement::on_processAdded); con(iscore_cst.processes, &NotifyingMap<Process>::removed, this, &OSSIAConstraintElement::on_processRemoved); con(iscore_cst, &ConstraintModel::loopingChanged, this, &OSSIAConstraintElement::on_loopingChanged); // Setup updates con(iscore_cst.duration, &ConstraintDurations::defaultDurationChanged, this, [=] (const TimeValue& t) { ossia_cst->setDurationNominal(iscore::convert::time(t)); }); con(iscore_cst.duration, &ConstraintDurations::minDurationChanged, this, [=] (const TimeValue& t) { try { ossia_cst->setDurationMin(iscore::convert::time(t)); } catch(std::runtime_error& e) { qWarning() << e.what(); } }); con(iscore_cst.duration, &ConstraintDurations::maxDurationChanged, this, [=] (const TimeValue& t) { try { ossia_cst->setDurationMax(iscore::convert::time(t)); } catch(std::runtime_error& e) { qWarning() << e.what(); } }); if(iscore_cst.objectName() != QString("BaseConstraintModel")) { ossia_cst->setCallback([&] ( const OSSIA::TimeValue& position, const OSSIA::TimeValue& date, const std::shared_ptr<OSSIA::StateElement>& state) { constraintCallback(position, date, state); }); } for(const auto& process : iscore_cst.processes) { on_processAdded(process); } }
void ProcessModel::init() { if(auto ptr_cst = dynamic_cast<Scenario::ConstraintModel*>(parent())) { auto& cst = *ptr_cst; for(auto& proc : cst.processes) { on_processAdded(proc); } cst.processes.added.connect<ProcessModel, &ProcessModel::on_processAdded>(this); cst.processes.removing.connect<ProcessModel, &ProcessModel::on_processRemoved>(this); } }
ConstraintElement::ConstraintElement( std::shared_ptr<OSSIA::TimeConstraint> ossia_cst, Scenario::ConstraintModel& iscore_cst, const Context&ctx, QObject* parent): QObject{parent}, m_iscore_constraint{iscore_cst}, m_ossia_constraint{ossia_cst}, m_ctx{ctx} { OSSIA::TimeValue min_duration(iscore::convert::time(m_iscore_constraint.duration.minDuration())); OSSIA::TimeValue max_duration(iscore::convert::time(m_iscore_constraint.duration.maxDuration())); m_ossia_constraint->setDurationMin(min_duration); m_ossia_constraint->setDurationMax(max_duration); m_ossia_constraint->setSpeed(iscore_cst.duration.executionSpeed()); con(iscore_cst.duration, &Scenario::ConstraintDurations::executionSpeedChanged, this, [&] (double sp) { m_ossia_constraint->setSpeed(sp); }); // BaseScenario needs a special callback. if(dynamic_cast<Scenario::ScenarioModel*>(iscore_cst.parent()) || dynamic_cast<Loop::ProcessModel*>(iscore_cst.parent())) { ossia_cst->setCallback([&] ( const OSSIA::TimeValue& position, const OSSIA::TimeValue& date, const std::shared_ptr<OSSIA::StateElement>& state) { constraintCallback(position, date, state); }); } for(const auto& process : iscore_cst.processes) { on_processAdded(process); } m_state_on_play = OSSIA::State::create(); }