Esempio n. 1
0
        void undo() const override
        {
            auto& scenar = m_scenarioPath.find();
            auto& globalTn = scenar.timeNode(m_destinationTnId);

            Deserializer<DataStream> s{m_serializedTimeNode};
            auto recreatedTn = new TimeNodeModel{s, &scenar};

            auto events_in_timenode = recreatedTn->events();
            // we remove and re-add events in recreated Tn
            // to ensure correct parentship between elements.
            for(auto evId : events_in_timenode)
            {
                recreatedTn->removeEvent(evId);
                globalTn.removeEvent(evId);
            }
            for(auto evId : events_in_timenode)
            {
                recreatedTn->addEvent(evId);
            }

            scenar.timeNodes.add(recreatedTn);

            globalTn.trigger()->setExpression(m_targetTrigger);
            globalTn.trigger()->setActive(m_targetTriggerActive);

            m_moveCommand->undo();
            updateTimeNodeExtent(m_destinationTnId, scenar);

        }
Esempio n. 2
0
void updateEventExtent(const Id<EventModel> &id, Scenario::ScenarioModel& s)
{
    auto& ev = s.event(id);
    double min = std::numeric_limits<double>::max();
    double max = std::numeric_limits<double>::lowest();
    for(const auto& state_id : ev.states())
    {
        const auto& st = s.states.at(state_id);

        if(st.heightPercentage() < min)
            min = st.heightPercentage();
        if(st.heightPercentage() > max)
            max = st.heightPercentage();
    }

    ev.setExtent({min, max});
    updateTimeNodeExtent(ev.timeNode(), s);
}
Esempio n. 3
0
        void redo() const override
        {
            m_moveCommand->redo();

            auto& scenar = m_scenarioPath.find();
            auto& movingTn = scenar.timeNode(m_movingTnId);
            auto& destinationTn = scenar.timeNode(m_destinationTnId);

            auto movingEvents = movingTn.events();
            for(auto& evId : movingEvents)
            {
                movingTn.removeEvent(evId);
                destinationTn.addEvent(evId);
            }
            destinationTn.trigger()->setActive(destinationTn.trigger()->active() || movingTn.trigger()->active());
            destinationTn.trigger()->setExpression(movingTn.trigger()->expression());

            scenar.timeNodes.remove(m_movingTnId);
            updateTimeNodeExtent(m_destinationTnId, scenar);            
        }