2 key-reg.cc -- implement Key_register
4 source file of the LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
11 #include "time-description.hh"
13 #include "key-item.hh"
14 #include "commandrequest.hh"
15 #include "staff-column.hh"
16 #include "local-key-reg.hh"
17 #include "musicalrequest.hh"
19 Key_register::Key_register()
21 post_move_processing();
25 Key_register::try_request(Request
* req_l
)
27 Command_req
* creq_l
= req_l
->command();
28 if (!creq_l
|| !creq_l
->keychange())
31 assert(!keyreq_l_
); // todo
32 keyreq_l_
= creq_l
->keychange();
38 Key_register::acknowledge_element(Staff_elem_info info
)
40 Command_req
* r_l
= info
.req_l_
->command() ;
41 if (r_l
&& r_l
->clefchange() && !kit_p_
) {
42 int c0_i
= *get_staff_info().c0_position_i_
;
43 kit_p_
= new Key_item(c0_i
);
45 announce_element(Staff_elem_info(kit_p_
, keyreq_l_
));
50 Key_register::process_requests()
52 const Time_description
*time_l
= get_staff_info().time_c_l_
;
55 (!time_l
->whole_in_measure_
|| !time_l
->when_
)) {
56 default_key_b_
= true;
59 if ( default_key_b_
|| keyreq_l_
) {
60 int c0_i
= *get_staff_info().c0_position_i_
;
61 kit_p_
= new Key_item(c0_i
);
63 announce_element(Staff_elem_info(kit_p_
, keyreq_l_
));
68 Key_register::pre_move_processing()
72 typeset_breakable_item(0,0,kit_p_
);
74 typeset_breakable_item(
75 new Key_item(*kit_p_
), kit_p_
, new Key_item(*kit_p_
));
83 Key_register::read_req(Key_change_req
* r
)
85 accidental_idx_arr_
.set_size(0);
86 for (int i
= 0; i
< r
->melodic_p_arr_
.size(); i
++) {
87 int n_i
=r
->melodic_p_arr_
[i
]->notename_i_
;
88 key_
.set(n_i
, r
->melodic_p_arr_
[i
]->accidental_i_
);
89 accidental_idx_arr_
.push(n_i
);
94 Key_register::post_move_processing()
97 default_key_b_
= false;