summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_region.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-08-11 06:17:42 +0000
committerDavid Robillard <d@drobilla.net>2007-08-11 06:17:42 +0000
commit5156998e6e2536c9c713974d3ae719a5d2ef5c7f (patch)
tree6223846321fe3f611b952b2c2e77c349d0b7072f /libs/ardour/midi_region.cc
parent861181d7421012486e36327c464b957ec08e396b (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.cc22
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());
+}
+