lilypond-0.0.49
[lilypond.git] / src / voice-group-regs.cc
bloba5a5c3735ba6cc1af3f9f38a3025f73d118305b0
1 /*
2 voicegroup.cc -- implement Voice_group_registers
4 source file of the LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
9 #include "plist.hh"
10 #include "musicalrequest.hh"
11 #include "voice-regs.hh"
12 #include "voice-group-regs.hh"
13 #include "register.hh"
14 #include "text-reg.hh"
15 #include "stem-beam-reg.hh"
16 #include "script-reg.hh"
17 #include "complex-walker.hh"
18 #include "commandrequest.hh"
19 #include "debug.hh"
21 static int temp_id_count;
23 Voice_group_registers::Voice_group_registers(String id)
25 add(new Text_register);
26 add(new Stem_beam_register);
27 add(new Script_register);
29 if (id=="") // UGH
30 id = __FUNCTION__ + String(temp_id_count++);
31 group_id_str_ = id;
34 bool
35 Voice_group_registers::try_request(Request*r_l)
37 for (int i=0; i < voice_regs_l_.size(); i++) {
38 if (voice_regs_l_[i]->voice_l_ == r_l->voice_l())
39 goto gotcha;
41 return false;
42 gotcha:
43 if (r_l->groupfeature()) {
44 set_feature(Features::dir(r_l->groupfeature()->stemdir_i_));
45 return true;
47 return Register_group_register::try_request(r_l);
51 bool
52 Voice_group_registers::static_acceptable_request_b(Request*r)
54 return (r->stem() || r->beam() || r->text() || r->script() ||
55 r->groupfeature());
58 void
59 Voice_group_registers::terminate_register(Request_register*r_l)
61 if (r_l->name() == Voice_registers::static_name()) {
62 for (int i=0; i <voice_regs_l_.size(); i++) {
63 if (r_l == voice_regs_l_[i])
64 voice_regs_l_.del(i);
65 Register_group_register::terminate_register(r_l);
66 return;
69 assert(false);
71 void
72 Voice_group_registers::do_print() const
74 #ifndef NPRINT
75 mtor << "ID: " << group_id_str_<<"\n";
76 Register_group_register::do_print();
77 #endif
79 void
80 Voice_group_registers::add(Request_register*r_l)
82 Register_group_register::add(r_l);
83 if (r_l->name() == Voice_registers::static_name())
84 voice_regs_l_.push( (Voice_registers*)r_l );