Back out big shared_ptr change. Moving to a branch. Apologies all.
[ardour.git] / gtk2_ardour / automation_streamview.cc
index b02d511d07e266df2f48e70e9f559b954ec3f798..1654e7e5a9ceac2240a11d18d2542a532a5d3feb 100644 (file)
 
 #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"
@@ -158,33 +158,21 @@ AutomationStreamView::redisplay_diskstream ()
 {
        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();
 }