2 key-reg.cc -- implement Key_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
9 Todo: key undo, special keys.
12 #include "key-grav.hh"
13 #include "key-item.hh"
14 #include "command-request.hh"
15 #include "local-key-grav.hh"
16 #include "musical-request.hh"
17 #include "local-key-item.hh"
19 #include "time-description.hh"
21 Key_engraver::Key_engraver()
24 do_post_move_processing();
28 Key_engraver::create_key()
34 Staff_info inf = get_staff_info();
35 if (inf.c0_position_i_l_)
36 c0_i = *get_staff_info().c0_position_i_l_;
38 kit_p_ = new Key_item (c0_i);
39 announce_element (Score_elem_info (kit_p_,keyreq_l_));
45 Key_engraver::do_try_request (Request * req_l)
47 Command_req* creq_l= req_l->command();
48 if (!creq_l|| !creq_l->keychange())
53 keyreq_l_ = creq_l->keychange();
59 Key_engraver::acknowledge_element (Score_elem_info info)
61 Command_req * r_l = info.req_l_->command() ;
62 if (r_l && r_l->clefchange())
66 else if (info.elem_l_->name() == Bar::static_name ())
69 default_key_b_ = true;
76 Key_engraver::do_process_requests()
78 if (key_.multi_octave_b_)
80 assert (false); // TODO .
89 Key_engraver::do_pre_move_processing()
93 kit_p_->default_b_ = default_key_b_;
94 typeset_element (kit_p_);
102 Key_engraver::read_req (Key_change_req * r)
104 key_.multi_octave_b_ = r->multi_octave_b_;
105 accidental_idx_arr_.clear();
106 for (int i = 0; i < r->melodic_p_arr_.size(); i ++)
108 Melodic_req * m_l =r->melodic_p_arr_[i];
109 int n_i =m_l->notename_i_;
110 int a_i = m_l->accidental_i_;
111 int o_i = m_l->octave_i_;
112 if (r->multi_octave_b_)
113 key_.set (o_i, n_i, a_i);
116 accidental_idx_arr_.push (n_i);
121 Key_engraver::do_post_move_processing()
124 default_key_b_ = false;
128 IMPLEMENT_IS_TYPE_B1(Key_engraver,Engraver);
129 ADD_THIS_ENGRAVER(Key_engraver);