6#include "dsp/port_connections_manager.h"
7#include "gui/backend/backend/actions/undoable_action.h"
8#include "gui/backend/backend/settings/plugin_configuration_manager.h"
9#include "gui/backend/io/file_descriptor.h"
10#include "structure/tracks/channel_send.h"
11#include "structure/tracks/track.h"
12#include "structure/tracks/track_span.h"
13#include "utils/color.h"
15namespace zrythm::gui::actions
21class TracklistSelectionsAction :
public QObject,
public UndoableAction
25 DEFINE_UNDOABLE_ACTION_QML_PROPERTIES (TracklistSelectionsAction)
29 using TrackPtrVariant = structure::tracks::TrackPtrVariant;
76 using PortType = zrythm::dsp::PortType;
96 std::optional<TrackSpan> tls_before_var,
97 std::optional<TrackSpan> tls_after_var,
98 const PortConnectionsManager * port_connections_mgr,
99 std::optional<TrackPtrVariant> track_var,
101 const PluginConfiguration * pl_setting,
105 const Position * pos,
109 const Color * color_new,
113 bool already_edited);
121 const PluginConfiguration * pl_setting,
124 const Position * pos,
126 int disable_track_pos)
127 : TracklistSelectionsAction (
157 edit_type_ == EditType::Mute || edit_type_ == EditType::Solo
158 || edit_type_ == EditType::Listen || edit_type_ == EditType::Volume
159 || edit_type_ == EditType::Pan)
173 edit_type_ == EditType::Mute || edit_type_ == EditType::Solo
174 || edit_type_ == EditType::Listen || edit_type_ == EditType::Volume
175 || edit_type_ == EditType::Pan)
183 void get_plugins (std::vector<zrythm::plugins::Plugin *> &plugins)
override
202 friend void init_from (
203 TracklistSelectionsAction &obj,
204 const TracklistSelectionsAction &other,
208 void init_loaded_impl () final;
209 void perform_impl () final;
210 void undo_impl () final;
216 void copy_track_positions_from_selections (
217 std::vector<
int> &track_positions,
218 TrackSpan selections_var);
225 void reset_foldable_track_sizes ();
233 bool validate () const;
240 void create_track (
int idx);
244 void do_or_undo_create_or_delete (
bool do_it,
bool create);
249 void do_or_undo_move_or_copy (
bool do_it,
bool copy,
bool inside);
251 void do_or_undo_edit (
bool do_it);
253 void do_or_undo (
bool do_it);
271 bool have_pos_ =
false;
310 std::optional<dsp::FileAudioSourceUuidReference>
pool_id_;
332 std::vector<int> track_positions_after_;
365 std::vector<Color> colors_before_;
375 float val_after_ = 0.f;
388 const PluginConfiguration * pl_setting,
391 const Position * pos,
393 int disable_track_pos)
394 : TracklistSelectionsAction (
425 CreatePluginTrackAction (
427 const PluginConfiguration * pl_setting,
446class CreatePlainTrackAction :
public CreatePluginTrackAction
449 CreatePlainTrackAction (
453 : CreatePluginTrackAction (track_type,
nullptr, track_pos, num_tracks)
461class EditTracksAction :
public TracklistSelectionsAction
466 std::optional<TrackSpan> tls_before,
467 std::optional<TrackSpan> tls_after,
469 : TracklistSelectionsAction (
496class SingleTrackFloatAction :
public TracklistSelectionsAction
499 SingleTrackFloatAction (
501 std::optional<TrackPtrVariant> track,
505 : TracklistSelectionsAction (
532class SingleTrackIntAction :
public TracklistSelectionsAction
535 SingleTrackIntAction (
537 std::optional<TrackPtrVariant> track,
540 : TracklistSelectionsAction (
567class MultiTrackIntAction :
public TracklistSelectionsAction
570 MultiTrackIntAction (
572 std::optional<TrackSpan> tls_before,
575 : TracklistSelectionsAction (
599class MuteTracksAction :
public MultiTrackIntAction
602 MuteTracksAction (TrackSpan tls_before,
bool mute_new)
603 : MultiTrackIntAction (EditType::Mute, tls_before, mute_new,
false)
608class MuteTrackAction :
public MuteTracksAction
611 MuteTrackAction (TrackPtrVariant track,
bool mute_new)
612 : MuteTracksAction (TrackSpan{ track }, mute_new)
617class TrackLaneIntAction :
public TracklistSelectionsAction
624 : TracklistSelectionsAction (
650class MuteTrackLaneAction :
public TrackLaneIntAction
653 MuteTrackLaneAction (
656 : TrackLaneIntAction (EditType::MuteLane, track_lane, mute_new)
661class SoloTracksAction :
public MultiTrackIntAction
664 SoloTracksAction (TrackSpan tls_before,
bool solo_new)
665 : MultiTrackIntAction (EditType::Solo, tls_before, solo_new,
false)
670class SoloTrackAction :
public SoloTracksAction
673 SoloTrackAction (TrackPtrVariant track,
bool solo_new)
674 : SoloTracksAction (TrackSpan{ track }, solo_new)
679class SoloTrackLaneAction :
public TrackLaneIntAction
682 SoloTrackLaneAction (
685 : TrackLaneIntAction (EditType::SoloLane, track_lane, solo_new)
690class ListenTracksAction :
public MultiTrackIntAction
693 ListenTracksAction (TrackSpan tls_before,
bool listen_new)
694 : MultiTrackIntAction (EditType::Listen, tls_before, listen_new,
false)
699class ListenTrackAction :
public ListenTracksAction
702 ListenTrackAction (TrackPtrVariant track,
bool listen_new)
703 : ListenTracksAction (TrackSpan (track), listen_new)
708class EnableTracksAction :
public MultiTrackIntAction
711 EnableTracksAction (TrackSpan tls_before,
bool enable_new)
712 : MultiTrackIntAction (EditType::Enable, tls_before, enable_new,
false)
717class EnableTrackAction :
public EnableTracksAction
720 EnableTrackAction (TrackPtrVariant track,
bool enable_new)
721 : EnableTracksAction (TrackSpan (track), enable_new)
726class FoldTracksAction :
public MultiTrackIntAction
729 FoldTracksAction (std::optional<TrackSpan> tls_before,
bool fold_new)
730 : MultiTrackIntAction (EditType::Fold, tls_before, fold_new,
false)
735class TracksDirectOutAction :
public TracklistSelectionsAction
738 TracksDirectOutAction (
740 const PortConnectionsManager &port_connections_mgr,
741 std::optional<TrackPtrVariant> direct_out)
742 : TracklistSelectionsAction (
746 &port_connections_mgr,
756 direct_out ? 561561156
767class ChangeTracksDirectOutAction :
public TracksDirectOutAction
770 ChangeTracksDirectOutAction (
772 const PortConnectionsManager &port_connections_mgr,
773 TrackPtrVariant direct_out)
774 : TracksDirectOutAction (tls, port_connections_mgr, direct_out)
779class RemoveTracksDirectOutAction :
public TracksDirectOutAction
782 RemoveTracksDirectOutAction (
784 const PortConnectionsManager &port_connections_mgr)
785 : TracksDirectOutAction (tls, port_connections_mgr, std::nullopt)
790class EditTracksColorAction :
public TracklistSelectionsAction
793 EditTracksColorAction (TrackSpan tls,
const Color &color)
794 : TracklistSelectionsAction (
818class EditTrackColorAction :
public EditTracksColorAction
821 EditTrackColorAction (TrackPtrVariant track,
const Color &color)
822 : EditTracksColorAction (TrackSpan (track), color)
827class EditTracksTextAction :
public TracklistSelectionsAction
830 EditTracksTextAction (
834 : TracklistSelectionsAction (
858class EditTracksCommentAction :
public EditTracksTextAction
862 : EditTracksTextAction (EditType::Comment, tls, comment)
867class EditTrackCommentAction :
public EditTracksCommentAction
871 : EditTracksCommentAction (TrackSpan (track), comment)
876class EditTracksIconAction :
public EditTracksTextAction
880 : EditTracksTextAction (EditType::Icon, tls, icon)
885class EditTrackIconAction :
public EditTracksIconAction
889 : EditTracksIconAction (TrackSpan (track), icon)
894class RenameTrackAction :
public TracklistSelectionsAction
898 TrackPtrVariant track,
899 const PortConnectionsManager &port_connections_mgr,
901 : TracklistSelectionsAction (
905 &port_connections_mgr,
925class RenameTrackLaneAction :
public TracklistSelectionsAction
928 RenameTrackLaneAction (
931 : TracklistSelectionsAction (
969 : TracklistSelectionsAction (
993class CopyTracksAction :
public TracklistSelectionsAction
998 const PortConnectionsManager &port_connections_mgr,
1000 : TracklistSelectionsAction (
1004 &port_connections_mgr,
1039 : TracklistSelectionsAction (
1063class CopyTracksInsideFoldableTrackAction :
public TracklistSelectionsAction
1066 CopyTracksInsideFoldableTrackAction (
1068 const PortConnectionsManager &port_connections_mgr,
1070 : TracklistSelectionsAction (
1074 &port_connections_mgr,
1094class DeleteTracksAction :
public TracklistSelectionsAction
1097 DeleteTracksAction (
1099 const PortConnectionsManager &port_connections_mgr)
1100 : TracklistSelectionsAction (
1104 &port_connections_mgr,
1124class PinOrUnpinTracksAction :
public TracklistSelectionsAction
1127 PinOrUnpinTracksAction (
1129 const PortConnectionsManager &port_connections_mgr,
1131 : TracklistSelectionsAction (
1132 pin ? Type::Pin : Type::Unpin,
1135 &port_connections_mgr,
1155class PinTracksAction :
public PinOrUnpinTracksAction
1160 const PortConnectionsManager &port_connections_mgr)
1161 : PinOrUnpinTracksAction (tls, port_connections_mgr,
true)
1166class UnpinTracksAction :
public PinOrUnpinTracksAction
1171 const PortConnectionsManager &port_connections_mgr)
1172 : PinOrUnpinTracksAction (tls, port_connections_mgr,
false)
Represents the position of an object.
CreateTracksAction(Track::Type track_type, const PluginConfiguration *pl_setting, const FileDescriptor *file_descr, int track_pos, const Position *pos, int num_tracks, int disable_track_pos)
Create a Tracks Action object.
MoveTracksAction(TrackSpan tls, int track_pos)
Move tls to track_pos.
MoveTracksInsideFoldableTrackAction(TrackSpan tls, int track_pos)
Move inside a foldable track.
Tracklist selections (tracks) action.
int num_fold_change_tracks_
Number of tracks under folder affected.
int lane_pos_
Lane position, if editing lane.
fs::path file_basename_
The basename of the file, if any.
Type tracklist_selections_action_type_
Type of action.
TracklistSelectionsAction(Track::Type track_type, const PluginConfiguration *pl_setting, const FileDescriptor *file_descr, int track_pos, const Position *pos, int num_tracks, int disable_track_pos)
Constructor for a Create action.
bool is_empty_
Flag to know if we are making an empty track.
std::unique_ptr< PluginConfiguration > pl_setting_
PluginConfiguration, if making an instrument or bus track from a plugin.
Position pos_
Position to add the audio region to, if applicable.
std::vector< int > ival_before_
Int value.
utils::Utf8String base64_midi_
If this is an action to create a MIDI track from a MIDI file, this is the base64 representation so th...
bool needs_pause() const override
Returns whether the action requires pausing the engine.
@ DirectOut
Direct out change.
bool needs_transport_total_bar_update(bool perform) const override
Returns whether the total transport bars need to be recalculated.
QString to_string() const final
Stringizes the action to be used in Undo/Redo buttons.
Track::Type track_type_
Track type.
std::optional< std::vector< TrackPtrVariant > > tls_before_
Clone of the TracklistSelections, if applicable.
int track_pos_
Position to make the tracks at.
std::optional< std::vector< TrackPtrVariant > > tls_after_
Clone of the TracklistSelections, if applicable.
TracklistSelectionsAction(Type type, std::optional< TrackSpan > tls_before_var, std::optional< TrackSpan > tls_after_var, const PortConnectionsManager *port_connections_mgr, std::optional< TrackPtrVariant > track_var, Track::Type track_type, const PluginConfiguration *pl_setting, const FileDescriptor *file_descr, int track_pos, int lane_pos, const Position *pos, int num_tracks, EditType edit_type, int ival_after, const Color *color_new, float val_before, float val_after, const utils::Utf8String *new_txt, bool already_edited)
Creates a new TracklistSelectionsAction.
int num_tracks_
Number of tracks.
std::vector< std::optional< Track::Uuid > > out_track_uuids_
Direct out tracks of the original tracks.
float val_before_
Float values.
std::optional< dsp::FileAudioSourceUuidReference > pool_id_
If this is an action to create an Audio track from an audio file, this is the pool ID of the audio fi...
std::vector< int > track_positions_before_
Track positions.
std::optional< std::vector< TrackPtrVariant > > foldable_tls_before_
Foldable tracks before the change, used when undoing to set the correct sizes.
bool already_edited_
Skip do if true.
void perform()
Performs the action.
Configuration for instantiating a plugin descriptor.
A container of MIDI or Audio regions.
Track span that offers helper methods on a range of tracks.
void get_plugins(T &container)
Fills in the given array with all plugins in the tracklist.
Represents a track in the project.
Lightweight UTF-8 string wrapper with safe conversions.