18class RouteTrackCommand :
public QUndoCommand
21 static constexpr auto CommandId = 6451638;
26 std::optional<structure::tracks::Track::Uuid> target_id)
27 : QUndoCommand (QObject::tr (
"Route Track")), router_ (router),
28 source_id_ (source_id), target_id_ (target_id)
32 int id ()
const override {
return CommandId; }
38 const auto prev_target = target_id_;
41 const auto cur_target = router_.get_output_track (source_id_);
42 if (cur_target.has_value ())
44 target_id_ = cur_target->id ();
48 target_id_ = std::nullopt;
52 if (prev_target.has_value ())
54 router_.add_or_replace_route (source_id_, prev_target.value ());
58 router_.remove_route_for_source (source_id_);
64 const auto new_target = target_id_;
67 const auto prev_target = router_.get_output_track (source_id_);
68 if (prev_target.has_value ())
70 target_id_ = prev_target->id ();
74 target_id_ = std::nullopt;
78 if (new_target.has_value ())
80 router_.add_or_replace_route (source_id_, new_target.value ());
84 router_.remove_route_for_source (source_id_);
91 std::optional<structure::tracks::Track::Uuid> target_id_;