2 clef.cc -- implement Clef_register
4 source file of the LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>,
7 Mats Bengtsson <matsb@s3.kth.se>
10 #include "clef-reg.hh"
11 #include "clef-item.hh"
13 #include "command-request.hh"
14 #include "time-description.hh"
15 #include "staff-column.hh"
17 Clef_register::Clef_register()
21 /* ugly hack to prevent segfault (daddy_reg_l_ == 0 at construction) */
26 Clef_register::set_type(String s)
29 if (clef_type_str_ == "violin") {
31 } else if (clef_type_str_ == "alto") {
33 } else if (clef_type_str_ == "tenor") {
35 } else if (clef_type_str_ == "bass") {
39 *get_staff_info().c0_position_i_l_ = c0_position_i_;
45 Clef_register::read_req(Clef_change_req*c_l)
47 if (!set_type(c_l->clef_str_))
48 c_l->error("unknown clef type ");
51 Clef_register::acknowledge_element(Staff_elem_info info)
53 if (info.elem_p_->name() == Bar::static_name()) {
56 clef_p_->change = false;
61 Clef_register::try_request(Request * r_l)
63 Command_req* creq_l= r_l->command();
64 if (!creq_l || !creq_l->clefchange())
67 clef_req_l_ = creq_l->clefchange();
69 // do it now! Others have to read c0_pos.
70 read_req(creq_l->clefchange());
75 Clef_register::create_clef()
77 clef_p_ = new Clef_item;
79 announce_element(Staff_elem_info(clef_p_,
84 Clef_register::process_requests()
88 clef_p_->change = true;
93 Clef_register::pre_move_processing()
97 if (clef_p_->change) {
98 Clef_item* post_p = new Clef_item(*clef_p_);
99 post_p->change = false;
100 typeset_breakable_item(new Clef_item(*clef_p_),
103 typeset_breakable_item(0, 0, clef_p_);
109 Clef_register::post_move_processing()
112 /* not in ctor, since the reg might not be linked in.*/
113 if (clef_type_str_ == "") {
117 IMPLEMENT_STATIC_NAME(Clef_register);
118 ADD_THIS_REGISTER(Clef_register);