]> git.donarmstrong.com Git - lilypond.git/blob - lily/engraver-group.cc
release: 0.1.13
[lilypond.git] / lily / engraver-group.cc
1 /*
2   engravergroup.cc -- implement Engraver_group_engraver
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "proto.hh"
10 #include "plist.hh"
11 #include "engraver-group.hh"
12 #include "engraver.hh"
13 #include "debug.hh"
14 #include "p-score.hh"
15 #include "score-elem.hh"
16
17 IMPLEMENT_IS_TYPE_B2(Engraver_group_engraver,Engraver, Translator_group);
18 ADD_THIS_TRANSLATOR(Engraver_group_engraver);
19
20 void
21 Engraver_group_engraver::announce_element (Score_elem_info info)
22 {
23   announce_info_arr_.push (info);
24   Engraver::announce_element (info);
25 }
26
27 void
28 Engraver_group_engraver::do_announces()
29 {
30   Link_array<Translator_group> groups = group_l_arr ();
31   for (int i=0; i < groups.size(); i++) 
32     {
33       Engraver * eng = groups[i]->engraver_l ();
34       if (eng)
35         {
36           Engraver_group_engraver * group =
37             (Engraver_group_engraver*) eng;
38           group->do_announces();
39         }
40     }
41   
42   Request dummy_req;
43
44   Link_array<Translator> nongroups = nongroup_l_arr ();
45   for (int j =0; j < announce_info_arr_.size(); j++)
46     {
47       Score_elem_info info = announce_info_arr_[j];
48
49       if (!info.req_l_)
50         info.req_l_ = &dummy_req;
51       for (int i=0; i < nongroups.size(); i++) 
52         {       // Is this good enough?
53           Engraver * eng = nongroups[i]->engraver_l ();
54           if (eng && eng!= info.origin_grav_l_arr_[0])
55             eng->acknowledge_element (info);
56         }
57     }
58   announce_info_arr_.clear();
59 }
60
61
62 Staff_info
63 Engraver_group_engraver::get_staff_info() const
64 {
65   Staff_info inf = Engraver::get_staff_info();
66
67   Link_array<Translator> simple_translators = nongroup_l_arr (); 
68   for (int i=0; i < simple_translators.size(); i++)
69     {
70     Engraver * eng = simple_translators[i]->engraver_l ();
71     if (eng)
72       eng->fill_staff_info (inf);
73     }
74   return inf;
75 }
76
77
78
79 Engraver_group_engraver::~Engraver_group_engraver ()
80 {
81 }
82
83 Engraver_group_engraver::Engraver_group_engraver ()
84 {
85 }