Author: Carlos Lopez <genet...@gmail.com>
Date:   Fri Jan 13 12:55:57 2012 +0100

Allow Loop and Unloop actions when value description is a Tangent of a BLine 
Point.

---

 .../synfigapp/actions/valuenodedynamiclistloop.cpp |   68 ++++++++++++--------
 .../actions/valuenodedynamiclistunloop.cpp         |   70 ++++++++++++--------
 2 files changed, 82 insertions(+), 56 deletions(-)

diff --git a/synfig-studio/src/synfigapp/actions/valuenodedynamiclistloop.cpp 
b/synfig-studio/src/synfigapp/actions/valuenodedynamiclistloop.cpp
index abc4628..20a050d 100644
--- a/synfig-studio/src/synfigapp/actions/valuenodedynamiclistloop.cpp
+++ b/synfig-studio/src/synfigapp/actions/valuenodedynamiclistloop.cpp
@@ -6,7 +6,8 @@
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**  Copyright (c) 2008 Chris Moore
+**     Copyright (c) 2008 Chris Moore
+**     Copyright (c) 2012 Carlos López
 **
 **     This package is free software; you can redistribute it and/or
 **     modify it under the terms of the GNU General Public License as
@@ -34,6 +35,7 @@
 #include <synfigapp/canvasinterface.h>
 
 #include <synfigapp/general.h>
+#include <synfig/valuenode_composite.h>
 
 #endif
 
@@ -68,11 +70,9 @@ Action::ParamVocab
 Action::ValueNodeDynamicListLoop::get_param_vocab()
 {
        ParamVocab ret(Action::CanvasSpecific::get_param_vocab());
-
        ret.push_back(ParamDesc("value_node",Param::TYPE_VALUENODE)
                .set_local_name(_("ValueNode"))
        );
-
        return ret;
 }
 
@@ -81,15 +81,30 @@ Action::ValueNodeDynamicListLoop::is_candidate(const 
ParamList &x)
 {
        if (!candidate_check(get_param_vocab(),x))
                return false;
-
        ValueNode::Handle value_node;
        ValueDesc value_desc(x.find("value_desc")->second.get_value_desc());
-
        if(value_desc.parent_is_value_node())
+       {
                value_node = value_desc.get_parent_value_node();
+               // let's check if the parent is a composite (if user clicked on 
tangent duck)
+               if(ValueNode_Composite::Handle::cast_dynamic(value_node))
+               {
+                       ValueNode_Composite::Handle 
compo(ValueNode_Composite::Handle::cast_dynamic(value_node));
+                       ValueNode_BLine::Handle bline=NULL;
+                       std::set<Node*>::iterator iter;
+                       // now check if the grand parent is a dynamic list 
'bline' type
+                       
for(iter=compo->parent_set.begin();iter!=compo->parent_set.end();++iter)
+                               {
+                                       
bline=ValueNode_BLine::Handle::cast_dynamic(*iter);
+                                       if(bline)
+                                               break;
+                               }
+                       if(bline)
+                               value_node=bline;
+               }
+       }
        else
                value_node = x.find("value_node")->second.get_value_node();
-
        // We need a dynamic list.
        return (ValueNode_DynamicList::Handle::cast_dynamic(value_node) &&
                        // We need the list not to be looped.
@@ -102,28 +117,40 @@ Action::ValueNodeDynamicListLoop::set_param(const 
synfig::String& name, const Ac
        if(!value_node && name=="value_desc" && 
param.get_type()==Param::TYPE_VALUEDESC)
        {
                ValueDesc value_desc(param.get_value_desc());
-
                if(!value_desc.parent_is_value_node())
                        return false;
-
+               // Let's check if it is a dynamic list
                
value_node=ValueNode_DynamicList::Handle::cast_dynamic(value_desc.get_parent_value_node());
-
                if (!value_node)
+               {
+                       // we didn't found a dynamic list, let's check wheter 
the parent is a composite
+                       
if(ValueNode_Composite::Handle::cast_dynamic(value_desc.get_parent_value_node()))
+                       {
+                               ValueNode_Composite::Handle 
compo(ValueNode_Composite::Handle::cast_dynamic(value_desc.get_parent_value_node()));
+                               ValueNode_BLine::Handle bline=NULL;
+                               std::set<Node*>::iterator iter;
+                               // now check if the grand parent is a 'bline' 
type
+                               
for(iter=compo->parent_set.begin();iter!=compo->parent_set.end();++iter)
+                                       {
+                                               
bline=ValueNode_BLine::Handle::cast_dynamic(*iter);
+                                               if(bline)
+                                                       break;
+                                       }
+                               if(bline)
+                                       value_node=bline;
+                       }
+               }
+               if(!value_node)
                        return false;
-
                return true;
        }
-
        if(!value_node && name=="value_node" && 
param.get_type()==Param::TYPE_VALUENODE)
        {
                
value_node=ValueNode_DynamicList::Handle::cast_dynamic(param.get_value_node());
-
                if(!value_node)
                        return false;
-
                return true;
        }
-
        return Action::CanvasSpecific::set_param(name,param);
 }
 
@@ -139,7 +166,6 @@ void
 Action::ValueNodeDynamicListLoop::perform()
 {
        old_loop_value=value_node->get_loop();
-
        if(old_loop_value==true)
        {
                set_dirty(false);
@@ -147,13 +173,7 @@ Action::ValueNodeDynamicListLoop::perform()
        }
        set_dirty(true);
        value_node->set_loop(true);
-
        value_node->changed();
-/*_if(get_canvas_interface())
-       {
-               get_canvas_interface()->signal_value_node_changed()(value_node);
-       }
-       else synfig::warning("CanvasInterface not set on action");*/
 }
 
 void
@@ -166,11 +186,5 @@ Action::ValueNodeDynamicListLoop::undo()
        }
        set_dirty(true);
        value_node->set_loop(old_loop_value);
-
        value_node->changed();
-/*_if(get_canvas_interface())
-       {
-               get_canvas_interface()->signal_value_node_changed()(value_node);
-       }
-       else synfig::warning("CanvasInterface not set on action");*/
 }
diff --git a/synfig-studio/src/synfigapp/actions/valuenodedynamiclistunloop.cpp 
b/synfig-studio/src/synfigapp/actions/valuenodedynamiclistunloop.cpp
index 9b1daf5..6453a1d 100644
--- a/synfig-studio/src/synfigapp/actions/valuenodedynamiclistunloop.cpp
+++ b/synfig-studio/src/synfigapp/actions/valuenodedynamiclistunloop.cpp
@@ -6,7 +6,8 @@
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**  Copyright (c) 2008 Chris Moore
+**     Copyright (c) 2008 Chris Moore
+**     Copyright (c) 2012 Carlos López
 **
 **     This package is free software; you can redistribute it and/or
 **     modify it under the terms of the GNU General Public License as
@@ -34,6 +35,7 @@
 #include <synfigapp/canvasinterface.h>
 
 #include <synfigapp/general.h>
+#include <synfig/valuenode_composite.h>
 
 #endif
 
@@ -68,11 +70,9 @@ Action::ParamVocab
 Action::ValueNodeDynamicListUnLoop::get_param_vocab()
 {
        ParamVocab ret(Action::CanvasSpecific::get_param_vocab());
-
        ret.push_back(ParamDesc("value_node",Param::TYPE_VALUENODE)
                .set_local_name(_("ValueNode"))
        );
-
        return ret;
 }
 
@@ -81,15 +81,30 @@ Action::ValueNodeDynamicListUnLoop::is_candidate(const 
ParamList &x)
 {
        if (!candidate_check(get_param_vocab(),x))
                return false;
-
        ValueNode::Handle value_node;
        ValueDesc value_desc(x.find("value_desc")->second.get_value_desc());
-
        if(value_desc.parent_is_value_node())
+       {
                value_node = value_desc.get_parent_value_node();
+               // let's check if the parent is a composite (if user clicked on 
tangent duck)
+               if(ValueNode_Composite::Handle::cast_dynamic(value_node))
+               {
+                       ValueNode_Composite::Handle 
compo(ValueNode_Composite::Handle::cast_dynamic(value_node));
+                       ValueNode_BLine::Handle bline=NULL;
+                       std::set<Node*>::iterator iter;
+                       // now check if the grand parent is a dynamic list 
'bline' type
+                       
for(iter=compo->parent_set.begin();iter!=compo->parent_set.end();++iter)
+                               {
+                                       
bline=ValueNode_BLine::Handle::cast_dynamic(*iter);
+                                       if(bline)
+                                               break;
+                               }
+                       if(bline)
+                               value_node=bline;
+               }
+       }
        else
                value_node = x.find("value_node")->second.get_value_node();
-
        // We need a dynamic list.
        return (ValueNode_DynamicList::Handle::cast_dynamic(value_node) &&
                        // We need the list to be looped.
@@ -102,28 +117,40 @@ Action::ValueNodeDynamicListUnLoop::set_param(const 
synfig::String& name, const
        if(!value_node && name=="value_desc" && 
param.get_type()==Param::TYPE_VALUEDESC)
        {
                ValueDesc value_desc(param.get_value_desc());
-
                if(!value_desc.parent_is_value_node())
                        return false;
-
+               // Let's check if it is a dynamic list
                
value_node=ValueNode_DynamicList::Handle::cast_dynamic(value_desc.get_parent_value_node());
-
                if (!value_node)
+               {
+                       // we didn't found a dynamic list, let's check wheter 
the parent is a composite
+                       
if(ValueNode_Composite::Handle::cast_dynamic(value_desc.get_parent_value_node()))
+                       {
+                               ValueNode_Composite::Handle 
compo(ValueNode_Composite::Handle::cast_dynamic(value_desc.get_parent_value_node()));
+                               ValueNode_BLine::Handle bline=NULL;
+                               std::set<Node*>::iterator iter;
+                               // now check if the grand parent is a 'bline' 
type
+                               
for(iter=compo->parent_set.begin();iter!=compo->parent_set.end();++iter)
+                                       {
+                                               
bline=ValueNode_BLine::Handle::cast_dynamic(*iter);
+                                               if(bline)
+                                                       break;
+                                       }
+                               if(bline)
+                                       value_node=bline;
+                       }
+               }
+               if(!value_node)
                        return false;
-
                return true;
        }
-
        if(!value_node && name=="value_node" && 
param.get_type()==Param::TYPE_VALUENODE)
        {
                
value_node=ValueNode_DynamicList::Handle::cast_dynamic(param.get_value_node());
-
                if(!value_node)
                        return false;
-
                return true;
        }
-
        return Action::CanvasSpecific::set_param(name,param);
 }
 
@@ -139,22 +166,14 @@ void
 Action::ValueNodeDynamicListUnLoop::perform()
 {
        old_loop_value=value_node->get_loop();
-
        if(old_loop_value==false)
        {
                set_dirty(false);
                return;
        }
-
        set_dirty(true);
        value_node->set_loop(false);
-
        value_node->changed();
-/*_if(get_canvas_interface())
-       {
-               get_canvas_interface()->signal_value_node_changed()(value_node);
-       }
-       else synfig::warning("CanvasInterface not set on action");*/
 }
 
 void
@@ -165,14 +184,7 @@ Action::ValueNodeDynamicListUnLoop::undo()
                set_dirty(false);
                return;
        }
-
        set_dirty(true);
        value_node->set_loop(old_loop_value);
-
        value_node->changed();
-/*_if(get_canvas_interface())
-       {
-               get_canvas_interface()->signal_value_node_changed()(value_node);
-       }
-       else synfig::warning("CanvasInterface not set on action");*/
 }


------------------------------------------------------------------------------
RSA(R) Conference 2012
Mar 27 - Feb 2
Save $400 by Jan. 27
Register now!
http://p.sf.net/sfu/rsa-sfdev2dev2
_______________________________________________
Synfig-devl mailing list
Synfig-devl@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to