Load and save canvas now understand load and save static option for real value base.
[synfig.git] / synfig-core / src / synfig / loadcanvas.cpp
index 3da37e9..37c5d1d 100644 (file)
@@ -8,6 +8,7 @@
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
 **     Copyright (c) 2007, 2008 Chris Moore
 **     Copyright (c) 2009 Carlos A. Sosa Navarro
+**     Copyright (c) 2009 Nikita Kitaev
 **
 **     This package is free software; you can redistribute it and/or
 **     modify it under the terms of the GNU General Public License as
@@ -43,7 +44,6 @@
 #include "layer_pastecanvas.h"
 #include "loadcanvas.h"
 #include "valuenode.h"
-#include "valuenode_subtract.h"
 #include "valuenode_animated.h"
 #include "valuenode_composite.h"
 #include "valuenode_const.h"
@@ -824,11 +824,35 @@ CanvasParser::parse_angle(xmlpp::Element *element)
        return Angle::deg(atof(val.c_str()));
 }
 
+bool
+CanvasParser::parse_static(xmlpp::Element *element)
+{
+       if(!element->get_attribute("static"))
+               return false;
+
+       string val=element->get_attribute("static")->get_value();
+
+       if(val=="true" || val=="1")
+               return true;
+       if(val=="false" || val=="0")
+               return false;
+
+       error(element,strprintf(_("Bad value \"%s\" in <%s>"),val.c_str(),"bool"));
+
+       return false;
+}
+
+
 ValueBase
 CanvasParser::parse_value(xmlpp::Element *element,Canvas::Handle canvas)
 {
        if(element->get_name()=="real")
-               return parse_real(element);
+       {
+               ValueBase ret;
+               ret.set(parse_real(element));
+               ret.set_static(parse_static(element));
+               return ret;
+       }
        else
        if(element->get_name()=="time")
                return parse_time(element,canvas);
@@ -1340,8 +1364,8 @@ CanvasParser::parse_linkable_value_node(xmlpp::Element *element,Canvas::Handle c
                if (version == "0.1" || version == "0.2" || version == "0.3")
                {
                        handle<LinkableValueNode> scale_value_node=LinkableValueNode::create("scale",type);
-                       scale_value_node->set_link(scale_value_node->get_link_index_from_name("link"), value_node);
-                       scale_value_node->set_link(scale_value_node->get_link_index_from_name("scalar"), ValueNode_Const::create(Real(0.5)));
+                       scale_value_node->set_link("link", value_node);
+                       scale_value_node->set_link("scalar", ValueNode_Const::create(Real(0.5)));
                        value_node = scale_value_node;
                }
        }