Extend the Add and Subtract ValueNodes to work with gradients.
[synfig.git] / synfig-core / trunk / src / synfig / valuenode_dynamiclist.cpp
index a93a752..a0d3f79 100644 (file)
@@ -1,8 +1,8 @@
 /* === S Y N F I G ========================================================= */
 /*!    \file valuenode_dynamiclist.cpp
-**     \brief Template File
+**     \brief Implementation of the "Dynamic List" valuenode conversion.
 **
-**     $Id: valuenode_dynamiclist.cpp,v 1.1.1.1 2005/01/04 01:23:15 darco Exp $
+**     $Id$
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
@@ -405,7 +405,7 @@ ValueNode_DynamicList::ListEntry::status_at_time(const Time &t)const
        ActivepointList::const_iterator prev_iter;
        bool state(true);
 
-       // New "symetric" state mechanism
+       // New "symmetric" state mechanism
        if(!timing_info.empty())
        {
                if(timing_info.size()==1)
@@ -525,9 +525,17 @@ ValueNode_DynamicList::erase(const ValueNode::Handle &value_node_)
                        if(value_node)
                        {
                                remove_child(value_node.get());
-                               if(get_parent_canvas())
-                                       get_parent_canvas()->signal_value_node_child_removed()(this,value_node);
-                               else if(get_root_canvas() && get_parent_canvas())
+                               // changed to fix bug 1420091 - it seems that when a .sif file containing a bline layer encapsulated inside
+                               // another layer, get_parent_canvas() is false and get_root_canvas() is true, but when we come to erase a
+                               // vertex, both are true.  So the signal is sent to the parent, but the signal wasn't sent to the parent
+                               // when it was added.  This probably isn't the right fix, but it seems to work for now.  Note that the same
+                               // strange "if (X) else if (Y && X)" code is also present in the two previous functions, above.
+
+                               // if(get_parent_canvas())
+                               //      get_parent_canvas()->signal_value_node_child_removed()(this,value_node);
+                               // else if(get_root_canvas() && get_parent_canvas())
+                               //      get_root_canvas()->signal_value_node_child_removed()(this,value_node);
+                               if(get_root_canvas())
                                        get_root_canvas()->signal_value_node_child_removed()(this,value_node);
                        }
                        break;
@@ -613,6 +621,7 @@ bool
 ValueNode_DynamicList::set_link_vfunc(int i,ValueNode::Handle x)
 {
        assert(i>=0);
+
        if((unsigned)i>=list.size())
                return false;
        if(x->get_type()!=container_type)
@@ -625,6 +634,7 @@ ValueNode::LooseHandle
 ValueNode_DynamicList::get_link_vfunc(int i)const
 {
        assert(i>=0);
+
        if((unsigned)i>=list.size())
                return 0;
        return list[i].value_node;
@@ -639,7 +649,8 @@ ValueNode_DynamicList::link_count()const
 String
 ValueNode_DynamicList::link_local_name(int i)const
 {
-       assert(i>=0 && (unsigned)i<list.size());
+       assert(i>=0 && i<link_count());
+
        return etl::strprintf(_("Item %03d"),i+1);
 }
 
@@ -711,6 +722,7 @@ LinkableValueNode*
 ValueNode_DynamicList::create_new()const
 {
        assert(0);
+
        return 0;
 }