**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-** Copyright (c) 2007 Chris Moore
+** Copyright (c) 2007, 2008 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
using namespace etl;
using namespace std;
-namespace synfig { extern Canvas::Handle open_canvas(const String &filename); };
+namespace synfig { extern Canvas::Handle open_canvas(const String &filename, String &errors); };
/* === M A C R O S ========================================================= */
return id;
}
-
ValueNode::Handle
Canvas::find_value_node(const String &id)
{
x->set_id("");
}
-
etl::handle<Canvas>
Canvas::surefind_canvas(const String &id)
{
external_canvas=externals_[file_name];
else
{
+ String errors;
if(is_absolute_path(file_name))
- external_canvas=open_canvas(file_name);
+ external_canvas=open_canvas(file_name, errors);
else
- external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name);
+ external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name, errors);
if(!external_canvas)
- throw Exception::FileNotFound(file_name);
+ throw runtime_error(errors);
externals_[file_name]=external_canvas;
}
Canvas::ConstHandle
Canvas::find_canvas(const String &id)const
{
- if(is_inline() && parent_)return parent_->find_canvas(id);
+ if(is_inline() && parent_)
+ return parent_->find_canvas(id);
if(id.empty())
return this;
external_canvas=externals_[file_name];
else
{
+ String errors;
if(is_absolute_path(file_name))
- external_canvas=open_canvas(file_name);
+ external_canvas=open_canvas(file_name, errors);
else
- external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name);
+ external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name, errors);
if(!external_canvas)
- throw Exception::FileNotFound(file_name);
+ throw runtime_error(errors);
externals_[file_name]=external_canvas;
}
// If the first character is the separator, then
// this references the root canvas.
- if(id.find_first_of(':')==0)
+ if(id[0]==':')
return get_root()->find_canvas(string(id,1));
// Now we know that the requested Canvas is in a child
return child_canvas->find_canvas(string(id,id.find_first_of(':')+1));
}
-
Canvas::Handle
Canvas::create()
{
x->set_canvas(this);
-
add_child(x.get());
-
LooseHandle correct_canvas(this);
//while(correct_canvas->is_inline())correct_canvas=correct_canvas->parent();
Layer::LooseHandle loose_layer(x);
&Canvas::remove_group_pair),
loose_layer))));
-
if(!x->get_group().empty())
add_group_pair(x->get_group(),x);
-
changed();
}
// it was failing to ascertain the absolute pathname of the imported image, since it needs the pathname
// of the canvas to get that, which is stored in the parent canvas
canvas->parent_=parent();
+ canvas->rend_desc() = rend_desc();
//canvas->set_inline(parent());
}
return dirname(file_name_);
}
-
String
Canvas::get_meta_data(const String& key)const
{