/*
local-key-reg.cc -- implement Local_key_engraver
- (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include "musical-request.hh"
#include "tie.hh"
#include "note-head.hh"
#include "time-description.hh"
-#include "engraver-group.hh"
+#include "engraver-group-engraver.hh"
Local_key_engraver::Local_key_engraver()
void
Local_key_engraver::do_creation_processing ()
{
- /*
+/*
UGHGUHGUH.
Breaks if Key_engraver is removed from under us.
*/
Translator * result =
- daddy_grav_l()->get_simple_translator (Key_engraver::static_name());
+ daddy_grav_l()->get_simple_translator ("Key_engraver");
if (!result)
{
{
if (!key_item_p_ && mel_l_arr_.size())
{
+ bool forget = get_property ("forgetAccidentals",0).to_bool();
for (int i=0; i < mel_l_arr_.size(); i++)
{
Item * support_l = support_l_arr_[i];
if (tied_l_arr_.find_l (support_l) &&
!note_l->forceacc_b_)
- continue;
+ {
+ if (!forget)
+ local_key_.set (note_l->pitch_);
+ continue;
+ }
if (!note_l->forceacc_b_
&& local_key_.different_acc (note_l->pitch_))
key_item_p_ = new Local_key_item;
announce_element (Score_element_info (key_item_p_, 0));
}
- if (note_l->cautionary_b_)
- {
- note_l->pitch_.cautionary_b_ = true;
- }
- key_item_p_->add (note_l->pitch_);
+
+ key_item_p_->add_pitch (note_l->pitch_,
+ note_l->cautionary_b_);
key_item_p_->add_support (support_l);
- local_key_.set (note_l->pitch_);
+
+ if (!forget)
+ local_key_.set (note_l->pitch_);
}
-
}
}
}
else if (Tie * tie_l = dynamic_cast<Tie *> (info.elem_l_))
{
- if (tie_l->same_pitch_b_)
- tied_l_arr_.push (tie_l-> head_l_drul_[RIGHT]);
+ tied_l_arr_.push (tie_l-> head_l_drul_[RIGHT]);
}
}
Time_description const * time_C_ = get_staff_info().time_C_;
if (time_C_ && !time_C_->whole_in_measure_)
{
- if (key_C_)
+ bool no_res = get_property ("noResetKey",0).to_bool ();
+ if (!no_res && key_C_)
local_key_= *key_C_;
}
}
-IMPLEMENT_IS_TYPE_B1(Local_key_engraver,Engraver);
+
ADD_THIS_TRANSLATOR(Local_key_engraver);