summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2006-08-25 01:34:33 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2006-08-25 01:34:33 +0000
commit3d1c0d729a4bf8431e6c8e3addb3ee4388477329 (patch)
treee9e0c23a165a131cf5aedfbc1e0a1ee523957b02
parent1b8af985b575d9bcae2b331053c7acf85a9815ff (diff)
new file
git-svn-id: svn://localhost/ardour2/trunk@854 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--libs/ardour/region_factory.cc123
1 files changed, 123 insertions, 0 deletions
diff --git a/libs/ardour/region_factory.cc b/libs/ardour/region_factory.cc
new file mode 100644
index 0000000000..ffb4441d3e
--- /dev/null
+++ b/libs/ardour/region_factory.cc
@@ -0,0 +1,123 @@
+/*
+ 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
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id: playlist_factory.cc 629 2006-06-21 23:01:03Z paul $
+*/
+
+#include <pbd/error.h>
+
+#include <ardour/session.h>
+
+#include <ardour/region_factory.h>
+#include <ardour/region.h>
+#include <ardour/audioregion.h>
+#include <ardour/audiosource.h>
+
+#include "i18n.h"
+
+using namespace ARDOUR;
+using namespace PBD;
+
+sigc::signal<void,boost::shared_ptr<Region> > RegionFactory::CheckNewRegion;
+
+boost::shared_ptr<Region>
+RegionFactory::create (boost::shared_ptr<Region> region, jack_nframes_t start,
+ jack_nframes_t length, std::string name,
+ layer_t layer, Region::Flag flags, bool announce)
+{
+ boost::shared_ptr<AudioRegion> other;
+
+ if ((other = boost::dynamic_pointer_cast<AudioRegion>(region)) != 0) {
+ AudioRegion* ar = new AudioRegion (other, start, length, name, layer, flags);
+ boost::shared_ptr<AudioRegion> arp (ar);
+ boost::shared_ptr<Region> ret (boost::static_pointer_cast<Region> (arp));
+ if (announce) {
+ CheckNewRegion (ret);
+ }
+ return ret;
+ } else {
+ fatal << _("programming error: RegionFactory::create() called with unknown Region type")
+ << endmsg;
+ /*NOTREACHED*/
+ return boost::shared_ptr<Region>();
+ }
+}
+
+boost::shared_ptr<Region>
+RegionFactory::create (boost::shared_ptr<Region> region)
+{
+ boost::shared_ptr<AudioRegion> other;
+
+ if ((other = boost::dynamic_pointer_cast<AudioRegion>(region)) != 0) {
+ boost::shared_ptr<Region> ret (new AudioRegion (other));
+ /* pure copy constructor - no CheckNewRegion emitted */
+ return ret;
+ } else {
+ fatal << _("programming error: RegionFactory::create() called with unknown Region type")
+ << endmsg;
+ /*NOTREACHED*/
+ return boost::shared_ptr<Region>();
+ }
+}
+
+boost::shared_ptr<Region>
+RegionFactory::create (Session& session, XMLNode& node, bool yn)
+{
+ boost::shared_ptr<Region> r = session.XMLRegionFactory (node, yn);
+ CheckNewRegion (r);
+ return r;
+}
+
+boost::shared_ptr<Region>
+RegionFactory::create (SourceList& srcs, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t layer, Region::Flag flags, bool announce)
+{
+ AudioRegion* ar = new AudioRegion (srcs, start, length, name, layer, flags);
+ boost::shared_ptr<AudioRegion> arp (ar);
+ boost::shared_ptr<Region> ret (boost::static_pointer_cast<Region> (arp));
+ if (announce) {
+ CheckNewRegion (ret);
+ }
+ return ret;
+}
+
+boost::shared_ptr<Region>
+RegionFactory::create (SourceList& srcs, const XMLNode& node)
+{
+ if (srcs.empty()) {
+ return boost::shared_ptr<Region>();
+ }
+
+ boost::shared_ptr<Region> ret (new AudioRegion (srcs, node));
+ CheckNewRegion (ret);
+ return ret;
+}
+
+boost::shared_ptr<Region>
+RegionFactory::create (Source& src, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t layer, Region::Flag flags, bool announce)
+{
+ AudioSource* as;
+
+ if ((as = dynamic_cast<AudioSource*>(&src)) != 0) {
+ boost::shared_ptr<Region> ret (new AudioRegion (*as, start, length, name, layer, flags));
+ if (announce) {
+ CheckNewRegion (ret);
+ }
+ return ret;
+ }
+
+ return boost::shared_ptr<Region>();
+}