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