Remove .gitignore do nothing is ignored.
[synfig.git] / synfig-core / trunk / src / synfig / valuenode_dynamiclist.cpp
index 88e82cb..a8c253a 100644 (file)
@@ -1,11 +1,12 @@
 /* === 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
+**     Copyright (c) 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
@@ -405,7 +406,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)
@@ -576,6 +577,12 @@ ValueNode_DynamicList::create_from(const ValueBase &value)
 
        ValueNode_DynamicList* value_node(new ValueNode_DynamicList(value_list.front().get_type()));
 
+       // when creating a list of vectors, start it off being looped.
+       // I think the only time this is used if for creating polygons,
+       // and we want them to be looped by default
+       if (value_node->get_contained_type() == ValueBase::TYPE_VECTOR)
+               value_node->set_loop(true);
+
        for(iter=value_list.begin();iter!=value_list.end();++iter)
        {
                ValueNode::Handle item(ValueNode_Const::create(*iter));
@@ -588,6 +595,9 @@ ValueNode_DynamicList::create_from(const ValueBase &value)
 ValueBase
 ValueNode_DynamicList::operator()(Time t)const
 {
+       if (getenv("SYNFIG_DEBUG_VALUENODE_OPERATORS"))
+               printf("%s:%d operator()\n", __FILE__, __LINE__);
+
        std::vector<ValueBase> ret_list;
        std::vector<ListEntry>::const_iterator iter;
 
@@ -621,6 +631,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)
@@ -633,6 +644,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;
@@ -647,7 +659,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);
 }
 
@@ -656,7 +669,7 @@ ValueNode_DynamicList::clone(const GUID& deriv_guid)const
 {
        { ValueNode* x(find_value_node(get_guid()^deriv_guid).get()); if(x)return x; }
 
-       ValueNode_DynamicList* ret=new ValueNode_DynamicList(container_type);
+       ValueNode_DynamicList* ret=dynamic_cast<ValueNode_DynamicList*>(create_new());
        ret->set_guid(get_guid()^deriv_guid);
 
        std::vector<ListEntry>::const_iterator iter;
@@ -670,7 +683,7 @@ ValueNode_DynamicList::clone(const GUID& deriv_guid)const
                        ListEntry list_entry(*iter);
                        //list_entry.value_node=find_value_node(iter->value_node->get_guid()^deriv_guid).get();
                        //if(!list_entry.value_node)
-                               list_entry.value_node=iter->value_node->clone(deriv_guid);
+                       list_entry.value_node=iter->value_node->clone(deriv_guid);
                        ret->add(list_entry);
                        //ret->list.back().value_node=iter->value_node.clone();
                }
@@ -709,6 +722,13 @@ ValueNode_DynamicList::check_type(ValueBase::Type type)
        return type==ValueBase::TYPE_LIST;
 }
 
+void
+ValueNode_DynamicList::set_member_canvas(etl::loose_handle<Canvas> canvas)
+{
+       for (vector<ListEntry>::iterator iter = list.begin(); iter != list.end(); iter++)
+               iter->value_node->set_parent_canvas(canvas);
+}
+
 ValueBase::Type
 ValueNode_DynamicList::get_contained_type()const
 {
@@ -718,8 +738,7 @@ ValueNode_DynamicList::get_contained_type()const
 LinkableValueNode*
 ValueNode_DynamicList::create_new()const
 {
-       assert(0);
-       return 0;
+       return new ValueNode_DynamicList(container_type);
 }
 
 int