diff options
Diffstat (limited to 'gtk2_ardour/midi_streamview.cc')
-rw-r--r-- | gtk2_ardour/midi_streamview.cc | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc index b7fa88404e..ebc6b0d642 100644 --- a/gtk2_ardour/midi_streamview.cc +++ b/gtk2_ardour/midi_streamview.cc @@ -130,18 +130,32 @@ veto_note_range(uint8_t& min, uint8_t& max) } RegionView* -MidiStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wfd, bool recording) +MidiStreamView::create_region_view (boost::shared_ptr<Region> r, bool wfd, bool) { boost::shared_ptr<MidiRegion> region = boost::dynamic_pointer_cast<MidiRegion> (r); if (region == 0) { - return NULL; + return 0; } - MidiRegionView *region_view; - list<RegionView *>::iterator i; + RegionView* region_view = new MidiRegionView (canvas_group, _trackview, region, + _samples_per_unit, region_color); + + region_view->init (region_color, false); + + return region_view; +} - for (i = region_views.begin(); i != region_views.end(); ++i) { +RegionView* +MidiStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wfd, bool recording) +{ + boost::shared_ptr<MidiRegion> region = boost::dynamic_pointer_cast<MidiRegion> (r); + + if (region == 0) { + return 0; + } + + for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) { if ((*i)->region() == r) { /* great. we already have a MidiRegionView for this Region. use it again. */ @@ -150,18 +164,19 @@ MidiStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wfd, display_region(dynamic_cast<MidiRegionView*>(*i), wfd); - return NULL; + return 0; } } + + MidiRegionView* region_view = dynamic_cast<MidiRegionView*> (create_region_view (r, wfd, recording)); + if (region_view == 0) { + return 0; + } - region_view = new MidiRegionView (canvas_group, _trackview, region, - _samples_per_unit, region_color); - - region_view->init (region_color, false); region_views.push_front (region_view); /* display events and find note range */ - display_region(region_view, wfd); + display_region (region_view, wfd); /* catch regionview going away */ region->GoingAway.connect (bind (mem_fun (*this, &MidiStreamView::remove_region_view), region)); @@ -266,7 +281,7 @@ MidiStreamView::redisplay_diskstream () // Add and display region views, and flag them as valid _trackview.get_diskstream()->playlist()->foreach_region( - sigc::mem_fun (*this, &StreamView::add_region_view) + sigc::hide_return (sigc::mem_fun (*this, &StreamView::add_region_view)) ); // Stack regions by layer, and remove invalid regions |