Merge windows+cc branch into cairocanvas branch. Not finished, need to now merge...
[ardour.git] / libs / ardour / ardour / midi_playlist.h
index c83bf80a2826d5c9c79c98cae92a2a8487c94e2e..b118214c9e2a2a2aaf5f6a23b3ffc86ec7231c16 100644 (file)
@@ -1,6 +1,6 @@
 /*
     Copyright (C) 2006 Paul Davis
-       Written by Dave Robillard, 2006
+    Author: David Robillard
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 
 #include "ardour/ardour.h"
 #include "ardour/playlist.h"
+#include "ardour/midi_state_tracker.h"
 #include "evoral/Parameter.hpp"
 
 namespace ARDOUR
 {
 
 class Session;
-class Region;
 class MidiRegion;
 class Source;
 template<typename T> class MidiRingBuffer;
 
-class MidiPlaylist : public ARDOUR::Playlist
+class LIBARDOUR_API MidiPlaylist : public ARDOUR::Playlist
 {
 public:
        MidiPlaylist (Session&, const XMLNode&, bool hidden = false);
        MidiPlaylist (Session&, std::string name, bool hidden = false);
        MidiPlaylist (boost::shared_ptr<const MidiPlaylist> other, std::string name, bool hidden = false);
-       MidiPlaylist (boost::shared_ptr<const MidiPlaylist> other, nframes_t start, nframes_t cnt,
+       MidiPlaylist (boost::shared_ptr<const MidiPlaylist> other, framepos_t start, framecnt_t cnt,
                      std::string name, bool hidden = false);
 
        ~MidiPlaylist ();
 
-       nframes_t read (MidiRingBuffer<nframes_t>& buf,
-                       nframes_t start, nframes_t cnt, uint32_t chan_n=0);
+       framecnt_t read (Evoral::EventSink<framepos_t>& buf,
+                        framepos_t start, framecnt_t cnt, uint32_t chan_n = 0);
 
        int set_state (const XMLNode&, int version);
 
@@ -58,22 +58,22 @@ public:
 
        std::set<Evoral::Parameter> contained_automation();
 
-protected:
-
-       /* playlist "callbacks" */
+       void clear_note_trackers ();
 
-       void finalize_split_region (boost::shared_ptr<Region> original, boost::shared_ptr<Region> left, boost::shared_ptr<Region> right);
+protected:
 
-       void check_dependents (boost::shared_ptr<Region> region, bool norefresh);
-       void refresh_dependents (boost::shared_ptr<Region> region);
        void remove_dependents (boost::shared_ptr<Region> region);
 
 private:
        void dump () const;
 
-       bool region_changed (Change, boost::shared_ptr<Region>);
+       bool region_changed (const PBD::PropertyChange&, boost::shared_ptr<Region>);
 
        NoteMode _note_mode;
+
+       typedef std::map<Region*,MidiStateTracker*> NoteTrackers;
+       NoteTrackers _note_trackers;
+
 };
 
 } /* namespace ARDOUR */