00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef TSE3_APP_MODIFIED_H
00018 #define TSE3_APP_MODIFIED_H
00019
00020 #include "tse3/listen/app/Modified.h"
00021
00022 #include "tse3/Notifier.h"
00023 #include "tse3/listen/Song.h"
00024 #include "tse3/listen/Track.h"
00025 #include "tse3/listen/Part.h"
00026 #include "tse3/listen/DisplayParams.h"
00027 #include "tse3/listen/Phrase.h"
00028 #include "tse3/listen/PhraseList.h"
00029 #include "tse3/listen/FlagTrack.h"
00030 #include "tse3/listen/TimeSigTrack.h"
00031 #include "tse3/listen/TempoTrack.h"
00032 #include "tse3/listen/MidiFilter.h"
00033 #include "tse3/listen/MidiParams.h"
00034
00035 #include <cstddef>
00036
00037 namespace TSE3
00038 {
00039 namespace App
00040 {
00053 class Modified : public TSE3::Notifier<ModifiedListener>,
00054 public TSE3::Listener<TSE3::SongListener>,
00055 public TSE3::Listener<TSE3::TrackListener>,
00056 public TSE3::Listener<TSE3::PartListener>,
00057 public TSE3::Listener<TSE3::PhraseListListener>,
00058 public TSE3::Listener<TSE3::MidiParamsListener>,
00059 public TSE3::Listener<TSE3::DisplayParamsListener>,
00060 public TSE3::Listener<TSE3::FlagTrackListener>,
00061 public TSE3::Listener<TSE3::TimeSigTrackListener>,
00062 public TSE3::Listener<TSE3::TempoTrackListener>,
00063 public TSE3::Listener<TSE3::MidiFilterListener>,
00064 public TSE3::Listener<TSE3::PhraseListener>
00065 {
00066 public:
00067
00076 Modified(TSE3::Song *song = 0);
00077
00085 TSE3::Song *song() const { return _song; }
00086
00094 void setSong(TSE3::Song *song);
00095
00103 bool modified() const { return _modified; }
00104
00112 void setModified(bool modified = true);
00113
00117 virtual void Song_InfoAltered(Song *);
00118
00122 virtual void Song_FromAltered(Song *, Clock );
00123
00127 virtual void Song_ToAltered(Song *, Clock );
00128
00132 virtual void Song_TrackInserted(Song *, Track *);
00133
00137 virtual void Song_TrackRemoved(Song *, Track *, size_t);
00138
00142 virtual void Track_TitleAltered(Track *);
00143
00147 virtual void Track_PartInserted(Track *, Part *);
00148
00152 virtual void Track_PartRemoved(Track *, Part *);
00153
00157 virtual void Part_StartAltered(Part *, Clock );
00158
00162 virtual void Part_EndAltered(Part *, Clock );
00163
00167 virtual void Part_RepeatAltered(Part *, Clock );
00168
00172 virtual void Part_PhraseAltered(Part *, Phrase * );
00173
00177 virtual void PhraseList_Inserted(PhraseList *, Phrase * );
00178
00182 virtual void PhraseList_Removed(PhraseList *, Phrase * );
00183
00187 virtual void MidiParams_Altered(MidiParams *, int );
00188
00192 virtual void DisplayParams_Altered(DisplayParams *);
00193
00197 virtual void EventTrack_EventAltered(EventTrack<Flag> *,
00198 size_t);
00199
00203 virtual void EventTrack_EventInserted(EventTrack<Flag> *,
00204 size_t);
00205
00209 virtual void EventTrack_EventErased(EventTrack<Flag> *,
00210 size_t);
00211
00215 virtual void EventTrack_EventAltered(EventTrack<TimeSig> *);
00216
00220 virtual void EventTrack_EventInserted(EventTrack<TimeSig> *);
00221
00225 virtual void EventTrack_EventErased(EventTrack<TimeSig> *);
00226
00230 virtual void EventTrack_EventAltered(EventTrack<Tempo> *);
00231
00235 virtual void EventTrack_EventInserted(EventTrack<Tempo> *);
00236
00240 virtual void EventTrack_EventErased(EventTrack<Tempo> *);
00241
00245 void MidiFilter_Altered(MidiFilter *, int );
00246
00247 private:
00248
00249 void attachToTrack(TSE3::Track *track);
00250 void detachFromTrack(TSE3::Track *track);
00251 void attachToPart(TSE3::Part *part);
00252 void detachFromPart(TSE3::Part *part);
00253
00254 TSE3::Song *_song;
00255 bool _modified;
00256 };
00257 }
00258 }
00259
00260 #endif