2 #include <Scenario/Palette/Tools/ScenarioToolState.hpp>
3 #include <Scenario/Palette/Tools/StateSelection.hpp>
4 #include <Scenario/Palette/Tools/States/ResizeSlotState.hpp>
5 #include <Scenario/Palette/Tools/States/ScenarioSelectionState.hpp>
6 #include <Scenario/Palette/Transitions/IntervalTransitions.hpp>
7 #include <Scenario/Palette/Transitions/SlotTransitions.hpp>
8 #include <Scenario/Palette/Transitions/StateTransitions.hpp>
9 #include <Scenario/Process/Algorithms/StandardDisplacementPolicy.hpp>
11 #include <score/selection/SelectionDispatcher.hpp>
19 typename Scenario_T,
typename ToolPalette_T,
typename View_T,
20 typename MoveIntervalWrapper_T,
typename MoveLeftBraceWrapper_T,
21 typename MoveRightBraceWrapper_T,
typename MoveEventWrapper_T,
22 typename MoveTimeSyncWrapper_T>
29 auto sub =
new QState{&this->localSM()};
30 sub->setChildMode(QState::ParallelStates);
33 m_state =
new SelectionState<ToolPalette_T, View_T>{
34 this->m_palette.context().context.selectionStack, this->m_palette,
35 this->m_palette.presenter().view(), sub};
37 this->localSM().setInitialState(sub);
40 auto actionsState =
new QState(sub);
42 auto waitState =
new QState(actionsState);
43 actionsState->setInitialState(waitState);
45 auto mov_i = MoveIntervalWrapper_T::template make<Scenario_T, ToolPalette_T>(
46 this->m_palette, waitState, *actionsState);
47 auto mov_lb = MoveLeftBraceWrapper_T::template make<Scenario_T, ToolPalette_T>(
48 this->m_palette, waitState, *actionsState);
49 auto mov_rb = MoveRightBraceWrapper_T::template make<Scenario_T, ToolPalette_T>(
50 this->m_palette, waitState, *actionsState);
51 auto mov_e = MoveEventWrapper_T::template make<Scenario_T, ToolPalette_T>(
52 this->m_palette, waitState, *actionsState);
53 auto mov_ts = MoveTimeSyncWrapper_T::template make<Scenario_T, ToolPalette_T>(
54 this->m_palette, waitState, *actionsState);
56 if constexpr(!std::is_same_v<decltype(mov_i), std::nullptr_t>)
58 score::make_transition<ClickOnState_Transition<Scenario_T>>(
59 mov_i, mov_e, *mov_e);
60 score::make_transition<ClickOnState_Transition<Scenario_T>>(
61 mov_ts, mov_e, *mov_e);
62 score::make_transition<ClickOnState_Transition<Scenario_T>>(
63 mov_lb, mov_e, *mov_e);
64 score::make_transition<ClickOnState_Transition<Scenario_T>>(
65 mov_rb, mov_e, *mov_e);
67 score::make_transition<ClickOnInterval_Transition<Scenario_T>>(
68 mov_ts, mov_i, *mov_i);
69 score::make_transition<ClickOnInterval_Transition<Scenario_T>>(
70 mov_e, mov_i, *mov_i);
71 score::make_transition<ClickOnInterval_Transition<Scenario_T>>(
72 mov_lb, mov_i, *mov_i);
73 score::make_transition<ClickOnInterval_Transition<Scenario_T>>(
74 mov_rb, mov_i, *mov_i);
77 auto resizeSlot =
new ResizeSlotState<Scenario_T, ToolPalette_T>{
78 this->m_palette.context().context.commandStack, this->m_palette, actionsState};
80 score::make_transition<ClickOnSlotHandle_Transition>(
81 waitState, resizeSlot, *resizeSlot);
83 resizeSlot->addTransition(resizeSlot, finishedState(), waitState);
86 this->localSM().start();
94 this->itemUnderMouse(scene),
97 const auto& elt = this->m_palette.presenter().state(
id);
100 doStateSelection(sel, elt.model(), this->m_palette.model());
102 m_state->dispatcher.select(filterSelections(
103 sel, this->m_palette.model().selectedChildren(), m_state->multiSelection()));
105 this->localSM().postEvent(
new ClickOnState_Event{id, sp});
106 m_nothingPressed =
false;
110 const auto& elt = this->m_palette.presenter().event(
id);
112 m_state->dispatcher.select(filterSelections(
113 &elt.model(), this->m_palette.model().selectedChildren(),
114 m_state->multiSelection()));
116 this->localSM().postEvent(
new ClickOnEvent_Event{id, sp});
117 m_nothingPressed =
false;
121 const auto& elt = this->m_palette.presenter().timeSync(
id);
123 m_state->dispatcher.select(filterSelections(
124 &elt.model(), this->m_palette.model().selectedChildren(),
125 m_state->multiSelection()));
126 this->localSM().postEvent(
new ClickOnTimeSync_Event{id, sp});
127 m_nothingPressed =
false;
131 const auto& model = this->m_palette.model().interval(
id);
133 if(!model.selection.get())
135 m_state->dispatcher.select(filterSelections(
136 &model, this->m_palette.model().selectedChildren(),
137 m_state->multiSelection()));
139 this->localSM().postEvent(
new ClickOnInterval_Event{id, sp});
140 m_nothingPressed =
false;
144 const auto& elt = this->m_palette.presenter().interval(
id);
146 if(!elt.isSelected())
148 m_state->dispatcher.select(filterSelections(
149 &elt.model(), this->m_palette.model().selectedChildren(),
150 m_state->multiSelection()));
153 this->localSM().postEvent((
new ClickOnLeftBrace_Event{id, sp}));
154 m_nothingPressed =
false;
158 const auto& elt = this->m_palette.presenter().interval(
id);
160 if(!elt.isSelected())
162 m_state->dispatcher.select(filterSelections(
163 &elt.model(), this->m_palette.model().selectedChildren(),
164 m_state->multiSelection()));
167 this->localSM().postEvent((
new ClickOnRightBrace_Event{id, sp}));
168 m_nothingPressed =
false;
170 [&](
const SlotPath& slot)
172 this->localSM().postEvent(
new ClickOnSlotHandle_Event{slot});
173 m_nothingPressed =
false;
177 m_nothingPressed =
true;
193 this->itemUnderMouse(scene),
195 this->localSM().postEvent(
new MoveOnState_Event{id, sp});
198 this->localSM().postEvent(
new MoveOnEvent_Event{id, sp});
201 this->localSM().postEvent(
new MoveOnTimeSync_Event{id, sp});
204 this->localSM().postEvent(
new MoveOnInterval_Event{id, sp});
207 this->localSM().postEvent(
new MoveOnLeftBrace_Event{id, sp});
210 this->localSM().postEvent(
new MoveOnRightBrace_Event{id, sp});
212 [&](
const SlotPath& slot) {
213 this->localSM().postEvent(
new MoveOnSlotHandle_Event{slot});
215 [&]() { this->localSM().postEvent(
new MoveOnNothing_Event{sp}); });
224 m_nothingPressed =
false;
230 this->localSM().postEvent(
new ReleaseOnNothing_Event{sp});
231 m_nothingPressed =
false;
237 this->itemUnderMouse(scene),
240 this->localSM().postEvent(
new ReleaseOnState_Event{id, sp});
244 this->localSM().postEvent(
new ReleaseOnEvent_Event{id, sp});
248 this->localSM().postEvent(
new ReleaseOnTimeSync_Event{id, sp});
252 this->localSM().postEvent(
new ReleaseOnInterval_Event{id, sp});
256 this->localSM().postEvent(
new ReleaseOnLeftBrace_Event{id, sp});
260 this->localSM().postEvent(
new ReleaseOnRightBrace_Event{id, sp});
262 [&](
const SlotPath& slot)
263 { this->localSM().postEvent(
new ReleaseOnSlotHandle_Event{slot}); },
265 this->localSM().postEvent(
new ReleaseOnNothing_Event{sp});
271 auto& selectionState()
const {
return *m_state; }
274 SelectionState<ToolPalette_T, View_T>* m_state{};
276 bool m_nothingPressed{
true};
Definition: Selection.hpp:12
The id_base_t class.
Definition: Identifier.hpp:57
Main plug-in of score.
Definition: score-plugin-dataflow/Dataflow/PortItem.hpp:14
Definition: ScenarioPoint.hpp:13
Definition: StateMachineUtils.hpp:18