Move Diskstream ownership to Track, so that Session no longer holds lists of Diskstre...
[ardour.git] / gtk2_ardour / tape_region_view.cc
index bd5ce8af029fa9d6be35f78f99048f838acf27ac..5fef5e46eee4a6bb5957cf9b30ca54ba4c0418fd 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2006 Paul Davis 
+    Copyright (C) 2006 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -15,7 +15,6 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #include <cmath>
 
 #include <gtkmm2ext/gtk_ui.h>
 
-#include <ardour/playlist.h>
-#include <ardour/audioregion.h>
-#include <ardour/audiosource.h>
-#include <ardour/audio_diskstream.h>
+#include "ardour/playlist.h"
+#include "ardour/audioregion.h"
+#include "ardour/audiosource.h"
 
 #include "tape_region_view.h"
 #include "audio_time_axis.h"
@@ -36,7 +34,6 @@
 
 #include "i18n.h"
 
-using namespace sigc;
 using namespace ARDOUR;
 using namespace PBD;
 using namespace Editing;
@@ -45,32 +42,37 @@ using namespace ArdourCanvas;
 const TimeAxisViewItem::Visibility TapeAudioRegionView::default_tape_visibility
        = TimeAxisViewItem::Visibility (
                TimeAxisViewItem::ShowNameHighlight |
+               TimeAxisViewItem::ShowNameText |
                TimeAxisViewItem::ShowFrame |
                TimeAxisViewItem::HideFrameRight |
                TimeAxisViewItem::FullWidthNameHighlight);
 
-TapeAudioRegionView::TapeAudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, 
-                                         AudioRegion& r, 
-                                         double spu, 
-                                         Gdk::Color& basic_color)
+TapeAudioRegionView::TapeAudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv,
+                                         boost::shared_ptr<AudioRegion> r,
+                                         double spu,
+                                         Gdk::Color const & basic_color)
 
-       : AudioRegionView (parent, tv, r, spu, basic_color, 
-                          TimeAxisViewItem::Visibility ((r.position() != 0) ? default_tape_visibility : 
+       : AudioRegionView (parent, tv, r, spu, basic_color, false,
+                          TimeAxisViewItem::Visibility ((r->position() != 0) ? default_tape_visibility :
                                                         TimeAxisViewItem::Visibility (default_tape_visibility|TimeAxisViewItem::HideFrameLeft)))
 {
 }
 
 void
-TapeAudioRegionView::init (Gdk::Color& basic_color, bool wfw)
+TapeAudioRegionView::init (Gdk::Color const & basic_color, bool /*wfw*/)
 {
-       AudioRegionView::init(basic_color, wfw);
+       /* never wait for data: always just create the waves, connect once and then
+          we'll update whenever we need to.
+       */
+
+       AudioRegionView::init(basic_color, false);
 
        /* every time the wave data changes and peaks are ready, redraw */
-       
-       for (uint32_t n = 0; n < audio_region().n_channels(); ++n) {
-               audio_region().source(n).PeaksReady.connect (bind (mem_fun(*this, &TapeAudioRegionView::update), n));
+
+       for (uint32_t n = 0; n < audio_region()->n_channels(); ++n) {
+               audio_region()->audio_source(n)->PeaksReady.connect (*this, invalidator (*this), boost::bind (&TapeAudioRegionView::update, this, n), gui_context());
        }
-       
+
 }
 
 TapeAudioRegionView::~TapeAudioRegionView()
@@ -86,16 +88,16 @@ TapeAudioRegionView::update (uint32_t n)
                return;
        }
 
-       ENSURE_GUI_THREAD (bind (mem_fun(*this, &TapeAudioRegionView::update), n));
+       ENSURE_GUI_THREAD (*this, &TapeAudioRegionView::update, n)
 
        /* this triggers a cache invalidation and redraw in the waveview */
 
-       waves[n]->property_data_src() = &_region;
+       waves[n]->property_data_src() = _region.get();
 }
 
 void
 TapeAudioRegionView::set_frame_color ()
 {
        fill_opacity = 255;
-       TimeAxisViewItem::set_frame_color ();
+       AudioRegionView::set_frame_color ();
 }