lilypond-0.0.32
[lilypond.git] / src / voicegroup.cc
blob4f622c93849f4c97038674f17f0390078efe66ac
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 "musicalrequest.hh"
10 #include "voicegroup.hh"
11 #include "register.hh"
12 #include "textreg.hh"
13 #include "stembeamreg.hh"
14 #include "scriptreg.hh"
15 #include "complexwalker.hh"
16 #include "commandrequest.hh"
18 static int temp_id_count;
20 Voice_group_registers::Voice_group_registers(Complex_walker*w_l, String id)
22 walk_l_ = w_l;
23 text_reg_=new Text_register(w_l);
24 stem_beam_reg_= new Stem_beam_register(w_l);
25 script_reg_ = new Script_register(w_l);
26 if (id=="")
27 id = __FUNCTION__ + String(temp_id_count++);
28 group_id_str_ = id;
29 dir_i_ = 0;
32 Voice_group_registers::~Voice_group_registers()
34 delete text_reg_;
35 delete stem_beam_reg_;
36 delete script_reg_;
39 void
40 Voice_group_registers::pre_move_processing()
42 stem_beam_reg_->pre_move_processing();
43 script_reg_->pre_move_processing();
44 text_reg_->pre_move_processing();
47 void
48 Voice_group_registers::post_move_processing()
50 stem_beam_reg_->post_move_processing();
51 text_reg_->post_move_processing();
52 script_reg_->post_move_processing();
55 bool
56 Voice_group_registers::try_request(Request*r_l)
58 if (r_l->groupfeature()) {
59 set_dir(r_l->groupfeature()->stemdir_i_);
60 return true;
62 bool b = stem_beam_reg_->try_request(r_l);
63 if (!b)
64 b|= script_reg_->try_request(r_l);
65 if (!b)
66 b|= text_reg_->try_request(r_l);
68 return b;
71 void
72 Voice_group_registers::acknowledge_element(Staff_elem_info i)
74 if (i.group_regs_l_!= this)
75 return;
77 stem_beam_reg_->acknowledge_element(i);
78 script_reg_->acknowledge_element(i);
79 text_reg_->acknowledge_element(i);
82 void
83 Voice_group_registers::set_dir(int i)
85 stem_beam_reg_->set_dir(i);
86 script_reg_->set_dir(i);
87 text_reg_->set_dir(i);
89 Array<Voice_registers*> vr_arr (walk_l_->get_voice_regs(this));
90 for (int j=0; j<vr_arr.size(); j++) {
91 if (vr_arr[j])
92 vr_arr[j]->set_dir(i);
95 void
96 Voice_group_registers::process_requests()
98 stem_beam_reg_->process_request();
99 script_reg_->process_request();
100 text_reg_->process_request();
104 bool
105 Voice_group_registers::acceptable_request(Request*r)
107 return (r->stem() || r->beam() || r->text() || r->script() ||
108 r->groupfeature());