**
** \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
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));
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;
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)
ValueNode_DynamicList::get_link_vfunc(int i)const
{
assert(i>=0);
+
if((unsigned)i>=list.size())
return 0;
return list[i].value_node;
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);
}
{
{ 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;
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();
}
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
{
LinkableValueNode*
ValueNode_DynamicList::create_new()const
{
- assert(0);
- return 0;
+ return new ValueNode_DynamicList(container_type);
}
int