]> git.donarmstrong.com Git - lilypond.git/blob - lily/instrument-name-engraver.cc
release: 1.3.42
[lilypond.git] / lily / instrument-name-engraver.cc
1 /*   
2   new-staff-margin-engraver.cc --  implement Instrument_name_engraver
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10 #include "engraver.hh"
11 #include "text-item.hh"
12 #include "bar.hh"
13 #include "span-bar.hh"
14
15 class Instrument_name_engraver : public Engraver
16 {
17   Text_item *text_;
18
19   void create_text (SCM s);
20 public:
21   VIRTUAL_COPY_CONS(Translator);
22   Instrument_name_engraver ();
23
24   virtual void acknowledge_element (Score_element_info);
25   virtual void do_pre_move_processing ();
26 };
27
28 ADD_THIS_TRANSLATOR(Instrument_name_engraver);
29
30 Instrument_name_engraver::Instrument_name_engraver ()
31 {
32   text_ = 0;
33 }
34
35
36 void
37 Instrument_name_engraver::do_pre_move_processing ()
38 {
39   if (text_)
40     {
41       typeset_element (text_);
42       text_ = 0;
43     }
44 }
45
46 void
47 Instrument_name_engraver::create_text (SCM txt)
48 {
49   if(!text_)
50     {
51       text_ = new Text_item;
52       text_->set_elt_property ("text", txt);
53       text_->set_elt_property ("breakable", SCM_BOOL_T);
54
55       /*
56         TODO: use more lispish names for break-align-symbols
57        */
58       text_->set_elt_property ("break-align-symbol", ly_symbol2scm ("Instrument_name"));
59       text_->set_elt_property ("visibility-lambda",
60                                scm_eval (ly_symbol2scm ("begin-of-line-visible")));
61
62       announce_element (Score_element_info (text_,0));
63     }
64 }
65
66 void
67 Instrument_name_engraver::acknowledge_element (Score_element_info i)
68 {
69   SCM s = get_property ("instrument");
70   
71   if (now_mom () > Moment (0))
72     s = get_property ("instr");
73
74   if (gh_string_p (s))
75     {
76       if (Bar* b= dynamic_cast<Bar*> (i.elem_l_))
77         {
78           create_text (s);
79           if (Span_bar* s= dynamic_cast<Span_bar*> (b))
80             {
81               text_->set_parent (s, Y_AXIS);
82             }
83         }
84     }
85 }
86
87
88
89