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)
24 add(ireg_C->get_nongroup_p_arr());
28 Voice_registers::acknowledge_element(Staff_elem_info i)
30 if (i.voice_l_ != voice_l_)
32 Register_group_register::acknowledge_element(i);
36 Voice_registers::try_request(Request*r_l)
38 if (r_l->voice_l() !=voice_l_)
41 Command_req *c=r_l->command();
42 if (c&&c->terminate()) {
44 return true; // scary. We're deleted now..
45 } else if (c&&c->groupchange()) {
46 /* this is scary as well. The groupchange has to be handled by
47 the Staff_registers, which are two levels up in the hierarchy
50 assert(daddy_reg_l_->name() == Voice_group_registers::static_name());
51 ((Staff_registers*)daddy_reg_l_->daddy_reg_l_)-> // scary.
52 change_group(c->groupchange(), this,
53 (Voice_group_registers*)daddy_reg_l_); // ugh!
57 return Register_group_register::try_request(r_l);
61 Voice_registers::acceptable_request_b(Request*r)
63 Command_req * c_l = r->command();
64 return (c_l&&(c_l->terminate()||c_l->groupchange()))
65 || Register_group_register::acceptable_request_b(r);
67 IMPLEMENT_STATIC_NAME(Voice_registers);
70 Voice_registers::do_print() const
73 mtor << "Voice= " << voice_l_<<'\n';
74 Register_group_register::do_print();
79 Voice_registers::pre_move_processing()
82 daddy_reg_l_->terminate_register(this);
84 Register_group_register::pre_move_processing();