]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/clef-reg.cc
release: 0.0.68pre
[lilypond.git] / lily / clef-reg.cc
index fc1aef825b00ad80e76e6d03eed287d6822a6a78..4e3d25eb401dd986497da0431b54bdc73df99dd9 100644 (file)
@@ -1,25 +1,25 @@
 /*
   clef.cc -- implement  Clef_register
 
-  source file of the LilyPond music typesetter
+  source file of the GNU LilyPond music typesetter
 
   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>,
   Mats Bengtsson <matsb@s3.kth.se>
 */
+
 #include "bar.hh"
 #include "clef-reg.hh"
 #include "clef-item.hh"
 #include "debug.hh"
 #include "command-request.hh"
 #include "time-description.hh"
-#include "staff-column.hh"
 
 Clef_register::Clef_register()
 {
     clef_p_ = 0;
+    clef_req_l_ =0;
     
-    /* ugly hack to prevent segfault (daddy_reg_l_ == 0 at construction) */
-    clef_type_str_ = "";       
+    set_type("violin");
 }
 
 bool
@@ -34,13 +34,18 @@ Clef_register::set_type(String s)
        c0_position_i_= 6;
     } else if (clef_type_str_ == "bass") {
        c0_position_i_= 10;
-    }else 
+    } else 
        return false;
-    *get_staff_info().c0_position_i_l_ = c0_position_i_;
     
     return true;
 }
 
+void
+Clef_register::fill_staff_info(Staff_info &i)
+{
+    i.c0_position_i_l_ = &c0_position_i_;
+}
+
 void 
 Clef_register::read_req(Clef_change_req*c_l)
 {
@@ -48,17 +53,25 @@ Clef_register::read_req(Clef_change_req*c_l)
        c_l->error("unknown clef type ");
 }
 void
-Clef_register::acknowledge_element(Staff_elem_info info)
+Clef_register::acknowledge_element(Score_elem_info info)
 {
-    if (info.elem_p_->name() == Bar::static_name()) {
+    if (info.elem_l_->name() == Bar::static_name() ) {
        if (!clef_p_){
            create_clef();
-           clef_p_->change = false;
+           clef_p_->default_b_ = true;
        }
     }
 }
+
+void
+Clef_register::do_creation_processing()
+{
+    create_clef();
+    clef_p_->default_b_ = false;
+}
+
 bool
-Clef_register::try_request(Request * r_l)
+Clef_register::do_try_request(Request * r_l)
 {
     Command_req* creq_l= r_l->command();
     if (!creq_l || !creq_l->clefchange())
@@ -74,45 +87,46 @@ Clef_register::try_request(Request * r_l)
 void 
 Clef_register::create_clef()
 {
-    clef_p_ = new Clef_item;
-    clef_p_->read(*this);
-    announce_element(Staff_elem_info(clef_p_,
-                                        clef_req_l_));
-}
+    if (!clef_p_) {
+       clef_p_ = new Clef_item;
+        announce_element(Score_elem_info(clef_p_,
+                                    clef_req_l_));
+    
+       clef_p_->read(*this);
+    }
 
+}
 void
-Clef_register::process_requests()
+Clef_register::do_process_requests()
 {
     if (clef_req_l_) {
        create_clef();
-       clef_p_->change = true;
+       clef_p_->default_b_ = false;
     }
 }
 
 void
-Clef_register::pre_move_processing()
+Clef_register::do_pre_move_processing()
 {
     if (!clef_p_)
        return;
-    if (clef_p_->change) {
-       Clef_item* post_p = new Clef_item(*clef_p_);
-       post_p->change = false;
-       typeset_breakable_item(new Clef_item(*clef_p_),
-                              clef_p_,  post_p);
-    } else {
-       typeset_breakable_item(0, 0, clef_p_);
-    }
+    typeset_breakable_item(clef_p_);
     clef_p_ = 0;
 }
     
 void
-Clef_register::post_move_processing()
+Clef_register::do_post_move_processing()
 {
     clef_req_l_ = 0;
-    /* not in ctor, since the reg might not be linked in.*/
-    if (clef_type_str_ == "") {        
-       set_type("violin");
-    }
 }
+
+void
+Clef_register::do_removal_processing()
+{
+    delete clef_p_;
+    clef_p_ =0;
+}
+
 IMPLEMENT_STATIC_NAME(Clef_register);
+IMPLEMENT_IS_TYPE_B1(Clef_register,Request_register);
 ADD_THIS_REGISTER(Clef_register);