X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fvoice-regs.cc;h=55732e52a24065a8af2fc04e7b95f1fe38244f70;hb=3f374e66968308461daa390a7aeed0b013bfe33d;hp=2aa7f18eb002d600d0f58cf2b6c127d943694815;hpb=04cf544172e512b5799bc42c2109e34616f67b1c;p=lilypond.git diff --git a/lily/voice-regs.cc b/lily/voice-regs.cc index 2aa7f18eb0..55732e52a2 100644 --- a/lily/voice-regs.cc +++ b/lily/voice-regs.cc @@ -11,16 +11,16 @@ #include "musical-request.hh" #include "voice-regs.hh" #include "register.hh" -#include "slur-reg.hh" -#include "headreg.hh" -#include "walk-regs.hh" +#include "staff-regs.hh" // needed because somebody has to delete us. #include "debug.hh" +#include "input-register.hh" +#include "voice-group-regs.hh" -Voice_registers::Voice_registers(Voice *v_p) +Voice_registers::Voice_registers(Voice *v_p, Input_register const*ireg_C) { + ireg_C_ = ireg_C; voice_l_ = v_p; - add(new Notehead_register); - add(new Slur_register); + add(ireg_C->get_nongroup_p_arr()); } void @@ -42,8 +42,12 @@ Voice_registers::try_request(Request*r_l) daddy_reg_l_->terminate_register(this); return true; // scary. We're deleted now.. } else if (c&&c->groupchange()) { - - ((Walker_registers*)daddy_reg_l_->daddy_reg_l_)-> // scary. + /* this is scary as well. The groupchange has to be handled by + the Staff_registers, which are two levels up in the hierarchy + */ + + assert(daddy_reg_l_->name() == Voice_group_registers::static_name()); + ((Staff_registers*)daddy_reg_l_->daddy_reg_l_)-> // scary. change_group(c->groupchange(), this, (Voice_group_registers*)daddy_reg_l_); // UGR! return true; @@ -56,7 +60,7 @@ bool Voice_registers::acceptable_request_b(Request*r) { Command_req * c_l = r->command(); - return r->groupchange() || (c_l&&c_l->terminate()) + return (c_l&&(c_l->terminate()||c_l->groupchange())) || Register_group_register::acceptable_request_b(r); } IMPLEMENT_STATIC_NAME(Voice_registers);