+ void set_midi_source (MidiSource *);
+
+ boost::shared_ptr<Evoral::Note<TimeType> > find_note (NotePtr);
+ boost::shared_ptr<Evoral::Note<TimeType> > find_note (gint note_id);
+
+ InsertMergePolicy insert_merge_policy () const;
+ void set_insert_merge_policy (InsertMergePolicy);
+
+ boost::shared_ptr<Evoral::Control> control_factory(const Evoral::Parameter& id);
+
+protected:
+ int resolve_overlaps_unlocked (const NotePtr, void* arg = 0);
+
+private:
+ struct WriteLockImpl : public AutomatableSequence<TimeType>::WriteLockImpl {
+ WriteLockImpl(Glib::Mutex::Lock* source_lock, Glib::RWLock& s, Glib::Mutex& c)
+ : AutomatableSequence<TimeType>::WriteLockImpl(s, c)
+ , source_lock(source_lock)
+ {}
+ ~WriteLockImpl() {
+ delete source_lock;
+ }
+ Glib::Mutex::Lock* source_lock;
+ };
+
+public:
+ virtual WriteLock edit_lock();
+ virtual WriteLock write_lock();
+