kit_p_ = new Key_item;
kit_p_->break_priority_i_ = -1; // ugh
announce_element (Score_element_info (kit_p_,keyreq_l_));
- kit_p_->read (*this);
+ kit_p_->set (key_.multi_octave_b_, accidental_idx_arr_, old_accidental_idx_arr_);
}
}
bool
Key_engraver::do_try_request (Request * req_l)
{
- Command_req* creq_l= req_l->access_Command_req ();
- if (!creq_l|| !creq_l->access_Key_change_req ())
- return false;
-
- if (keyreq_l_)
- return false; // TODO
- keyreq_l_ = creq_l->access_Key_change_req ();
- read_req (keyreq_l_);
- return true;
+ if (Key_change_req *kc = dynamic_cast <Key_change_req *> (req_l))
+ {
+ if (keyreq_l_)
+ warning ("Fixme: key change merge.");
+ keyreq_l_ = kc;
+ read_req (keyreq_l_);
+ return true;
+ }
+ return false;
}
void
Key_engraver::acknowledge_element (Score_element_info info)
{
- Command_req * r_l = info.req_l_->access_Command_req () ;
- if (r_l && r_l->access_Clef_change_req ())
+ if (dynamic_cast <Clef_change_req *> (info.req_l_))
{
- create_key ();
+ int i= get_property ("createKeyOnClefChange").length_i ();
+ if (i)
+ create_key ();
}
- else if (info.elem_l_->is_type_b (Bar::static_name ())
+ else if (dynamic_cast<Bar *> (info.elem_l_)
&& accidental_idx_arr_.size ())
{
if (!keyreq_l_)
{
old_accidental_idx_arr_ = accidental_idx_arr_;
key_.clear ();
- Scalar prop = get_property ("specialaccidentals");
+ Scalar prop = get_property ("keyoctaviation");
if (prop.length_i () > 0)
{
- key_.multi_octave_b_ = prop.to_bool ();
+ key_.multi_octave_b_ = ! prop.to_bool ();
}
accidental_idx_arr_.clear ();
{
keyreq_l_ = 0;
default_key_b_ = false;
+ old_accidental_idx_arr_.clear ();
}