diff options
author | David Robillard <d@drobilla.net> | 2008-02-19 03:24:44 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-02-19 03:24:44 +0000 |
commit | 012292b4bdf5bf843232243852b39e8892b837de (patch) | |
tree | cddefe42aab1301df0677d652d37ba757894d97b /gtk2_ardour/midi_time_axis.cc | |
parent | b79d5bfad3473f54ab24c0b7852fc4bfc9d9ebb0 (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.cc | 24 |
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, |