#include <gtkmm2ext/gtk_ui.h>
-#include <ardour/midi_playlist.h>
-#include <ardour/midi_region.h>
-#include <ardour/midi_source.h>
-#include <ardour/midi_diskstream.h>
-#include <ardour/midi_track.h>
-#include <ardour/smf_source.h>
-#include <ardour/region_factory.h>
+#include "ardour/midi_playlist.h"
+#include "ardour/midi_region.h"
+#include "ardour/midi_source.h"
+#include "ardour/midi_diskstream.h"
+#include "ardour/midi_track.h"
+#include "ardour/smf_source.h"
+#include "ardour/region_factory.h"
#include "automation_streamview.h"
#include "region_view.h"
{
list<RegionView *>::iterator i, tmp;
- for (i = region_views.begin(); i != region_views.end(); ++i)
+ // Flag region views as invalid and disable drawing
+ for (i = region_views.begin(); i != region_views.end(); ++i) {
(*i)->set_valid (false);
-
- if (_trackview.is_track()) {
- _trackview.get_diskstream()->playlist()->foreach_region (static_cast<StreamView*>(this), &StreamView::add_region_view);
+ (*i)->enable_display(false);
}
- for (i = region_views.begin(); i != region_views.end(); ) {
- tmp = i;
- tmp++;
-
- if (!(*i)->is_valid()) {
- delete *i;
- region_views.erase (i);
- } else {
- (*i)->enable_display(true);
- (*i)->set_height(height);
- }
-
- i = tmp;
+ // Add and display region views, and flag them as valid
+ if (_trackview.is_track()) {
+ _trackview.get_diskstream()->playlist()->foreach_region (
+ sigc::hide_return (sigc::mem_fun (*this, &StreamView::add_region_view))
+ );
}
- /* now fix layering */
-
- for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- region_layered (*i);
- }
+ // Stack regions by layer, and remove invalid regions
+ layer_regions();
}