lilypond-0.1.54
[lilypond.git] / lily / engraver-group.cc
bloba50b078062930c3038fd05122ef4ede5bcf3654f
1 /*
2 engravergroup.cc -- implement Engraver_group_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
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"
17 IMPLEMENT_IS_TYPE_B2(Engraver_group_engraver,Engraver, Translator_group);
18 ADD_THIS_TRANSLATOR(Engraver_group_engraver);
20 void
21 Engraver_group_engraver::announce_element (Score_elem_info info)
23 announce_info_arr_.push (info);
24 Engraver::announce_element (info);
27 void
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 = groups[i]->engraver_l ();
34 if (eng)
36 Engraver_group_engraver * group =
37 (Engraver_group_engraver*) eng;
38 group->do_announces();
42 Request dummy_req;
44 Link_array<Translator> nongroups = nongroup_l_arr ();
45 for (int j =0; j < announce_info_arr_.size(); j++)
47 Score_elem_info info = announce_info_arr_[j];
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);
58 announce_info_arr_.clear();
62 Staff_info
63 Engraver_group_engraver::get_staff_info() const
65 Staff_info inf = Engraver::get_staff_info();
67 Link_array<Translator> simple_translators = nongroup_l_arr ();
68 for (int i=0; i < simple_translators.size(); i++)
70 Engraver * eng = simple_translators[i]->engraver_l ();
71 if (eng)
72 eng->fill_staff_info (inf);
74 return inf;
79 Engraver_group_engraver::~Engraver_group_engraver ()
83 Engraver_group_engraver::Engraver_group_engraver ()