]> git.donarmstrong.com Git - lilypond.git/blob - lily/voice-regs.cc
2aa7f18eb002d600d0f58cf2b6c127d943694815
[lilypond.git] / lily / voice-regs.cc
1 /*
2   voice-regs.cc -- implement Voice_registers
3
4   source file of the LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8 #include "proto.hh"
9 #include "plist.hh"
10 #include "command-request.hh"
11 #include "musical-request.hh"
12 #include "voice-regs.hh"
13 #include "register.hh"
14 #include "slur-reg.hh"
15 #include "headreg.hh"
16 #include "walk-regs.hh"
17 #include "debug.hh"
18
19 Voice_registers::Voice_registers(Voice *v_p)
20 {
21     voice_l_ = v_p;
22     add(new Notehead_register);
23     add(new Slur_register);
24 }
25
26 void
27 Voice_registers::acknowledge_element(Staff_elem_info i)
28 {
29     if (i.voice_l_ != voice_l_)
30         return;
31     Register_group_register::acknowledge_element(i);
32 }
33
34 bool
35 Voice_registers::try_request(Request*r_l)
36 {
37     if (r_l->voice_l() !=voice_l_)
38         return false;
39     
40     Command_req *c=r_l->command();
41     if (c&&c->terminate()) {
42         daddy_reg_l_->terminate_register(this);
43         return true;            // scary. We're deleted now.. 
44     } else if (c&&c->groupchange()) {
45
46         ((Walker_registers*)daddy_reg_l_->daddy_reg_l_)->       // scary.
47             change_group(c->groupchange(), this,
48                          (Voice_group_registers*)daddy_reg_l_); // UGR!
49         return true;
50     }
51     
52     return Register_group_register::try_request(r_l);
53 }
54
55 bool
56 Voice_registers::acceptable_request_b(Request*r)
57 {
58     Command_req *  c_l = r->command();
59     return  r->groupchange() || (c_l&&c_l->terminate())
60         || Register_group_register::acceptable_request_b(r);
61 }
62 IMPLEMENT_STATIC_NAME(Voice_registers);
63
64 void
65 Voice_registers::do_print() const
66 {
67 #ifndef NPRINT
68     mtor << "Voice= " << voice_l_<<'\n';
69     Register_group_register::do_print();
70 #endif
71 }