]> git.donarmstrong.com Git - lilypond.git/blob - lily/elem-group.cc
release: 0.1.1
[lilypond.git] / lily / elem-group.cc
1 /*
2  elem-group.cc -- implement Horizontal_vertical_group
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "elem-group.hh"
10 #include "interval.hh"
11 #include "item.hh"
12 #include "debug.hh"
13
14 bool
15 Elbement_group::contains_b(Score_elem const*e)const
16 {
17     return elem_l_arr_.find_l(e);
18 }
19
20 Elbement_group::Elbement_group(Elbement_group const &s)
21     : Score_elem(s)
22 {
23 }
24
25 Interval
26 Vertical_group::do_height()const 
27 {
28     Interval r;
29     for (int i=0; i < elem_l_arr_.size(); i++) 
30         r.unite(elem_l_arr_[i]->height());
31     return r;
32 }
33
34 Interval
35 Horizontal_group::do_width()const 
36 {
37     Interval r;
38     for (int i=0; i < elem_l_arr_.size(); i++) 
39         if (elem_l_arr_[i]->item()) // makes no at preprocessing for spanners. 
40             r.unite(elem_l_arr_[i]->width());
41     return r;
42 }
43
44
45 IMPLEMENT_IS_TYPE_B1(Horizontal_group, Elbement_group);
46 IMPLEMENT_IS_TYPE_B1(Vertical_group, Elbement_group);
47
48
49 void
50 Elbement_group::add_element(Score_elem*i_l)
51 {
52     assert(i_l!= this);
53     assert(! contains_b(i_l));
54
55     elem_l_arr_.push(i_l);
56     add_dependency(i_l);
57 }
58
59 void
60 Horizontal_group::add_element(Score_elem*elt)
61 {
62     assert ( !elt->x_group_l_ );
63     elt->x_group_l_ = this;
64     Elbement_group::add_element(elt);
65 }
66
67 void
68 Vertical_group::add_element(Score_elem*e)
69 {
70     assert( ! e->y_group_l_ );
71     e->y_group_l_ = this;
72
73     Elbement_group::add_element(e);
74 }
75
76
77 void
78 Horizontal_group::translate_x(Real x)
79 {
80     for (int i=0; i < elem_l_arr_.size(); i++) 
81         elem_l_arr_[i]->translate_x(x);
82 }
83
84 void
85 Vertical_group::translate_y(Real y)
86 {
87     for (int i=0; i < elem_l_arr_.size(); i++) 
88         elem_l_arr_[i]->translate_y(y);
89 }
90
91
92 IMPLEMENT_IS_TYPE_B1(Elbement_group, Score_elem);
93
94 void
95 Elbement_group::do_print() const
96 {
97 #ifndef NPRINT
98     for (int i=0; i < elem_l_arr_.size(); i++) 
99         mtor << elem_l_arr_[i]->name() << ' ';
100 #endif
101 }
102
103 void
104 Horizontal_group::do_substitute_dependency(Score_elem* old, Score_elem *new_l)
105 {
106     int i;
107
108     while ((i=elem_l_arr_.find_i(old))>=0) {
109         old->x_group_l_ =0;
110         
111         if (new_l){ 
112             new_l->x_group_l_ = this;
113             elem_l_arr_[i] = new_l;
114         }else {     
115             elem_l_arr_.unordered_del(i);
116         }
117     }
118 }
119
120 void
121 Vertical_group::do_substitute_dependency(Score_elem* old, Score_elem *new_l)
122 {
123     int i;
124
125     while ((i=elem_l_arr_.find_i(old))>=0) {
126         old->y_group_l_ =0;
127         
128         if (new_l){ 
129             new_l->y_group_l_ =this;
130             elem_l_arr_[i] = new_l;
131         }else {     
132             elem_l_arr_.unordered_del(i);
133         }
134     }
135 }
136
137 Vertical_group::Vertical_group(Vertical_group 
138                                const &s)
139     : Elbement_group(s)
140 {
141 }
142
143 Horizontal_group::Horizontal_group(Horizontal_group 
144                                    const &s)
145        : Elbement_group(s)
146 {
147 }
148
149 Elbement_group::Elbement_group()
150 {
151     transparent_b_ = true;
152 }
153
154 IMPLEMENT_IS_TYPE_B2(Horizontal_vertical_group, Horizontal_group, Vertical_group);
155
156
157 Horizontal_vertical_group::Horizontal_vertical_group()
158 {
159 }
160
161 void
162 Horizontal_vertical_group::do_substitute_dependency(Score_elem*o,Score_elem*n)
163 {
164     Vertical_group::do_substitute_dependency(o,n);
165     Horizontal_group::do_substitute_dependency(o,n);
166 }
167
168 void
169 Horizontal_vertical_group::add_element(Score_elem*e)
170 {
171     Vertical_group::add_element(e);
172     Horizontal_group::add_element(e);
173 }
174
175 void
176 Horizontal_vertical_group::do_print()const
177 {
178     Vertical_group::do_print();
179 }
180
181 void
182 Vertical_group::do_print()const
183 {
184     Elbement_group::do_print();
185 }
186
187 void
188 Horizontal_group::do_print() const
189 {
190     Elbement_group::do_print();
191 }
192
193
194
195 void
196 Vertical_group::remove_element(Score_elem*s)
197 {
198     remove_dependency( s );
199 }
200
201 void
202 Horizontal_group::remove_element(Score_elem*s)
203 {
204     remove_dependency( s );
205 }