lilypond-1.3.65
[lilypond.git] / lily / clef-reg.cc
blob3f4c311937ce358a3f1305c266e7520583885f93
1 /*
2 clef.cc -- implement Clef_register
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>,
7 Mats Bengtsson <matsb@s3.kth.se>
8 */
10 #include "bar.hh"
11 #include "clef-reg.hh"
12 #include "clef-item.hh"
13 #include "debug.hh"
14 #include "command-request.hh"
15 #include "time-description.hh"
17 Clef_register::Clef_register()
19 clef_p_ = 0;
20 clef_req_l_ =0;
22 set_type("violin");
25 bool
26 Clef_register::set_type(String s)
28 clef_type_str_ = s;
29 if (clef_type_str_ == "violin") {
30 c0_position_i_= -2;
31 } else if (clef_type_str_ == "alto") {
32 c0_position_i_= 4;
33 } else if (clef_type_str_ == "tenor") {
34 c0_position_i_= 6;
35 } else if (clef_type_str_ == "bass") {
36 c0_position_i_= 10;
37 } else
38 return false;
40 return true;
43 void
44 Clef_register::fill_staff_info(Staff_info &i)
46 i.c0_position_i_l_ = &c0_position_i_;
49 void
50 Clef_register::read_req(Clef_change_req*c_l)
52 if (!set_type(c_l->clef_str_))
53 c_l->error("unknown clef type ");
55 void
56 Clef_register::acknowledge_element(Score_elem_info info)
58 if (info.elem_l_->name() == Bar::static_name() ) {
59 create_clef();
60 if ( !clef_req_l_ )
61 clef_p_->default_b_ = true;
65 void
66 Clef_register::do_creation_processing()
68 create_clef();
69 clef_p_->default_b_ = false;
72 bool
73 Clef_register::do_try_request(Request * r_l)
75 Command_req* creq_l= r_l->command();
76 if (!creq_l || !creq_l->clefchange())
77 return false;
79 clef_req_l_ = creq_l->clefchange();
81 read_req(clef_req_l_);
82 return true;
85 void
86 Clef_register::create_clef()
88 if (!clef_p_) {
89 clef_p_ = new Clef_item;
90 announce_element(Score_elem_info(clef_p_,clef_req_l_));
92 clef_p_->read(*this);
95 void
96 Clef_register::do_process_requests()
98 if (clef_req_l_) {
99 create_clef();
100 clef_p_->default_b_ = false;
104 void
105 Clef_register::do_pre_move_processing()
107 if (!clef_p_)
108 return;
109 typeset_breakable_item(clef_p_);
110 clef_p_ = 0;
113 void
114 Clef_register::do_post_move_processing()
116 clef_req_l_ = 0;
119 void
120 Clef_register::do_removal_processing()
122 delete clef_p_;
123 clef_p_ =0;
126 IMPLEMENT_STATIC_NAME(Clef_register);
127 IMPLEMENT_IS_TYPE_B1(Clef_register,Request_register);
128 ADD_THIS_REGISTER(Clef_register);