lilypond-1.1.52
authorfred <fred>
Tue, 26 Mar 2002 22:14:32 +0000 (22:14 +0000)
committerfred <fred>
Tue, 26 Mar 2002 22:14:32 +0000 (22:14 +0000)
input/test/auto-staff-switch.ly
lily/staff-switching-translator.cc

index 21cb6c592241fd3633dc8a6a9feab9d1a4601439..627447148ddf1d2cd852b94a8c81bb7377d4d83c 100644 (file)
@@ -2,7 +2,7 @@
 \score  {
 \notes {
        \context AutoSwitchGrandStaff \relative c' {
-       c8^8 d^8 b^8 a^8 [a,^8 f'^8 g,^8 ~ g]
+       c8 d b a' a, f' g,4 ~ g
 
        }
 }
 \accepts AutoSwitchGrandStaff;
 }
 \translator{
-       \context "Line_group_engraver_group";
+       \type "Engraver_group_engraver";
        \name AutoSwitchGrandStaff;
        \consists "Span_bar_engraver";
        \consists "Vertical_align_engraver";
        \consists "Piano_bar_engraver";
+       \consistsend "Axis_group_engraver";
        minVerticalAlign = 2.*\staffheight;
        maxVerticalAlign = 2.*\staffheight;     
+       switcherName = "Voice";
+       acceptorName = "Thread";
+       staffContextName = "Staff";
 
        \accepts "AutoSwitchContext";
        \accepts "Staff";
 }
 \translator {
-       \context "Engraver_group_engraver";
+       \type "Engraver_group_engraver";
        \name "AutoSwitchContext";
        \consists "Staff_switching_translator";
 }
index 570631c3a7c5603075441f6d5b74790f09e105ec..ae56d110d336be9c994ded5c197ccfd7c4fbfef0 100644 (file)
@@ -19,6 +19,8 @@ class Staff_switching_translator : public Engraver
 protected:
   virtual bool do_try_music (Music* m);
   virtual void do_creation_processing ();
+
+  void default_voice (Direction);
 public:
   Staff_switching_translator ();
   VIRTUAL_COPY_CONS(Translator);
@@ -33,13 +35,22 @@ Staff_switching_translator::do_creation_processing ()
 {
   Translator_group * daddy =daddy_grav_l (); // staff switching context
 
-  staff_handle_drul_[UP].set_translator (daddy->daddy_trans_l_ -> find_create_translator_l ("Staff", "upper"));
-  staff_handle_drul_[DOWN].set_translator (daddy->daddy_trans_l_-> find_create_translator_l ("Staff", "lower"));  
+  Scalar s = get_property("staffContextName", 0);
+  staff_handle_drul_[UP].set_translator (daddy->daddy_trans_l_ -> find_create_translator_l (s, "upper"));
+  staff_handle_drul_[DOWN].set_translator (daddy->daddy_trans_l_-> find_create_translator_l (s, "lower"));  
 
 
   staff_handle_drul_[DOWN].report_to_l ()->set_property ("defaultClef", "bass");
+
+  default_voice (UP);
+}
   
-  my_voice_.set_translator (staff_handle_drul_[UP].report_to_l ()->find_create_translator_l ("Voice", daddy->id_str_));
+
+void
+Staff_switching_translator::default_voice (Direction d)
+{
+  Scalar s = get_property ("acceptorName",0);
+  my_voice_.set_translator (staff_handle_drul_[d].report_to_l ()->find_create_translator_l ("Thread", daddy_trans_l_->id_str_));
 }
 
 bool
@@ -54,6 +65,16 @@ Staff_switching_translator::do_try_music (Music*m)
 
       Translator_group * mv = my_voice_.report_to_l ();
       Translator_group *dest_staff =staff_handle_drul_[staff].report_to_l ();
+      Scalar s = get_property ("switcherName", 0);
+      
+      while (mv && mv->type_str_ != s)
+       {
+         mv = mv -> daddy_trans_l_;
+       }
+
+      if (!mv)
+       default_voice (staff);
+
       if (mv->daddy_trans_l_  != dest_staff)
        {
          mv->daddy_trans_l_->remove_translator_p (mv);