]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/local-key-engraver.cc
release: 1.1.51
[lilypond.git] / lily / local-key-engraver.cc
index 4edb8b874682720a6c5dd29e1daf3ccc38c3be7d..c5230c09057a9ed9e5db383c471e9e0227dcab29 100644 (file)
@@ -1,7 +1,7 @@
 /*
   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"
@@ -14,7 +14,7 @@
 #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()
@@ -26,13 +26,13 @@ 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)
     {
@@ -50,6 +50,7 @@ Local_key_engraver::process_acknowledged ()
 {
   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];
@@ -57,7 +58,11 @@ Local_key_engraver::process_acknowledged ()
 
          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_))
@@ -67,16 +72,15 @@ Local_key_engraver::process_acknowledged ()
              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_);
        }
-       
     }
 }
 
@@ -115,8 +119,7 @@ Local_key_engraver::acknowledge_element (Score_element_info info)
     }
   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]);
     }
 }
 
@@ -126,11 +129,12 @@ Local_key_engraver::do_process_requests()
   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);