summaryrefslogtreecommitdiff
path: root/gtk2_ardour/midi_time_axis.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-02-19 03:24:44 +0000
committerDavid Robillard <d@drobilla.net>2008-02-19 03:24:44 +0000
commit012292b4bdf5bf843232243852b39e8892b837de (patch)
treecddefe42aab1301df0677d652d37ba757894d97b /gtk2_ardour/midi_time_axis.cc
parentb79d5bfad3473f54ab24c0b7852fc4bfc9d9ebb0 (diff)
Less crash-happy MIDI reading on weird MIDI files.
Make "show existing automation" create/show automation tracks for all contained CC in MIDI tracks. Fix staggered time when importing multi-track MIDI files. git-svn-id: svn://localhost/ardour2/branches/3.0@3086 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_time_axis.cc')
-rw-r--r--gtk2_ardour/midi_time_axis.cc24
1 files changed, 22 insertions, 2 deletions
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc
index cb72363f88..2c7429c85a 100644
--- a/gtk2_ardour/midi_time_axis.cc
+++ b/gtk2_ardour/midi_time_axis.cc
@@ -262,7 +262,8 @@ MidiTimeAxisView::set_note_range(MidiStreamView::VisibleNoteRange range)
void
-MidiTimeAxisView::update_range() {
+MidiTimeAxisView::update_range()
+{
MidiGhostRegion* mgr;
for(list<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
@@ -272,6 +273,20 @@ MidiTimeAxisView::update_range() {
}
}
+void
+MidiTimeAxisView::show_existing_automation ()
+{
+ if (midi_track()) {
+ const set<Parameter> params = midi_track()->midi_diskstream()->
+ midi_playlist()->contained_automation();
+
+ for (set<Parameter>::const_iterator i = params.begin(); i != params.end(); ++i)
+ create_automation_child(*i, true);
+ }
+
+ RouteTimeAxisView::show_existing_automation ();
+}
+
/** Prompt for a controller with a dialog and add an automation track for it
*/
void
@@ -298,7 +313,8 @@ MidiTimeAxisView::create_automation_child (Parameter param, bool show)
{
if (param.type() == MidiCCAutomation) {
- /* FIXME: don't create AutomationList for track itself */
+ /* FIXME: don't create AutomationList for track itself
+ * (not actually needed or used, since the automation is region-ey) */
boost::shared_ptr<AutomationControl> c = _route->control(param);
@@ -308,6 +324,10 @@ MidiTimeAxisView::create_automation_child (Parameter param, bool show)
_route->add_control(c);
}
+ AutomationTracks::iterator existing = _automation_tracks.find(param);
+ if (existing != _automation_tracks.end())
+ return;
+
boost::shared_ptr<AutomationTimeAxisView> track(new AutomationTimeAxisView (_session,
_route, _route, c,
editor,