diff options
Diffstat (limited to 'muse2/muse/track.h')
-rw-r--r-- | muse2/muse/track.h | 74 |
1 files changed, 40 insertions, 34 deletions
diff --git a/muse2/muse/track.h b/muse2/muse/track.h index 04cf71c2..b887ff52 100644 --- a/muse2/muse/track.h +++ b/muse2/muse/track.h @@ -57,6 +57,8 @@ class Track { MIDI=0, DRUM, WAVE, AUDIO_OUTPUT, AUDIO_INPUT, AUDIO_GROUP, AUDIO_AUX, AUDIO_SOFTSYNTH }; + enum AssignFlags { + ASSIGN_PROPERTIES=1, ASSIGN_PARTS=2, ASSIGN_PLUGINS=4, ASSIGN_STD_CTRLS=8, ASSIGN_PLUGIN_CTRLS=16, ASSIGN_ROUTES=32, ASSIGN_DEFAULT_ROUTES=64 }; private: TrackType _type; QString _comment; @@ -64,6 +66,7 @@ class Track { PartList _parts; void init(); + void internal_assign(const Track&, int flags); protected: static unsigned int _soloRefCnt; @@ -104,10 +107,10 @@ class Track { public: Track(TrackType); - //Track(const Track&); - Track(const Track&, bool cloneParts); + Track(const Track&, int flags); virtual ~Track(); - virtual Track& operator=(const Track& t); + //virtual Track& operator=(const Track& t); + virtual void assign(const Track&, int flags); static const char* _cname[]; @@ -159,8 +162,7 @@ class Track { virtual void write(int, Xml&) const = 0; virtual Track* newTrack() const = 0; - //virtual Track* clone() const = 0; - virtual Track* clone(bool CloneParts) const = 0; + virtual Track* clone(int flags) const = 0; virtual bool setRecordFlag1(bool f) = 0; virtual void setRecordFlag2(bool f) = 0; @@ -199,7 +201,7 @@ class Track { void resetMeter(); bool readProperty(Xml& xml, const QString& tag); - void setDefaultName(); + void setDefaultName(QString base = QString()); int channels() const { return _channels; } virtual void setChannels(int n); bool isMidiTrack() const { return type() == MIDI || type() == DRUM; } @@ -230,13 +232,15 @@ class MidiTrack : public Track { MPEventList* _mpevents; // tmp Events druring recording static bool _isVisible; clefTypes clefType; + void internal_assign(const Track&, int flags); public: MidiTrack(); - //MidiTrack(const MidiTrack&); - MidiTrack(const MidiTrack&, bool cloneParts); + MidiTrack(const MidiTrack&, int flags); virtual ~MidiTrack(); + virtual void assign(const Track&, int flags); + void init(); virtual AutomationType automationType() const; virtual void setAutomationType(AutomationType); @@ -258,9 +262,9 @@ class MidiTrack : public Track { virtual void write(int, Xml&) const; virtual int height() const; + virtual MidiTrack* newTrack() const { return new MidiTrack(); } - //virtual MidiTrack* clone() const { return new MidiTrack(*this); } - virtual MidiTrack* clone(bool cloneParts) const { return new MidiTrack(*this, cloneParts); } + virtual MidiTrack* clone(int flags) const { return new MidiTrack(*this, flags); } virtual Part* newPart(Part*p=0, bool clone=false); void setOutChannel(int i) { _outChannel = i; } @@ -324,6 +328,7 @@ class AudioTrack : public Track { bool _sendMetronome; AutomationType _automationType; Pipeline* _efxPipe; + void internal_assign(const Track&, int flags); protected: float** outBuffers; @@ -341,10 +346,14 @@ class AudioTrack : public Track { AudioTrack(TrackType t); //AudioTrack(TrackType t, int num_out_bufs = MAX_CHANNELS); - //AudioTrack(const AudioTrack&); - AudioTrack(const AudioTrack&, bool cloneParts); + AudioTrack(const AudioTrack&, int flags); virtual ~AudioTrack(); + virtual void assign(const Track&, int flags); + + virtual AudioTrack* clone(int flags) const = 0; + virtual Part* newPart(Part*p=0, bool clone=false); + virtual bool setRecordFlag1(bool f); virtual void setRecordFlag2(bool f); bool prepareRecording(); @@ -362,10 +371,6 @@ class AudioTrack : public Track { void mapRackPluginsToControllers(); void showPendingPluginNativeGuis(); - //virtual AudioTrack* clone() const = 0; - virtual AudioTrack* clone(bool cloneParts) const = 0; - virtual Part* newPart(Part*p=0, bool clone=false); - SndFile* recFile() const { return _recFile; } void setRecFile(SndFile* sf) { _recFile = sf; } @@ -447,14 +452,15 @@ class AudioInput : public AudioTrack { void* jackPorts[MAX_CHANNELS]; virtual bool getData(unsigned, int, unsigned, float**); static bool _isVisible; - + void internal_assign(const Track& t, int flags); + public: AudioInput(); - //AudioInput(const AudioInput&); - AudioInput(const AudioInput&, bool cloneParts); + AudioInput(const AudioInput&, int flags); virtual ~AudioInput(); - //AudioInput* clone() const { return new AudioInput(*this); } - AudioInput* clone(bool cloneParts) const { return new AudioInput(*this, cloneParts); } + + virtual void assign(const Track&, int flags); + AudioInput* clone(int flags) const { return new AudioInput(*this, flags); } virtual AudioInput* newTrack() const { return new AudioInput(); } virtual void read(Xml&); virtual void write(int, Xml&) const; @@ -478,16 +484,16 @@ class AudioOutput : public AudioTrack { float* buffer1[MAX_CHANNELS]; unsigned long _nframes; static bool _isVisible; - float* _monitorBuffer[MAX_CHANNELS]; + void internal_assign(const Track& t, int flags); public: AudioOutput(); - //AudioOutput(const AudioOutput&); - AudioOutput(const AudioOutput&, bool cloneParts); + AudioOutput(const AudioOutput&, int flags); virtual ~AudioOutput(); - //AudioOutput* clone() const { return new AudioOutput(*this); } - AudioOutput* clone(bool cloneParts) const { return new AudioOutput(*this, cloneParts); } + + virtual void assign(const Track&, int flags); + AudioOutput* clone(int flags) const { return new AudioOutput(*this, flags); } virtual AudioOutput* newTrack() const { return new AudioOutput(); } virtual void read(Xml&); virtual void write(int, Xml&) const; @@ -516,8 +522,9 @@ class AudioGroup : public AudioTrack { static bool _isVisible; public: AudioGroup() : AudioTrack(AUDIO_GROUP) { } - //AudioGroup* clone() const { return new AudioGroup(*this); } - AudioGroup* clone(bool /*cloneParts*/) const { return new AudioGroup(*this); } + AudioGroup(const AudioGroup& t, int flags) : AudioTrack(t, flags) { } + + AudioGroup* clone(int flags) const { return new AudioGroup(*this, flags); } virtual AudioGroup* newTrack() const { return new AudioGroup(); } virtual void read(Xml&); virtual void write(int, Xml&) const; @@ -536,8 +543,9 @@ class AudioAux : public AudioTrack { static bool _isVisible; public: AudioAux(); - //AudioAux* clone() const { return new AudioAux(*this); } - AudioAux* clone(bool /*cloneParts*/) const { return new AudioAux(*this); } + AudioAux(const AudioAux& t, int flags); + + AudioAux* clone(int flags) const { return new AudioAux(*this, flags); } ~AudioAux(); virtual AudioAux* newTrack() const { return new AudioAux(); } virtual void read(Xml&); @@ -562,11 +570,9 @@ class WaveTrack : public AudioTrack { public: WaveTrack() : AudioTrack(Track::WAVE) { } - //WaveTrack(const WaveTrack& wt) : AudioTrack(wt) {} - WaveTrack(const WaveTrack& wt, bool cloneParts) : AudioTrack(wt, cloneParts) {} + WaveTrack(const WaveTrack& wt, int flags) : AudioTrack(wt, flags) {} - //virtual WaveTrack* clone() const { return new WaveTrack(*this); } - virtual WaveTrack* clone(bool cloneParts) const { return new WaveTrack(*this, cloneParts); } + virtual WaveTrack* clone(int flags) const { return new WaveTrack(*this, flags); } virtual WaveTrack* newTrack() const { return new WaveTrack(); } virtual Part* newPart(Part*p=0, bool clone=false); |