summaryrefslogtreecommitdiff
path: root/muse2/muse/part.h
diff options
context:
space:
mode:
authorRobert Jonsson <spamatica@gmail.com>2010-10-13 19:34:22 +0000
committerRobert Jonsson <spamatica@gmail.com>2010-10-13 19:34:22 +0000
commit8a2c2824a59d7644e13bc52c9a0ecbd641f21f95 (patch)
tree064ad3f2bf8daab0ad27b128abd86a9bbdb1e496 /muse2/muse/part.h
parenta27706d9629e8b592cca4659f865b70adef24e6d (diff)
new branch muse2, first checkin
Diffstat (limited to 'muse2/muse/part.h')
-rw-r--r--muse2/muse/part.h175
1 files changed, 175 insertions, 0 deletions
diff --git a/muse2/muse/part.h b/muse2/muse/part.h
new file mode 100644
index 00000000..b2a18851
--- /dev/null
+++ b/muse2/muse/part.h
@@ -0,0 +1,175 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: part.h,v 1.5.2.4 2009/05/24 21:43:44 terminator356 Exp $
+//
+// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __PART_H__
+#define __PART_H__
+
+#include <map>
+
+#include <qstring.h>
+#include <qcolor.h>
+// Added by T356.
+#include <uuid/uuid.h>
+
+#include "event.h"
+#include "audioconvert.h"
+
+class Track;
+class MidiTrack;
+class WaveTrack;
+class Xml;
+class Part;
+//class AudioConvertMap;
+
+// typedef std::multimap<unsigned, Event*, std::less<unsigned> >::iterator iEvent;
+
+struct ClonePart {
+ //const EventList* el;
+ const Part* cp;
+ int id;
+ uuid_t uuid;
+ //ClonePart(const EventList* e, int i) : el(e), id(i) {}
+ //ClonePart(const Part* p, int i) : cp(p), id(i) {}
+ ClonePart(const Part*, int i = -1);
+ };
+
+typedef std::list<ClonePart> CloneList;
+typedef CloneList::iterator iClone;
+
+//---------------------------------------------------------
+// Part
+//---------------------------------------------------------
+
+class Part : public PosLen {
+ static int snGen;
+ int _sn;
+
+ QString _name;
+ bool _selected;
+ bool _mute;
+ int _colorIndex;
+
+ protected:
+ Track* _track;
+ EventList* _events;
+ Part* _prevClone;
+ Part* _nextClone;
+
+ public:
+ Part(Track*);
+ Part(Track*, EventList*);
+ virtual ~Part();
+ int sn() { return _sn; }
+ void setSn(int n) { _sn = n; }
+ int newSn() { return snGen++; }
+
+ virtual Part* clone() const = 0;
+
+ const QString& name() const { return _name; }
+ void setName(const QString& s) { _name = s; }
+ bool selected() const { return _selected; }
+ void setSelected(bool f) { _selected = f; }
+ bool mute() const { return _mute; }
+ void setMute(bool b) { _mute = b; }
+ Track* track() const { return _track; }
+ void setTrack(Track*t) { _track = t; }
+ EventList* events() const { return _events; }
+ const EventList* cevents() const { return _events; }
+ int colorIndex() const { return _colorIndex; }
+ void setColorIndex(int idx) { _colorIndex = idx; }
+
+ Part* prevClone() { return _prevClone; }
+ Part* nextClone() { return _nextClone; }
+ void setPrevClone(Part* p) { _prevClone = p; }
+ void setNextClone(Part* p) { _nextClone = p; }
+
+ iEvent addEvent(Event& p);
+
+ //virtual void read(Xml&, int newPartOffset=0, bool toTrack = true);
+ //virtual void write(int, Xml&) const;
+ //virtual void write(int, Xml&, bool isCopy = false) const;
+ virtual void write(int, Xml&, bool isCopy = false, bool forceWavePaths = false) const;
+
+// virtual Event* newEvent() const = 0;
+ virtual void dump(int n = 0) const;
+ };
+
+//---------------------------------------------------------
+// MidiPart
+//---------------------------------------------------------
+
+class MidiPart : public Part {
+
+ public:
+ MidiPart(MidiTrack* t) : Part((Track*)t) {}
+ MidiPart(MidiTrack* t, EventList* ev) : Part((Track*)t, ev) {}
+ MidiPart(const MidiPart& p);
+ virtual ~MidiPart() {}
+ virtual MidiPart* clone() const;
+ MidiTrack* track() const { return (MidiTrack*)Part::track(); }
+
+// virtual Event* newEvent() const;
+ virtual void dump(int n = 0) const;
+ };
+
+//---------------------------------------------------------
+// WavePart
+//---------------------------------------------------------
+
+class WavePart : public Part {
+
+ // p3.3.31
+ AudioConvertMap _converters;
+
+ public:
+ WavePart(WaveTrack* t);
+ WavePart(WaveTrack* t, EventList* ev);
+ WavePart(const WavePart& p);
+ virtual ~WavePart() {}
+ virtual WavePart* clone() const;
+ WaveTrack* track() const { return (WaveTrack*)Part::track(); }
+
+// virtual Event* newEvent() const;
+ virtual void dump(int n = 0) const;
+ };
+
+//---------------------------------------------------------
+// PartList
+//---------------------------------------------------------
+
+typedef std::multimap<int, Part*, std::less<unsigned> >::iterator iPart;
+typedef std::multimap<int, Part*, std::less<unsigned> >::const_iterator ciPart;
+
+class PartList : public std::multimap<int, Part*, std::less<unsigned> > {
+ public:
+ iPart findPart(unsigned tick);
+ iPart add(Part*);
+ void remove(Part* part);
+ int index(Part*);
+ Part* find(int idx);
+ };
+
+extern void chainClone(Part* p);
+extern void chainClone(Part* p1, Part* p2);
+extern void unchainClone(Part* p);
+extern void replaceClone(Part* p1, Part* p2);
+extern void chainCheckErr(Part* p);
+extern void unchainTrackParts(Track* t, bool decRefCount);
+extern void chainTrackParts(Track* t, bool incRefCount);
+extern void addPortCtrlEvents(Part* part, bool doClones);
+extern void addPortCtrlEvents(Event& event, Part* part, bool doClones);
+extern void removePortCtrlEvents(Part* part, bool doClones);
+extern void removePortCtrlEvents(Event& event, Part* part, bool doClones);
+extern CloneList cloneList;
+//extern CloneList copyCloneList;
+//extern void updateCloneList(Part* oPart, Part* nPart);
+//extern void clearClipboardAndCloneList();
+extern Part* readXmlPart(Xml&, Track*, bool doClone = false, bool toTrack = true);
+
+#endif
+