Get MidiRegionView's hands on MidiModel for editing operations to come.

MIDI select rectangle.
Add notes on a proper click only (not mouse down).
Fix crash when dragging from region to outside region.


git-svn-id: svn://localhost/ardour2/trunk@2196 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
David Robillard 2007-07-31 02:16:46 +00:00
parent ea5a4eac10
commit bb33e5d9f8
8 changed files with 88 additions and 79 deletions

View file

@ -93,15 +93,12 @@ MidiStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wait
/* great. we already have a MidiRegionView for this Region. use it again. */
(*i)->set_valid (true);
display_region(dynamic_cast<MidiRegionView*>(*i), false);
display_region(dynamic_cast<MidiRegionView*>(*i));
return NULL;
}
}
// can't we all just get along?
assert(_trackview.midi_track()->mode() != Destructive);
region_view = new MidiRegionView (canvas_group, _trackview, region,
_samples_per_unit, region_color);
@ -114,7 +111,7 @@ MidiStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wait
//region_view->set_waveform_visible(_trackview.editor.show_waveforms());
/* display events and find note range */
display_region(region_view, false);
display_region(region_view);
/* always display at least 1 octave range */
_highest_note = max(_highest_note, static_cast<uint8_t>(_lowest_note + 11));
@ -128,27 +125,22 @@ MidiStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wait
}
void
MidiStreamView::display_region(MidiRegionView* region_view, bool redisplay_events)
MidiStreamView::display_region(MidiRegionView* region_view)
{
if ( ! region_view)
return;
if (redisplay_events)
region_view->begin_write();
boost::shared_ptr<MidiSource> source(region_view->midi_region()->midi_source(0));
source->load_model();
// Find our note range
for (size_t i=0; i < source->model()->n_notes(); ++i) {
const MidiModel::Note& note = source->model()->note_at(i);
update_bounds(note.note());
if (redisplay_events)
region_view->add_note(note);
}
if (redisplay_events)
region_view->end_write();
// Display region contents
region_view->display_model(source->model());
}
// FIXME: code duplication with AudioStreamView