2 instrument-name-engraver.cc -- implement Instrument_name_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 2000--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
10 #include "engraver.hh"
12 #include "bar-line.hh"
13 #include "system-start-delimiter.hh"
14 #include "side-position-interface.hh"
15 #include "align-interface.hh"
16 #include "axis-group-interface.hh"
17 #include "translator-group.hh"
19 class Instrument_name_engraver : public Engraver
24 void create_text (SCM s);
26 TRANSLATOR_DECLARATIONS(Instrument_name_engraver);
28 virtual void initialize ();
29 virtual void acknowledge_grob (Grob_info);
30 virtual void stop_translation_timestep ();
35 Instrument_name_engraver::Instrument_name_engraver ()
43 Instrument_name_engraver::initialize ()
45 daddy_trans_l_->set_property ("instrumentSupport", SCM_EOL);
49 Instrument_name_engraver::stop_translation_timestep ()
53 text_->set_grob_property ("side-support-elements",
54 get_property ("instrumentSupport"));
61 Instrument_name_engraver::create_text (SCM txt)
65 text_ = new Item (get_property ("InstrumentName"));
67 if (text_->get_grob_property ("text") != txt)
68 text_->set_grob_property ("text", txt);
71 text_->set_parent (delim_, Y_AXIS);
73 announce_grob (text_, SCM_EOL);
78 Instrument_name_engraver::acknowledge_grob (Grob_info i)
80 if (Bar_line::has_interface (i.grob_l_))
82 SCM s = get_property ("instrument");
84 if (now_mom () > Moment (0))
85 s = get_property ("instr");
88 FIXME: use markup_p () to check type.
90 if (gh_string_p (s) || gh_pair_p (s))
94 if (dynamic_cast<Spanner*> (i.grob_l_)
95 && i.grob_l_->internal_has_interface (ly_symbol2scm ("dynamic-interface")))
99 Hang the instrument names on the staves, but not on the alignment
100 groups enclosing that staff. The alignment has no real location,
101 but is only a vehicle for the placement routine it contains, and
102 therefore the location of its refpoint won't be very useful.
105 We could also just use staffsFound, but lets keep this working
106 without staffs as well.
109 if (dynamic_cast<Spanner*> (i.grob_l_)
110 && ((Axis_group_interface::has_interface (i.grob_l_)
111 && Axis_group_interface::axis_b (i.grob_l_, Y_AXIS)))
112 && !Align_interface::has_interface (i.grob_l_))
114 SCM nl = gh_cons (i.grob_l_->self_scm (),
115 get_property ("instrumentSupport"));
117 daddy_trans_l_->set_property ("instrumentSupport", nl);
124 ENTER_DESCRIPTION(Instrument_name_engraver,
125 /* descr */ " Prints the name of the instrument (specified by
126 @code{Staff.instrument} and @code{Staff.instr})
129 /* creats*/ "InstrumentName",
130 /* acks */ "bar-line-interface axis-group-interface",
131 /* reads */ "instrument instr",