Remove spaces and tabs at end of lines.
[synfig.git] / synfig-core / trunk / src / synfig / loadcanvas.cpp
index 102b744..433eeb0 100644 (file)
@@ -1075,7 +1075,7 @@ CanvasParser::parse_animated(xmlpp::Element *element,Canvas::Handle canvas)
        // when loading a version 0.1 canvas, modify constant angle
        // waypoints to that they are within 180 degrees of the previous
        // waypoint's value
-       if (type == ValueBase::TYPE_ANGLE) 
+       if (type == ValueBase::TYPE_ANGLE)
        {
                if (canvas->get_version() == "0.1")
                {
@@ -1319,6 +1319,12 @@ CanvasParser::parse_linkable_value_node(xmlpp::Element *element,Canvas::Handle c
                                value_node->link_name(i) == "loop")
                                continue;
 
+                       // 'loop' was added while canvas version 0.6 was in use; the 'random' node was added back when 0.1 was in use
+                       if ((version == "0.1" || version == "0.2" || version == "0.3" || version == "0.4" || version == "0.5" || version == "0.6") &&
+                               element->get_name() == "random" &&
+                               value_node->link_name(i) == "loop")
+                               continue;
+
                        error(element, strprintf(_("<%s> is missing link %d (%s)"),
                                                                         element->get_name().c_str(),
                                                                         i,
@@ -2120,6 +2126,32 @@ CanvasParser::parse_canvas(xmlpp::Element *element,Canvas::Handle parent,bool in
        return canvas;
 }
 
+void
+CanvasParser::register_canvas_in_map(Canvas::Handle canvas, String as)
+{
+       get_open_canvas_map()[etl::absolute_path(as)]=canvas;
+       canvas->signal_deleted().connect(sigc::bind(sigc::ptr_fun(_remove_from_open_canvas_map),canvas.get()));
+       canvas->signal_file_name_changed().connect(sigc::bind(sigc::ptr_fun(_canvas_file_name_changed),canvas.get()));
+}
+
+#ifdef _DEBUG
+void
+CanvasParser::show_canvas_map(String file, int line, String text)
+{
+       return;
+       printf("  .-----\n  |  %s:%d %s\n", file.c_str(), line, text.c_str());
+       std::map<synfig::String, etl::loose_handle<Canvas> > canvas_map(synfig::get_open_canvas_map());
+       std::map<synfig::String, etl::loose_handle<Canvas> >::iterator iter;
+       for (iter = canvas_map.begin(); iter != canvas_map.end(); iter++)
+       {
+               synfig::String first(iter->first);
+               etl::loose_handle<Canvas> second(iter->second);
+               printf("  |    %40s : %lx (%d)\n", first.c_str(), ulong(&*second), second->count());
+       }
+       printf("  `-----\n\n");
+}
+#endif // _DEBUG
+
 Canvas::Handle
 CanvasParser::parse_from_file_as(const String &file_,const String &as_,String &errors)
 {
@@ -2139,9 +2171,7 @@ CanvasParser::parse_from_file_as(const String &file_,const String &as_,String &e
                {
                        Canvas::Handle canvas(parse_canvas(parser.get_document()->get_root_node(),0,false,as));
                        if (!canvas) return canvas;
-                       get_open_canvas_map()[etl::absolute_path(as)]=canvas;
-                       canvas->signal_deleted().connect(sigc::bind(sigc::ptr_fun(_remove_from_open_canvas_map),canvas.get()));
-                       canvas->signal_file_name_changed().connect(sigc::bind(sigc::ptr_fun(_canvas_file_name_changed),canvas.get()));
+                       register_canvas_in_map(canvas, as);
 
                        const ValueNodeList& value_node_list(canvas->value_node_list());
 
@@ -2167,7 +2197,6 @@ CanvasParser::parse_from_file_as(const String &file_,const String &as_,String &e
        catch(Exception::IDAlreadyExists) { synfig::error("IDAlreadyExists Thrown"); }
        catch(xmlpp::internal_error x)
        {
-               printf("caught internal error\n");
                if (!strcmp(x.what(), "Couldn't create parsing context"))
                        throw runtime_error(String("  * ") + _("Can't open file") + " \"" + file + "\"");
                throw;