{
}
-int
-AudioStreamView::set_height (gdouble h)
-{
- /* limit the values to something sane-ish */
- if (h < 10.0 || h > 1000.0) {
- return -1;
- }
-
- StreamView::set_height(h);
-
- for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) {
- (*i)->set_height (h);
- }
-
- return 0;
-}
-
int
AudioStreamView::set_samples_per_unit (gdouble spp)
{
}
void
-AudioStreamView::playlist_modified ()
+AudioStreamView::playlist_modified_weak (boost::weak_ptr<Diskstream> ds)
+{
+ boost::shared_ptr<Diskstream> sp (ds.lock());
+ if (!sp) {
+ return;
+ }
+
+ playlist_modified (sp);
+}
+
+void
+AudioStreamView::playlist_modified (boost::shared_ptr<Diskstream> ds)
{
- ENSURE_GUI_THREAD (mem_fun (*this, &AudioStreamView::playlist_modified));
+ /* we do not allow shared_ptr<T> to be bound to slots */
+ ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::playlist_modified_weak), ds));
- StreamView::playlist_modified();
+ StreamView::playlist_modified (ds);
/* make sure xfades are on top and all the regionviews are stacked correctly. */
for (list<CrossfadeView *>::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) {
if ((*i)->crossfade == crossfade) {
- if (!crossfades_visible) {
+ if (!crossfades_visible || layer_display == Stacked) {
(*i)->hide();
} else {
(*i)->show ();
crossfade->Invalidated.connect (mem_fun (*this, &AudioStreamView::remove_crossfade));
crossfade_views.push_back (cv);
- if (!Config->get_xfades_visible() || !crossfades_visible) {
+ if (!Config->get_xfades_visible() || !crossfades_visible || layer_display == Stacked) {
cv->hide ();
}
}
void
-AudioStreamView::remove_crossfade (boost::shared_ptr<Crossfade> xfade)
+AudioStreamView::remove_crossfade (boost::shared_ptr<Region> r)
{
- ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::remove_crossfade), xfade));
+ ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::remove_crossfade), r));
+
+ boost::shared_ptr<Crossfade> xfade = boost::dynamic_pointer_cast<Crossfade> (r);
for (list<CrossfadeView*>::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) {
if ((*i)->crossfade == xfade) {
for (xi = crossfade_views.begin(); xi != crossfade_views.end(); ++xi) {
(*xi)->set_valid (false);
- if ((*xi)->visible()) {
+ if ((*xi)->visible() && layer_display != Stacked) {
(*xi)->show ();
}
}
boost::shared_ptr<AudioDiskstream> ads = boost::dynamic_pointer_cast<AudioDiskstream>(_trackview.get_diskstream());
assert(ads);
- for (uint32_t n=0; n < ads->n_channels().get(DataType::AUDIO); ++n) {
+ for (uint32_t n=0; n < ads->n_channels().n_audio(); ++n) {
boost::shared_ptr<AudioFileSource> src = boost::static_pointer_cast<AudioFileSource> (ads->write_source (n));
if (src) {
sources.push_back (src);
rec_data_ready_map[src] = true;
- if (rec_data_ready_map.size() == _trackview.get_diskstream()->n_channels().get(DataType::AUDIO)) {
+ if (rec_data_ready_map.size() == _trackview.get_diskstream()->n_channels().n_audio()) {
this->update_rec_regions ();
rec_data_ready_map.clear();
}
AudioStreamView::reveal_xfades_involving (AudioRegionView& rv)
{
for (list<CrossfadeView *>::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) {
- if ((*i)->crossfade->involves (rv.audio_region()) && (*i)->visible()) {
+ if ((*i)->crossfade->involves (rv.audio_region()) && (*i)->visible() && layer_display != Stacked) {
(*i)->show ();
}
}
}
}
+void
+AudioStreamView::update_contents_y_position_and_height ()
+{
+ StreamView::update_contents_y_position_and_height ();
+
+ for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) {
+ if (layer_display == Overlaid) {
+ (*i)->show ();
+ (*i)->set_y_position_and_height (0, height);
+ } else {
+ (*i)->hide ();
+ }
+ }
+}