projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Move object+range button up with the rest of the tool buttons (bringing edit toolbar...
[ardour.git]
/
gtk2_ardour
/
audio_streamview.cc
diff --git
a/gtk2_ardour/audio_streamview.cc
b/gtk2_ardour/audio_streamview.cc
index 1ffb37bb7fcf2d6e945898a1969ed2d6308c761a..8c427f2621b97cf5676a3a0e89383bcdeb499606 100644
(file)
--- a/
gtk2_ardour/audio_streamview.cc
+++ b/
gtk2_ardour/audio_streamview.cc
@@
-24,6
+24,8
@@
#include <gtkmm2ext/gtk_ui.h>
#include <gtkmm2ext/gtk_ui.h>
+#include "pbd/stacktrace.h"
+
#include "ardour/audioplaylist.h"
#include "ardour/audioregion.h"
#include "ardour/audiofilesource.h"
#include "ardour/audioplaylist.h"
#include "ardour/audioregion.h"
#include "ardour/audiofilesource.h"
@@
-32,6
+34,8
@@
#include "ardour/source.h"
#include "ardour/region_factory.h"
#include "ardour/profile.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"
#include "audio_streamview.h"
#include "audio_region_view.h"
@@
-64,7
+68,7
@@
AudioStreamView::AudioStreamView (AudioTimeAxisView& tv)
use_rec_regions = tv.editor().show_waveforms_recording ();
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 ()
}
AudioStreamView::~AudioStreamView ()
@@
-186,8
+190,9
@@
AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
region_views.push_front (region_view);
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);
RegionViewAdded (region_view);
@@
-197,7
+202,7
@@
AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
void
AudioStreamView::remove_region_view (boost::weak_ptr<Region> weak_r)
{
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());
boost::shared_ptr<Region> r (weak_r.lock());
@@
-205,7
+210,9
@@
AudioStreamView::remove_region_view (boost::weak_ptr<Region> weak_r)
return;
}
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;
for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end();) {
CrossfadeViewList::iterator tmp;
@@
-239,76
+246,61
@@
AudioStreamView::undisplay_diskstream ()
}
void
}
void
-AudioStreamView::playlist_
modified_weak (boost::weak_ptr<Diskstream>
ds)
+AudioStreamView::playlist_
layered (boost::weak_ptr<Diskstream> w
ds)
{
{
- 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. */
/* 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();
}
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
}
void
-AudioStreamView::playlist_
changed_weak (boost::weak_ptr<Diskstream>
ds)
+AudioStreamView::playlist_
switched (boost::weak_ptr<Diskstream> w
ds)
{
{
- 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());
boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist>(ds->playlist());
+
if (apl) {
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
}
}
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;
}
return;
}
- add_crossfade (sp);
-}
-
-void
-AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade)
-{
AudioRegionView* lview = 0;
AudioRegionView* rview = 0;
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);
/* first see if we already have a CrossfadeView for this Crossfade */
CrossfadeViewList::iterator i = crossfade_views.find (crossfade);
@@
-342,9
+334,9
@@
AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade)
region_color,
*lview, *rview);
cv->set_valid (true);
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;
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 ();
}
cv->hide ();
}
@@
-354,7
+346,7
@@
AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade)
void
AudioStreamView::remove_crossfade (boost::shared_ptr<Region> r)
{
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);
boost::shared_ptr<Crossfade> xfade = boost::dynamic_pointer_cast<Crossfade> (r);
@@
-457,12
+449,12
@@
AudioStreamView::setup_rec_box ()
{
//cerr << _trackview.name() << " streamview SRB region_views.size() = " << region_views.size() << endl;
{
//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 &&
// 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()) {
_trackview.get_diskstream()->record_enabled()) {
if (_trackview.audio_track()->mode() == Normal && use_rec_regions && rec_regions.size() == rec_rects.size()) {
@@
-470,22
+462,16
@@
AudioStreamView::setup_rec_box ()
SourceList sources;
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);
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());
}
}
}
}
@@
-501,7
+487,7
@@
AudioStreamView::setup_rec_box ()
RegionFactory::create (sources, start, 1, "", 0, Region::DefaultFlags, false)));
assert(region);
region->block_property_changes ();
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));
}
rec_regions.push_back (make_pair(region, (RegionView*)0));
}
@@
-545,19
+531,19
@@
AudioStreamView::setup_rec_box ()
RecBoxInfo recbox;
recbox.rectangle = rec_rect;
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 (
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 &&
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;
!_trackview.get_diskstream()->record_enabled())) {
screen_update_connection.disconnect();
rec_active = false;
@@
-572,13
+558,7
@@
AudioStreamView::setup_rec_box ()
/* disconnect rapid update */
screen_update_connection.disconnect();
/* 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;
rec_updating = false;
rec_active = false;
@@
-622,7
+602,7
@@
AudioStreamView::foreach_crossfadeview (void (CrossfadeView::*pmf)(void))
void
AudioStreamView::rec_peak_range_ready (nframes_t start, nframes_t cnt, boost::weak_ptr<Source> weak_src)
{
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());
boost::shared_ptr<Source> src (weak_src.lock());
@@
-681,7
+661,7
@@
AudioStreamView::update_rec_regions ()
region->freeze ();
region->set_position (_trackview.get_diskstream()->get_capture_start_frame(n), this);
region->set_length (nlen, this);
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 */
if (origlen == 1) {
/* our special initial length */
@@
-706,7
+686,7
@@
AudioStreamView::update_rec_regions ()
region->freeze ();
region->set_position (_trackview.get_diskstream()->get_capture_start_frame(n), this);
region->set_length (nlen, this);
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 */
if (origlen == 1) {
/* our special initial length */