Don't show "file not found" error messages whenever find_canvas() and surefind_canvas...
[synfig.git] / synfig-core / trunk / src / synfig / canvas.cpp
index c50b901..2997ff4 100644 (file)
@@ -47,7 +47,7 @@ using namespace synfig;
 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 ========================================================= */
 
@@ -369,7 +369,6 @@ Canvas::_get_relative_id(etl::loose_handle<const Canvas> x)const
        return id;
 }
 
-
 ValueNode::Handle
 Canvas::find_value_node(const String &id)
 {
@@ -507,7 +506,6 @@ Canvas::remove_value_node(ValueNode::Handle x)
        x->set_id("");
 }
 
-
 etl::handle<Canvas>
 Canvas::surefind_canvas(const String &id)
 {
@@ -539,13 +537,14 @@ 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;
                }
 
@@ -597,7 +596,8 @@ Canvas::find_canvas(const String &id)
 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;
@@ -624,13 +624,14 @@ Canvas::find_canvas(const String &id)const
                        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;
                }
 
@@ -654,7 +655,7 @@ Canvas::find_canvas(const String &id)const
 
        // 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
@@ -668,7 +669,6 @@ Canvas::find_canvas(const String &id)const
        return child_canvas->find_canvas(string(id,id.find_first_of(':')+1));
 }
 
-
 Canvas::Handle
 Canvas::create()
 {
@@ -706,10 +706,8 @@ Canvas::insert(iterator iter,etl::handle<Layer> x)
 
        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);
@@ -731,11 +729,9 @@ Canvas::insert(iterator iter,etl::handle<Layer> x)
                                                                   &Canvas::remove_group_pair),
                                                           loose_layer))));
 
-
        if(!x->get_group().empty())
                add_group_pair(x->get_group(),x);
 
-
        changed();
 }
 
@@ -795,6 +791,7 @@ Canvas::clone(const GUID& deriv_guid)const
                // 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());
        }
 
@@ -986,7 +983,6 @@ Canvas::get_file_path()const
        return dirname(file_name_);
 }
 
-
 String
 Canvas::get_meta_data(const String& key)const
 {