#include <gtkmm2ext/gtk_ui.h>
-#include <ardour/midi_diskstream.h>
-#include <ardour/midi_playlist.h>
-#include <ardour/midi_region.h>
-#include <ardour/midi_source.h>
-#include <ardour/midi_track.h>
-#include <ardour/region_factory.h>
-#include <ardour/smf_source.h>
+#include "ardour/midi_diskstream.h"
+#include "ardour/midi_playlist.h"
+#include "ardour/midi_region.h"
+#include "ardour/midi_source.h"
+#include "ardour/midi_track.h"
+#include "ardour/region_factory.h"
+#include "ardour/smf_source.h"
#include "ardour_ui.h"
#include "canvas-simplerect.h"
}
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. */
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));
_data_note_min = 127;
_data_note_max = 0;
_trackview.get_diskstream()->playlist()->foreach_region(
- static_cast<StreamView*>(this),
- &StreamView::update_contents_metrics);
+ sigc::mem_fun (*this, &StreamView::update_contents_metrics)
+ );
// No notes, use default range
if (!_range_dirty) {
// Add and display region views, and flag them as valid
_trackview.get_diskstream()->playlist()->foreach_region(
- static_cast<StreamView*>(this),
- &StreamView::add_region_view);
+ sigc::hide_return (sigc::mem_fun (*this, &StreamView::add_region_view))
+ );
// Stack regions by layer, and remove invalid regions
layer_regions();
if (nlen != region->length()) {
- if (region->source(0)->length() >= region->position() + nlen) {
+ if (region->source_length(0) >= region->position() + nlen) {
region->freeze ();
region->set_position (_trackview.get_diskstream()->get_capture_start_frame(n), this);