2 voice-regs.cc -- implement Voice_registers
4 source file of the LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
10 #include "command-request.hh"
11 #include "musical-request.hh"
12 #include "voice-regs.hh"
13 #include "register.hh"
14 #include "staff-regs.hh" // needed because somebody has to delete us.
16 #include "input-register.hh"
17 #include "voice-group-regs.hh"
19 Voice_registers::Voice_registers(Voice
*v_p
, Input_register
const*ireg_C
)
23 add(ireg_C
->get_nongroup_p_arr());
27 Voice_registers::acknowledge_element(Staff_elem_info i
)
29 if (i
.voice_l_
!= voice_l_
)
31 Register_group_register::acknowledge_element(i
);
35 Voice_registers::try_request(Request
*r_l
)
37 if (r_l
->voice_l() !=voice_l_
)
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 /* this is scary as well. The groupchange has to be handled by
46 the Staff_registers, which are two levels up in the hierarchy
49 assert(daddy_reg_l_
->name() == Voice_group_registers::static_name());
50 ((Staff_registers
*)daddy_reg_l_
->daddy_reg_l_
)-> // scary.
51 change_group(c
->groupchange(), this,
52 (Voice_group_registers
*)daddy_reg_l_
); // UGR!
56 return Register_group_register::try_request(r_l
);
60 Voice_registers::acceptable_request_b(Request
*r
)
62 Command_req
* c_l
= r
->command();
63 return (c_l
&&(c_l
->terminate()||c_l
->groupchange()))
64 || Register_group_register::acceptable_request_b(r
);
66 IMPLEMENT_STATIC_NAME(Voice_registers
);
69 Voice_registers::do_print() const
72 mtor
<< "Voice= " << voice_l_
<<'\n';
73 Register_group_register::do_print();