diff options
Diffstat (limited to 'muse2/muse/part.h')
-rw-r--r-- | muse2/muse/part.h | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/muse2/muse/part.h b/muse2/muse/part.h index a9241807..d128460b 100644 --- a/muse2/muse/part.h +++ b/muse2/muse/part.h @@ -66,6 +66,7 @@ class Part : public PosLen { private: static int snGen; int _sn; + int _clonemaster_sn; // the serial number of some clone in the chain. every member of the chain has the same value here. QString _name; bool _selected; @@ -83,12 +84,13 @@ class Part : public PosLen { public: Part(Track*); virtual ~Part(); - virtual Part* duplicate() = 0; - virtual Part* duplicateEmpty() = 0; - virtual Part* createNewClone() = 0; + virtual Part* duplicate() const = 0; + virtual Part* duplicateEmpty() const = 0; + virtual Part* createNewClone() const = 0; + virtual void splitPart(int tickpos, Part*& p1, Part*& p2) const; - int sn() { return _sn; } - void setSn(int n) { _sn = n; } + int clonemaster_sn() const { return _clonemaster_sn; } + int sn() const { return _sn; } int newSn() { return snGen++; } const QString& name() const { return _name; } @@ -104,20 +106,18 @@ class Part : public PosLen { int colorIndex() const { return _colorIndex; } void setColorIndex(int idx) { _colorIndex = idx; } - bool hasClones() { return _prevClone!=this || _nextClone!=this; } - int nClones(); - Part* prevClone() { return _prevClone; } - Part* nextClone() { return _nextClone; } + bool isCloneOf(const Part*) const; + bool hasClones() const { return _prevClone!=this || _nextClone!=this; } + int nClones() const; + Part* prevClone() const { return _prevClone; } // FINDMICHJETZT DELETETHIS 2x + Part* nextClone() const { return _nextClone; } void unchainClone(); void chainClone(Part* p); // *this is made a sibling of p! p is not touched (except for its clone-chain), whereas this->events will get altered void rechainClone(); // re-chains the part to the same clone chain it was unchained before // Returns combination of HiddenEventsType enum. - virtual int hasHiddenEvents() = 0; - // If repeated calls to hasHiddenEvents() are desired, then to avoid re-iteration of the event list, - // call this after hasHiddenEvents(). - int cachedHasHiddenEvents() const { return _hiddenEvents; } + virtual int hasHiddenEvents() const { return _hiddenEvents; } iEvent addEvent(Event& p); // DEPRECATED. requires the part to be NOT a clone. FIXME remove! @@ -136,9 +136,9 @@ class MidiPart : public Part { public: MidiPart(MidiTrack* t) : Part((Track*)t) {} virtual ~MidiPart() {} - virtual MidiPart* duplicate(); - virtual MidiPart* duplicateEmpty(); - virtual MidiPart* createNewClone(); + virtual MidiPart* duplicate() const; + virtual MidiPart* duplicateEmpty() const; + virtual MidiPart* createNewClone() const; MidiTrack* track() const { return (MidiTrack*)Part::track(); } @@ -160,11 +160,10 @@ class WavePart : public Part { public: WavePart(WaveTrack* t); - WavePart(WaveTrack* t, EventList* ev); virtual ~WavePart() {} - virtual WavePart* duplicate(); - virtual WavePart* duplicateEmpty(); - virtual WavePart* createNewClone(); + virtual WavePart* duplicate() const; + virtual WavePart* duplicateEmpty() const; + virtual WavePart* createNewClone() const; WaveTrack* track() const { return (WaveTrack*)Part::track(); } // Returns combination of HiddenEventsType enum. @@ -196,8 +195,6 @@ class PartList : public std::multimap<int, Part*, std::less<unsigned> > { } }; -extern void chainClone(Part* p1, Part* p2); -extern void unchainClone(Part* p); extern void chainCheckErr(Part* p); extern void unchainTrackParts(Track* t, bool decRefCount); extern void chainTrackParts(Track* t, bool incRefCount); |