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