diff options
Diffstat (limited to 'libs/canvas/item_factory.cc')
-rw-r--r-- | libs/canvas/item_factory.cc | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/libs/canvas/item_factory.cc b/libs/canvas/item_factory.cc new file mode 100644 index 0000000000..0371cb1d82 --- /dev/null +++ b/libs/canvas/item_factory.cc @@ -0,0 +1,43 @@ +#include "pbd/xml++.h" +#include "canvas/item_factory.h" +#include "canvas/group.h" +#include "canvas/line.h" +#include "canvas/rectangle.h" +#include "canvas/poly_line.h" +#include "canvas/polygon.h" +#include "canvas/pixbuf.h" +#include "canvas/wave_view.h" +#include "canvas/text.h" +#include "canvas/line_set.h" + +using namespace std; +using namespace ArdourCanvas; + +Item* +ArdourCanvas::create_item (Group* parent, XMLNode const * node) +{ + Item* item = 0; + if (node->name() == "Group") { + item = new Group (parent); + } else if (node->name() == "Line") { + item = new Line (parent); + } else if (node->name() == "Rectangle") { + item = new Rectangle (parent); + } else if (node->name() == "PolyLine") { + item = new PolyLine (parent); + } else if (node->name() == "Polygon") { + item = new Polygon (parent); + } else if (node->name() == "Pixbuf") { + item = new Pixbuf (parent); + } else if (node->name() == "WaveView") { + item = new WaveView (parent, boost::shared_ptr<ARDOUR::AudioRegion> ()); + } else if (node->name() == "Text") { + item = new Text (parent); + } else if (node->name() == "LineSet") { + item = new LineSet (parent); + } + + assert (item); + item->set_state (node); + return item; +} |