diff options
author | David Robillard <d@drobilla.net> | 2007-08-11 06:17:42 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-08-11 06:17:42 +0000 |
commit | 5156998e6e2536c9c713974d3ae719a5d2ef5c7f (patch) | |
tree | 6223846321fe3f611b952b2c2e77c349d0b7072f /libs/ardour/midi_region.cc | |
parent | 861181d7421012486e36327c464b957ec08e396b (diff) |
Saving of edited MIDI data to disk (on session save).
Seems to be a pretty random problem with note duration restoring though...
git-svn-id: svn://localhost/ardour2/trunk@2290 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_region.cc')
-rw-r--r-- | libs/ardour/midi_region.cc | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc index 1ef52c743d..dc115cd55a 100644 --- a/libs/ardour/midi_region.cc +++ b/libs/ardour/midi_region.cc @@ -53,6 +53,7 @@ MidiRegion::MidiRegion (boost::shared_ptr<MidiSource> src, nframes_t start, nfra : Region (src, start, length, PBD::basename_nosuffix(src->name()), DataType::MIDI, 0, Region::Flag(Region::DefaultFlags|Region::External)) { assert(_name.find("/") == string::npos); + midi_source(0)->Switched.connect(sigc::mem_fun(this, &MidiRegion::switch_source)); } /* Basic MidiRegion constructor (one channel) */ @@ -60,6 +61,7 @@ MidiRegion::MidiRegion (boost::shared_ptr<MidiSource> src, nframes_t start, nfra : Region (src, start, length, name, DataType::MIDI, layer, flags) { assert(_name.find("/") == string::npos); + midi_source(0)->Switched.connect(sigc::mem_fun(this, &MidiRegion::switch_source)); } /* Basic MidiRegion constructor (many channels) */ @@ -67,6 +69,7 @@ MidiRegion::MidiRegion (SourceList& srcs, nframes_t start, nframes_t length, con : Region (srcs, start, length, name, DataType::MIDI, layer, flags) { assert(_name.find("/") == string::npos); + midi_source(0)->Switched.connect(sigc::mem_fun(this, &MidiRegion::switch_source)); } @@ -75,12 +78,14 @@ MidiRegion::MidiRegion (boost::shared_ptr<const MidiRegion> other, nframes_t off : Region (other, offset, length, name, layer, flags) { assert(_name.find("/") == string::npos); + midi_source(0)->Switched.connect(sigc::mem_fun(this, &MidiRegion::switch_source)); } MidiRegion::MidiRegion (boost::shared_ptr<const MidiRegion> other) : Region (other) { assert(_name.find("/") == string::npos); + midi_source(0)->Switched.connect(sigc::mem_fun(this, &MidiRegion::switch_source)); } MidiRegion::MidiRegion (boost::shared_ptr<MidiSource> src, const XMLNode& node) @@ -90,6 +95,7 @@ MidiRegion::MidiRegion (boost::shared_ptr<MidiSource> src, const XMLNode& node) throw failed_constructor(); } + midi_source(0)->Switched.connect(sigc::mem_fun(this, &MidiRegion::switch_source)); assert(_name.find("/") == string::npos); assert(_type == DataType::MIDI); } @@ -101,6 +107,7 @@ MidiRegion::MidiRegion (SourceList& srcs, const XMLNode& node) throw failed_constructor(); } + midi_source(0)->Switched.connect(sigc::mem_fun(this, &MidiRegion::switch_source)); assert(_name.find("/") == string::npos); assert(_type == DataType::MIDI); } @@ -302,3 +309,18 @@ MidiRegion::midi_source (uint32_t n) const return boost::dynamic_pointer_cast<MidiSource>(source(n)); } + +void +MidiRegion::switch_source(boost::shared_ptr<Source> src) +{ + boost::shared_ptr<MidiSource> msrc = boost::dynamic_pointer_cast<MidiSource>(src); + if (!msrc) + return; + + // MIDI regions have only one source + _sources.clear(); + _sources.push_back(msrc); + + set_name(msrc->name()); +} + |