source: synfigstudio/trunk/fuentes/src/gui/widgets/widget_bonechooser.cpp @ 481

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

First release to xenial

File size: 3.8 KB
Line 
1/* === S Y N F I G ========================================================= */
2/*!     \file widget_bonechooser.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) 2007 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 "widgets/widget_bonechooser.h"
34#include <gtkmm/menu.h>
35#include "app.h"
36
37#include "general.h"
38
39#endif
40
41/* === U S I N G =========================================================== */
42
43using namespace std;
44using namespace etl;
45using namespace synfig;
46using namespace studio;
47
48/* === M A C R O S ========================================================= */
49
50/* === G L O B A L S ======================================================= */
51
52/* === P R O C E D U R E S ================================================= */
53
54/* === M E T H O D S ======================================================= */
55
56Widget_BoneChooser::Widget_BoneChooser() { }
57Widget_BoneChooser::~Widget_BoneChooser() { }
58
59void
60Widget_BoneChooser::set_parent_canvas(synfig::Canvas::Handle x)
61{
62        assert(x);
63        parent_canvas=x;
64}
65
66void
67Widget_BoneChooser::set_value_(synfig::ValueNode_Bone::Handle data)
68{
69        printf("%s:%d Widget_BoneChooser::set_value_ data = %lx\n", __FILE__, __LINE__, uintptr_t(data.get()));
70        set_value(data);
71        activate();
72}
73
74void
75Widget_BoneChooser::on_changed()
76{
77        int i = get_active_row_number();
78        if (i < 0 || i >= (int)bones.size()) return;
79        if (bone != bones[i]) set_value_(bones[i]);
80}
81
82void
83Widget_BoneChooser::set_value(synfig::ValueNode_Bone::Handle data)
84{
85        printf("%s:%d Widget_BoneChooser::set_value data = %lx\n", __FILE__, __LINE__, uintptr_t(data.get()));
86        assert(parent_canvas);
87        bone=data;
88
89        Time time(parent_canvas->get_time());
90
91        set_active(-1);
92        remove_all();
93        bones.clear();
94
95        if (get_value_desc().is_value_node())
96        {
97                // the ValueNode is either a ValueNode_Const or a ValueNode_Animated I think
98                ValueNode_Bone::BoneSet parent_set(ValueNode_Bone::get_possible_parent_bones(get_value_desc().get_value_node()));
99
100                // insert the entry for the currently selected value first so that it appears selected
101                if (!bone->is_root())
102                {
103
104                        String label((*(bone->get_link("name")))(time).get(String()));
105                        if (label.empty()) label=bone->get_guid().get_string();
106
107                        parent_set.erase(bone); // erase it from the set so it won't be inserted twice
108                        bones.push_back(bone);
109                        append(label);
110                        // (*(bone->get_link("name")))(time).get(String());
111                }
112                else
113                {
114                        bones.push_back(ValueNode_Bone::get_root_bone());
115                        append(_("<None>"));
116                }
117
118                for (ValueNode_Bone::BoneSet::iterator iter=parent_set.begin(); iter!=parent_set.end(); iter++)
119                {
120                        ValueNode_Bone::Handle bone_value_node(*iter);
121
122                        String label((*(bone_value_node->get_link("name")))(time).get(String()));
123                        if (label.empty()) label=bone_value_node->get_guid().get_string();
124
125                        bones.push_back(bone_value_node);
126                        append(label);
127                }
128        }
129
130        if (bone and !bone->is_root())
131        {
132                bones.push_back(ValueNode_Bone::get_root_bone());
133                append(_("<None>"));
134        }
135
136        if(bone)
137                set_active(0);
138}
139
140const etl::handle<synfig::ValueNode_Bone> &
141Widget_BoneChooser::get_value()
142{
143        return bone;
144}
Note: See TracBrowser for help on using the repository browser.