38 const ToolPalette_T& stateMachine,
const Scenario_T& scenarioPath,
44 this->setObjectName(
"MoveIntervalBraceState");
45 using namespace Scenario::Command;
46 auto finalState =
new QFinalState{
this};
48 auto mainState =
new QState{
this};
50 auto pressed =
new QState{mainState};
51 auto released =
new QState{mainState};
52 auto moving =
new QState{mainState};
54 mainState->setInitialState(pressed);
55 released->addTransition(finalState);
57 score::make_transition<MoveOnAnything_Transition<Scenario_T>>(
58 pressed, moving, *
this);
59 score::make_transition<ReleaseOnAnything_Transition>(pressed, finalState);
61 score::make_transition<MoveOnAnything_Transition<Scenario_T>>(
62 moving, moving, *
this);
63 score::make_transition<ReleaseOnAnything_Transition>(moving, released);
65 QObject::connect(pressed, &QState::entered, [&]() {
66 this->m_initialDate = this->currentPoint.date;
67 if(this->clickedInterval)
69 auto& scenar = stateMachine.model();
70 auto& cstr = scenar.interval(*this->clickedInterval);
71 this->m_initialDuration
73 .*MoveBraceCommand_T::corresponding_member)();
80 QObject::connect(moving, &QState::entered, [&]() {
81 if(this->clickedInterval)
83 auto& scenar = stateMachine.model();
84 auto& cstr = scenar.interval(*this->clickedInterval);
86 = this->currentPoint.date - *m_initialDate + *m_initialDuration;
89 const TimeVal date = stateMachine.magnetic().getPosition(
90 &stateMachine.model(), cstr.date() + duration);
92 this->m_dispatcher.submit(cstr, date - cstr.date(),
false);
97 released, &QState::entered, [&]() { this->m_dispatcher.commit(); });
100 auto rollbackState =
new QState{
this};
101 score::make_transition<score::Cancel_Transition>(mainState, rollbackState);
102 rollbackState->addTransition(finalState);
104 rollbackState, &QState::entered, [&]() { m_dispatcher.rollback(); });
106 this->setInitialState(mainState);
111 std::optional<TimeVal> m_initialDate;
112 std::optional<TimeVal> m_initialDuration;
122 const ToolPalette_T& stateMachine,
const Scenario_T& scenarioPath,
126 , m_dispatcher{stack}
128 this->setObjectName(
"MoveTimeSyncState");
129 using namespace Scenario::Command;
130 auto finalState =
new QFinalState{
this};
132 auto mainState =
new QState{
this};
134 auto pressed =
new QState{mainState};
135 auto released =
new QState{mainState};
136 auto moving =
new QState{mainState};
139 mainState->setInitialState(pressed);
140 released->addTransition(finalState);
142 score::make_transition<MoveOnAnything_Transition<Scenario_T>>(
143 pressed, moving, *
this);
144 score::make_transition<ReleaseOnAnything_Transition>(pressed, finalState);
145 score::make_transition<MoveOnAnything_Transition<Scenario_T>>(
146 moving, moving, *
this);
147 score::make_transition<ReleaseOnAnything_Transition>(moving, released);
150 QObject::connect(pressed, &QState::entered, [&]() {
151 if(!this->clickedTimeSync)
154 auto& scenar = stateMachine.model();
157 = previousNonGraphIntervals(scenar.timeSync(*this->clickedTimeSync), scenar);
158 if(!prev_csts.empty())
162 for(
const auto& cst_id : prev_csts)
164 const auto& other_date = scenar.interval(cst_id).date();
168 this->m_pressedPrevious = t;
172 this->m_pressedPrevious = std::nullopt;
176 QObject::connect(moving, &QState::entered, [&]() {
177 if(!this->clickedTimeSync)
181 auto& scenar = stateMachine.model();
182 auto& tn = scenar.timeSync(*this->clickedTimeSync);
183 SCORE_ASSERT(!tn.events().empty());
184 const auto& ev_id = tn.events().front();
185 auto date = this->currentPoint.date;
187 date = stateMachine.magnetic().getPosition(&stateMachine.model(), date);
189 if(this->m_pressedPrevious)
191 date = max(date, *this->m_pressedPrevious);
195 this->m_scenario, ev_id, date, this->currentPoint.y,
196 stateMachine.editionSettings().expandMode(),
197 stateMachine.editionSettings().lockMode());
200 QObject::connect(released, &QState::entered, [&]() {
201 m_dispatcher.commit();
202 m_pressedPrevious = {};
206 auto rollbackState =
new QState{
this};
207 score::make_transition<score::Cancel_Transition>(mainState, rollbackState);
208 rollbackState->addTransition(finalState);
210 rollbackState, &QState::entered, [&]() { m_dispatcher.rollback(); });
212 this->setInitialState(mainState);
216 std::optional<TimeVal> m_pressedPrevious;