X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fardour%2Fregion_factory.cc;h=70ea326230ca0f203d9d564581412dc6b850b740;hb=9e0d03020ff47773f7d1c0414de1c74e6c9e0dac;hp=a6bf4e0870600ebe6fd9ebb382c555a1ff402fa8;hpb=e0aaed6d65f160c328cb8b56d7c6552ee15d65e2;p=ardour.git diff --git a/libs/ardour/region_factory.cc b/libs/ardour/region_factory.cc index a6bf4e0870..70ea326230 100644 --- a/libs/ardour/region_factory.cc +++ b/libs/ardour/region_factory.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2000-2006 Paul Davis + Copyright (C) 2000-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 @@ -18,6 +18,7 @@ */ #include "pbd/error.h" +#include "pbd/boost_debug.h" #include "ardour/session.h" @@ -33,11 +34,11 @@ using namespace ARDOUR; using namespace PBD; -sigc::signal > RegionFactory::CheckNewRegion; +PBD::Signal1 > RegionFactory::CheckNewRegion; boost::shared_ptr -RegionFactory::create (boost::shared_ptr region, nframes_t start, - nframes_t length, const std::string& name, +RegionFactory::create (boost::shared_ptr region, nframes_t start, + nframes_t length, const std::string& name, layer_t layer, Region::Flag flags, bool announce) { boost::shared_ptr other_a; @@ -45,8 +46,10 @@ RegionFactory::create (boost::shared_ptr region, nframes_t start, if ((other_a = boost::dynamic_pointer_cast(region)) != 0) { AudioRegion* ar = new AudioRegion (other_a, start, length, name, layer, flags); + boost_debug_shared_ptr_mark_interesting (ar, "Region"); boost::shared_ptr arp (ar); boost::shared_ptr ret (boost::static_pointer_cast (arp)); + ret->unlock_property_changes (); if (announce) { CheckNewRegion (ret); } @@ -55,6 +58,7 @@ RegionFactory::create (boost::shared_ptr region, nframes_t start, MidiRegion* ar = new MidiRegion (other_m, start, length, name, layer, flags); boost::shared_ptr arp (ar); boost::shared_ptr ret (boost::static_pointer_cast (arp)); + ret->unlock_property_changes (); if (announce) { CheckNewRegion (ret); } @@ -74,11 +78,15 @@ RegionFactory::create (boost::shared_ptr region) boost::shared_ptr mr; if ((ar = boost::dynamic_pointer_cast(region)) != 0) { - boost::shared_ptr ret (new AudioRegion (ar)); + AudioRegion* arn = new AudioRegion (ar); + boost_debug_shared_ptr_mark_interesting (arn, "Region"); + boost::shared_ptr ret (arn); + ret->unlock_property_changes (); /* pure copy constructor - no CheckNewRegion emitted */ return ret; } else if ((mr = boost::dynamic_pointer_cast(region)) != 0) { boost::shared_ptr ret (new MidiRegion (mr)); + ret->unlock_property_changes (); /* pure copy constructor - no CheckNewRegion emitted */ return ret; } else { @@ -90,8 +98,8 @@ RegionFactory::create (boost::shared_ptr region) } boost::shared_ptr -RegionFactory::create (boost::shared_ptr region, nframes_t start, - nframes_t length, const std::string& name, +RegionFactory::create (boost::shared_ptr region, nframes_t start, + nframes_t length, const std::string& name, layer_t layer, Region::Flag flags, bool announce) { return create (boost::static_pointer_cast (region), start, length, name, layer, flags, announce); @@ -110,8 +118,10 @@ RegionFactory::create (boost::shared_ptr region, const SourceList& srcs, if ((other = boost::dynamic_pointer_cast(region)) != 0) { AudioRegion* ar = new AudioRegion (other, srcs, srcs.front()->length(srcs.front()->timeline_position()), name, layer, flags); + boost_debug_shared_ptr_mark_interesting (ar, "Region"); boost::shared_ptr arp (ar); boost::shared_ptr ret (boost::static_pointer_cast (arp)); + ret->unlock_property_changes (); if (announce) { CheckNewRegion (ret); } @@ -130,13 +140,14 @@ RegionFactory::create (Session& session, XMLNode& node, bool yn) boost::shared_ptr r = session.XMLRegionFactory (node, yn); if (r) { + r->unlock_property_changes (); CheckNewRegion (r); } return r; } - -boost::shared_ptr + +boost::shared_ptr RegionFactory::create (const SourceList& srcs, nframes_t start, nframes_t length, const string& name, layer_t layer, Region::Flag flags, bool announce) { if (srcs.empty()) { @@ -144,20 +155,23 @@ RegionFactory::create (const SourceList& srcs, nframes_t start, nframes_t length } if (srcs[0]->type() == DataType::AUDIO) { - + AudioRegion* ar = new AudioRegion (srcs, start, length, name, layer, flags); + boost_debug_shared_ptr_mark_interesting (ar, "Region"); boost::shared_ptr arp (ar); boost::shared_ptr ret (boost::static_pointer_cast (arp)); + ret->unlock_property_changes (); if (announce) { CheckNewRegion (ret); } return ret; } else if (srcs[0]->type() == DataType::MIDI) { - + MidiRegion* ar = new MidiRegion (srcs, start, length, name, layer, flags); boost::shared_ptr mrp (ar); boost::shared_ptr ret (boost::static_pointer_cast (mrp)); + ret->unlock_property_changes (); if (announce) { CheckNewRegion (ret); } @@ -166,9 +180,9 @@ RegionFactory::create (const SourceList& srcs, nframes_t start, nframes_t length } return boost::shared_ptr (); -} +} -boost::shared_ptr +boost::shared_ptr RegionFactory::create (SourceList& srcs, const XMLNode& node) { if (srcs.empty()) { @@ -176,11 +190,15 @@ RegionFactory::create (SourceList& srcs, const XMLNode& node) } if (srcs[0]->type() == DataType::AUDIO) { - boost::shared_ptr ret (new AudioRegion (srcs, node)); + AudioRegion* ar = new AudioRegion (srcs, node); + boost_debug_shared_ptr_mark_interesting (ar, "Region"); + boost::shared_ptr ret (ar); + ret->unlock_property_changes (); CheckNewRegion (ret); return ret; } else if (srcs[0]->type() == DataType::MIDI) { boost::shared_ptr ret (new MidiRegion (srcs, node)); + ret->unlock_property_changes (); CheckNewRegion (ret); return ret; } @@ -188,20 +206,24 @@ RegionFactory::create (SourceList& srcs, const XMLNode& node) return boost::shared_ptr (); } -boost::shared_ptr +boost::shared_ptr RegionFactory::create (boost::shared_ptr src, nframes_t start, nframes_t length, const string& name, layer_t layer, Region::Flag flags, bool announce) { boost::shared_ptr as; boost::shared_ptr ms; if ((as = boost::dynamic_pointer_cast(src)) != 0) { - boost::shared_ptr ret (new AudioRegion (as, start, length, name, layer, flags)); + AudioRegion* ar = new AudioRegion (as, start, length, name, layer, flags); + boost_debug_shared_ptr_mark_interesting (ar, "Region"); + boost::shared_ptr ret (ar); + ret->unlock_property_changes (); if (announce) { CheckNewRegion (ret); } return ret; } else if ((ms = boost::dynamic_pointer_cast(src)) != 0) { boost::shared_ptr ret (new MidiRegion (ms, start, length, name, layer, flags)); + ret->unlock_property_changes (); if (announce) { CheckNewRegion (ret); }