source: synfigstudio/trunk/fuentes/src/synfigapp/actions/valuenodestaticlistloop.cpp @ 481

Last change on this file since 481 was 481, checked in by jrpelegrina, 4 years ago

First release to xenial

File size: 4.7 KB
Line 
1/* === S Y N F I G ========================================================= */
2/*!     \file valuenodestaticlistloop.cpp
3**      \brief Template File
4**
5**      $Id$
6**
7**      \legal
8**      Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
9**  Copyright (c) 2008 Chris Moore
10**
11**      This package is free software; you can redistribute it and/or
12**      modify it under the terms of the GNU General Public License as
13**      published by the Free Software Foundation; either version 2 of
14**      the License, or (at your option) any later version.
15**
16**      This package is distributed in the hope that it will be useful,
17**      but WITHOUT ANY WARRANTY; without even the implied warranty of
18**      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19**      General Public License for more details.
20**      \endlegal
21*/
22/* ========================================================================= */
23
24/* === H E A D E R S ======================================================= */
25
26#ifdef USING_PCH
27#       include "pch.h"
28#else
29#ifdef HAVE_CONFIG_H
30#       include <config.h>
31#endif
32
33#include "valuenodestaticlistloop.h"
34#include <synfigapp/canvasinterface.h>
35
36#include <synfigapp/general.h>
37
38#endif
39
40using namespace std;
41using namespace etl;
42using namespace synfig;
43using namespace synfigapp;
44using namespace Action;
45
46/* === M A C R O S ========================================================= */
47
48ACTION_INIT(Action::ValueNodeStaticListLoop);
49ACTION_SET_NAME(Action::ValueNodeStaticListLoop,"ValueNodeStaticListLoop");
50ACTION_SET_LOCAL_NAME(Action::ValueNodeStaticListLoop,N_("Loop"));
51ACTION_SET_TASK(Action::ValueNodeStaticListLoop,"loop");
52ACTION_SET_CATEGORY(Action::ValueNodeStaticListLoop,Action::CATEGORY_VALUEDESC|Action::CATEGORY_VALUENODE);
53ACTION_SET_PRIORITY(Action::ValueNodeStaticListLoop,0);
54ACTION_SET_VERSION(Action::ValueNodeStaticListLoop,"0.0");
55ACTION_SET_CVS_ID(Action::ValueNodeStaticListLoop,"$Id$");
56
57/* === G L O B A L S ======================================================= */
58
59/* === P R O C E D U R E S ================================================= */
60
61/* === M E T H O D S ======================================================= */
62
63Action::ValueNodeStaticListLoop::ValueNodeStaticListLoop():
64        old_loop_value()
65{ }
66
67Action::ParamVocab
68Action::ValueNodeStaticListLoop::get_param_vocab()
69{
70        ParamVocab ret(Action::CanvasSpecific::get_param_vocab());
71
72        ret.push_back(ParamDesc("value_node",Param::TYPE_VALUENODE)
73                .set_local_name(_("ValueNode"))
74        );
75
76        return ret;
77}
78
79bool
80Action::ValueNodeStaticListLoop::is_candidate(const ParamList &x)
81{
82        if (!candidate_check(get_param_vocab(),x))
83                return false;
84
85        ValueNode::Handle value_node;
86        ValueDesc value_desc(x.find("value_desc")->second.get_value_desc());
87
88        if(value_desc.parent_is_value_node())
89                value_node = value_desc.get_parent_value_node();
90        else
91                value_node = x.find("value_node")->second.get_value_node();
92
93        ValueNode_StaticList::Handle static_list;
94        // We need a static list
95        return ((static_list = ValueNode_StaticList::Handle::cast_dynamic(value_node)) &&
96                        // We need the list not to be a list of bones
97                        static_list->get_contained_type() != type_bone_object &&
98                        // We need the list not to be looped
99                        !static_list->get_loop());
100}
101
102bool
103Action::ValueNodeStaticListLoop::set_param(const synfig::String& name, const Action::Param &param)
104{
105        if(!value_node && name=="value_desc" && param.get_type()==Param::TYPE_VALUEDESC)
106        {
107                ValueDesc value_desc(param.get_value_desc());
108
109                if(!value_desc.parent_is_value_node())
110                        return false;
111
112                value_node=ValueNode_StaticList::Handle::cast_dynamic(value_desc.get_parent_value_node());
113
114                if (!value_node)
115                        return false;
116
117                return true;
118        }
119
120        if(!value_node && name=="value_node" && param.get_type()==Param::TYPE_VALUENODE)
121        {
122                value_node=ValueNode_StaticList::Handle::cast_dynamic(param.get_value_node());
123
124                if(!value_node)
125                        return false;
126
127                return true;
128        }
129
130        return Action::CanvasSpecific::set_param(name,param);
131}
132
133bool
134Action::ValueNodeStaticListLoop::is_ready()const
135{
136        if(!value_node)
137                return false;
138        return Action::CanvasSpecific::is_ready();
139}
140
141void
142Action::ValueNodeStaticListLoop::perform()
143{
144        old_loop_value=value_node->get_loop();
145
146        if(old_loop_value==true)
147        {
148                set_dirty(false);
149                return;
150        }
151        set_dirty(true);
152        value_node->set_loop(true);
153
154        value_node->changed();
155/*_if(get_canvas_interface())
156        {
157                get_canvas_interface()->signal_value_node_changed()(value_node);
158        }
159        else synfig::warning("CanvasInterface not set on action");*/
160}
161
162void
163Action::ValueNodeStaticListLoop::undo()
164{
165        if(old_loop_value==value_node->get_loop())
166        {
167                set_dirty(false);
168                return;
169        }
170        set_dirty(true);
171        value_node->set_loop(old_loop_value);
172
173        value_node->changed();
174/*_if(get_canvas_interface())
175        {
176                get_canvas_interface()->signal_value_node_changed()(value_node);
177        }
178        else synfig::warning("CanvasInterface not set on action");*/
179}
Note: See TracBrowser for help on using the repository browser.