#include <gtkmm2ext/gtk_ui.h>
+#include "pbd/stacktrace.h"
+
#include "ardour/audioplaylist.h"
#include "ardour/audioregion.h"
#include "ardour/audiofilesource.h"
#include "ardour/source.h"
#include "ardour/region_factory.h"
#include "ardour/profile.h"
+#include "ardour/rc_configuration.h"
+#include "ardour/session.h"
#include "audio_streamview.h"
#include "audio_region_view.h"
use_rec_regions = tv.editor().show_waveforms_recording ();
- Config->ParameterChanged.connect (sigc::mem_fun (*this, &AudioStreamView::parameter_changed));
+ Config->ParameterChanged.connect (*this, ui_bind (&AudioStreamView::parameter_changed, this, _1), gui_context());
}
AudioStreamView::~AudioStreamView ()
region_views.push_front (region_view);
- /* catch regionview going away */
- r->GoingAway.connect (bind (mem_fun (*this, &AudioStreamView::remove_region_view), boost::weak_ptr<Region> (r)));
+ /* catch region going away */
+
+ r->DropReferences.connect (*this, boost::bind (&AudioStreamView::remove_region_view, this, boost::weak_ptr<Region> (r)), gui_context());
RegionViewAdded (region_view);
void
AudioStreamView::remove_region_view (boost::weak_ptr<Region> weak_r)
{
- ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::remove_region_view), weak_r));
+ ENSURE_GUI_THREAD (*this, &AudioStreamView::remove_region_view, weak_r);
boost::shared_ptr<Region> r (weak_r.lock());
return;
}
- if (!_trackview.session().deletion_in_progress()) {
+ cerr << "a region went way, it appears to be ours (" << this << ")\n";
+
+ if (!_trackview.session()->deletion_in_progress()) {
for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end();) {
CrossfadeViewList::iterator tmp;
}
void
-AudioStreamView::playlist_modified_weak (boost::weak_ptr<Diskstream> ds)
+AudioStreamView::playlist_layered (boost::weak_ptr<Diskstream> wds)
{
- boost::shared_ptr<Diskstream> sp (ds.lock());
- if (sp) {
- playlist_modified (sp);
+ boost::shared_ptr<Diskstream> ds (wds.lock());
+
+ if (!ds) {
+ return;
}
-}
-void
-AudioStreamView::playlist_modified (boost::shared_ptr<Diskstream> ds)
-{
- /* we do not allow shared_ptr<T> to be bound to slots */
- ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::playlist_modified_weak), ds));
+ cerr << "AS, call SV::modified @ " << get_microseconds() << endl;
+
+ StreamView::playlist_layered (wds);
- StreamView::playlist_modified (ds);
+ cerr << "AS, done with SV::modified @ " << get_microseconds() << endl;
/* make sure xfades are on top and all the regionviews are stacked correctly. */
+ cerr << "AS, raise xfades @ " << get_microseconds() << endl;
for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) {
i->second->get_canvas_group()->raise_to_top();
}
+ cerr << "AS, done with xfades @ " << get_microseconds() << endl;
}
void
-AudioStreamView::playlist_changed_weak (boost::weak_ptr<Diskstream> ds)
+AudioStreamView::playlist_switched (boost::weak_ptr<Diskstream> wds)
{
- boost::shared_ptr<Diskstream> sp (ds.lock());
- if (sp) {
- playlist_changed (sp);
+ boost::shared_ptr<Diskstream> ds (wds.lock());
+
+ if (!ds) {
+ return;
}
-}
-void
-AudioStreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
-{
- ENSURE_GUI_THREAD (bind (
- mem_fun (*this, &AudioStreamView::playlist_changed_weak),
- boost::weak_ptr<Diskstream> (ds)));
+ playlist_connections.drop_connections ();
- StreamView::playlist_changed(ds);
+ StreamView::playlist_switched (ds);
boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist>(ds->playlist());
+
if (apl) {
- playlist_connections.push_back (apl->NewCrossfade.connect (
- mem_fun (*this, &AudioStreamView::add_crossfade)));
+ apl->NewCrossfade.connect (playlist_connections, ui_bind (&AudioStreamView::add_crossfade, this, _1), gui_context());
}
}
void
-AudioStreamView::add_crossfade_weak (boost::weak_ptr<Crossfade> crossfade)
+AudioStreamView::add_crossfade (boost::weak_ptr<Crossfade> wc)
{
- boost::shared_ptr<Crossfade> sp (crossfade.lock());
+ boost::shared_ptr<Crossfade> crossfade (wc.lock());
- if (!sp) {
+ if (!crossfade) {
return;
}
- add_crossfade (sp);
-}
-
-void
-AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade)
-{
AudioRegionView* lview = 0;
AudioRegionView* rview = 0;
- /* we do not allow shared_ptr<T> to be bound to slots */
-
- ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::add_crossfade_weak), boost::weak_ptr<Crossfade> (crossfade)));
-
/* first see if we already have a CrossfadeView for this Crossfade */
CrossfadeViewList::iterator i = crossfade_views.find (crossfade);
region_color,
*lview, *rview);
cv->set_valid (true);
- crossfade->Invalidated.connect (mem_fun (*this, &AudioStreamView::remove_crossfade));
+ crossfade->Invalidated.connect (*this, ui_bind (&AudioStreamView::remove_crossfade, this, _1), gui_context());
crossfade_views[cv->crossfade] = cv;
- if (!_trackview.session().config.get_xfades_visible() || !crossfades_visible) {
+ if (!_trackview.session()->config.get_xfades_visible() || !crossfades_visible) {
cv->hide ();
}
void
AudioStreamView::remove_crossfade (boost::shared_ptr<Region> r)
{
- ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::remove_crossfade), r));
+ ENSURE_GUI_THREAD (*this, &AudioStreamView::remove_crossfade, r)
boost::shared_ptr<Crossfade> xfade = boost::dynamic_pointer_cast<Crossfade> (r);
{
//cerr << _trackview.name() << " streamview SRB region_views.size() = " << region_views.size() << endl;
- if (_trackview.session().transport_rolling()) {
+ if (_trackview.session()->transport_rolling()) {
// cerr << "\trolling\n";
if (!rec_active &&
- _trackview.session().record_status() == Session::Recording &&
+ _trackview.session()->record_status() == Session::Recording &&
_trackview.get_diskstream()->record_enabled()) {
if (_trackview.audio_track()->mode() == Normal && use_rec_regions && rec_regions.size() == rec_rects.size()) {
SourceList sources;
- for (list<sigc::connection>::iterator prc = rec_data_ready_connections.begin();
- prc != rec_data_ready_connections.end(); ++prc) {
- (*prc).disconnect();
- }
- rec_data_ready_connections.clear();
-
+ rec_data_ready_connections.drop_connections ();
boost::shared_ptr<AudioDiskstream> ads = _trackview.audio_track()->audio_diskstream();
for (uint32_t n=0; n < ads->n_channels().n_audio(); ++n) {
boost::shared_ptr<AudioFileSource> src = ads->write_source (n);
if (src) {
sources.push_back (src);
-
- rec_data_ready_connections.push_back (src->PeakRangeReady.connect (bind
- (mem_fun (*this, &AudioStreamView::rec_peak_range_ready),
- boost::weak_ptr<Source>(src))));
+ src->PeakRangeReady.connect (rec_data_ready_connections,
+ ui_bind (&AudioStreamView::rec_peak_range_ready, this, _1, _2, boost::weak_ptr<Source>(src)),
+ gui_context());
}
}
RegionFactory::create (sources, start, 1, "", 0, Region::DefaultFlags, false)));
assert(region);
region->block_property_changes ();
- region->set_position (_trackview.session().transport_frame(), this);
+ region->set_position (_trackview.session()->transport_frame(), this);
rec_regions.push_back (make_pair(region, (RegionView*)0));
}
RecBoxInfo recbox;
recbox.rectangle = rec_rect;
- recbox.start = _trackview.session().transport_frame();
+ recbox.start = _trackview.session()->transport_frame();
recbox.length = 0;
rec_rects.push_back (recbox);
screen_update_connection.disconnect();
screen_update_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect (
- mem_fun (*this, &AudioStreamView::update_rec_box));
+ sigc::mem_fun (*this, &AudioStreamView::update_rec_box));
rec_updating = true;
rec_active = true;
} else if (rec_active &&
- (_trackview.session().record_status() != Session::Recording ||
+ (_trackview.session()->record_status() != Session::Recording ||
!_trackview.get_diskstream()->record_enabled())) {
screen_update_connection.disconnect();
rec_active = false;
/* disconnect rapid update */
screen_update_connection.disconnect();
-
- for (list<sigc::connection>::iterator prc = rec_data_ready_connections.begin();
- prc != rec_data_ready_connections.end(); ++prc) {
- (*prc).disconnect();
- }
- rec_data_ready_connections.clear();
-
+ rec_data_ready_connections.drop_connections ();
rec_updating = false;
rec_active = false;
void
AudioStreamView::rec_peak_range_ready (nframes_t start, nframes_t cnt, boost::weak_ptr<Source> weak_src)
{
- ENSURE_GUI_THREAD(bind (mem_fun (*this, &AudioStreamView::rec_peak_range_ready), start, cnt, weak_src));
+ ENSURE_GUI_THREAD (*this, &AudioStreamView::rec_peak_range_ready, start, cnt, weak_src)
boost::shared_ptr<Source> src (weak_src.lock());
region->freeze ();
region->set_position (_trackview.get_diskstream()->get_capture_start_frame(n), this);
region->set_length (nlen, this);
- region->thaw ("updated");
+ region->thaw ();
if (origlen == 1) {
/* our special initial length */
region->freeze ();
region->set_position (_trackview.get_diskstream()->get_capture_start_frame(n), this);
region->set_length (nlen, this);
- region->thaw ("updated");
+ region->thaw ();
if (origlen == 1) {
/* our special initial length */