2 engravergroup.cc -- implement Engraver_group_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
11 #include "engraver-group.hh"
12 #include "engraver.hh"
15 #include "score-element.hh"
18 ADD_THIS_TRANSLATOR(Engraver_group_engraver);
21 Engraver_group_engraver::announce_element (Score_element_info info)
23 announce_info_arr_.push (info);
24 Engraver::announce_element (info);
28 Engraver_group_engraver::do_announces()
30 Link_array<Translator_group> groups = group_l_arr ();
31 for (int i=0; i < groups.size(); i++)
33 Engraver * eng = dynamic_cast<Engraver*> (groups[i]);
36 Engraver_group_engraver * group =
37 (Engraver_group_engraver*) eng;
38 group->do_announces();
44 Link_array<Translator> nongroups = nongroup_l_arr ();
45 while (announce_info_arr_.size ())
47 for (int j =0; j < announce_info_arr_.size(); j++)
49 Score_element_info info = announce_info_arr_[j];
52 info.req_l_ = &dummy_req;
53 for (int i=0; i < nongroups.size(); i++)
54 { // Is this good enough?
55 Engraver * eng = dynamic_cast<Engraver*> (nongroups[i]);
56 if (eng && eng!= info.origin_grav_l_arr_[0])
57 eng->acknowledge_element (info);
60 announce_info_arr_.clear ();
61 for (int i=0; i < nongroups.size(); i++)
63 Engraver * eng = dynamic_cast<Engraver*> (nongroups[i]);
65 eng->process_acknowledged ();
73 Engraver_group_engraver::get_staff_info() const
75 Staff_info inf = Engraver::get_staff_info();
77 Link_array<Translator> simple_translators = nongroup_l_arr ();
78 for (int i=0; i < simple_translators.size(); i++)
80 Engraver * eng = dynamic_cast<Engraver*> (simple_translators[i]);
82 eng->fill_staff_info (inf);
89 Engraver_group_engraver::~Engraver_group_engraver ()
93 Engraver_group_engraver::Engraver_group_engraver ()