7 #include "complexwalker.hh"
9 #include "complexstaff.hh"
10 #include "textspanner.hh"
11 #include "textitem.hh"
13 Stem_beam_register::Stem_beam_register(Complex_walker*w)
16 do_post_move_process();
24 Stem_beam_register::try_request(Request*req_l)
26 if ( req_l->beam() ) {
27 if (bool(beam_p_ ) == bool(req_l->beam()->spantype == Span_req::START))
30 if (beam_req_l_ && Beam_req::compare(*beam_req_l_ , *req_l->beam()))
33 beam_req_l_ = req_l->beam();
37 if ( req_l->stem() ) {
38 if (current_grouping && !current_grouping->child_fit_query(
39 walk_l_->col()->tdescription_->whole_in_measure))
42 if (stem_req_l_ && Stem_req::compare(*stem_req_l_, *req_l->stem()))
45 stem_req_l_ = req_l->stem();
52 Stem_beam_register::process_request()
55 if (beam_req_l_->spantype == Span_req::STOP) {
60 start_req_l_ = beam_req_l_;
61 // walk_l_->announce_element(Staff_elem_info(beam_p_, ))
62 current_grouping = new Rhythmic_grouping;
63 if (beam_req_l_->nplet) {
64 Text_spanner* t = new Text_spanner();
65 t->set_support(beam_p_);
67 t->spec.text_str_ = beam_req_l_->nplet;
68 walk_l_->typeset_element(t);
75 stem_p_ = new Stem(4);
77 current_grouping->add_child(
78 walk_l_->col()->tdescription_->whole_in_measure,
79 stem_req_l_->duration());
81 stem_p_->flag = stem_req_l_->balltype;
84 if (stem_req_l_->balltype<= 4)
85 warning( "stem doesn't fit in Beam.",
86 stem_req_l_->defined_ch_c_l_m);
88 beam_p_->add(stem_p_);
89 stem_p_->print_flag = false;
91 stem_p_->print_flag = true;
94 walk_l_->announce_element(Staff_elem_info(stem_p_,
100 Stem_beam_register::acknowledge_element(Staff_elem_info info)
105 if (info.elem_p_->name() == String("Notehead") &&
106 stem_req_l_->duration() == info.req_l_->rhythmic()->duration())
108 stem_p_->add((Notehead*)info.elem_p_);
112 Stem_beam_register::do_pre_move_process()
116 stem_p_->dir = default_dir_i_;
118 walk_l_->typeset_element(stem_p_);
121 if (beam_p_ && end_beam_b_) {
122 walk_l_->default_grouping.extend(current_grouping->interval());
123 beam_p_->set_grouping(walk_l_->default_grouping, *current_grouping);
124 walk_l_->typeset_element(beam_p_);
125 delete current_grouping;
126 current_grouping = 0;
132 Stem_beam_register::do_post_move_process()
140 Stem_beam_register::~Stem_beam_register()
143 warning("unterminated beam", start_req_l_->defined_ch_c_l_m);
147 Stem_beam_register::set_dir(int i)
153 Script_register::Script_register(Complex_walker*w)
154 : Request_register(w)
160 Script_register::try_request(Request *r_l)
165 if (accepted_req_arr_.size()
166 && Script_req::compare(
167 *accepted_req_arr_[0]->script(), *r_l->script()))
171 accepted_req_arr_.push(r_l);
176 Script_register::process_request()
178 if (accepted_req_arr_.size() ) {
179 script_p_ = new Script(accepted_req_arr_[0]->script(), 10);
180 walk_l_->announce_element(
181 Staff_elem_info(script_p_, accepted_req_arr_[0], this));
186 Script_register::acknowledge_element(Staff_elem_info info)
190 if (info.elem_p_->name() == String("Stem"))
191 script_p_->set_stem((Stem*)info.elem_p_);
192 else if (info.req_l_->rhythmic())
193 script_p_->set_support(info.elem_p_->item());
197 Script_register::do_pre_move_process()
200 walk_l_->typeset_element(script_p_);
207 Text_register::Text_register(Complex_walker*w)
208 : Request_register(w)
214 Text_register::try_request(Request*req_l)
218 if (accepted_req_arr_.size() &&
219 Text_req::compare(*req_l->text(), *accepted_req_arr_[0]->text()))
223 accepted_req_arr_.push(req_l);
228 Text_register::process_request()
231 if (accepted_req_arr_.size()) {
232 text_p_ = new Text_item(accepted_req_arr_[0]->text(), 10);
233 walk_l_->announce_element(Staff_elem_info(text_p_,
234 accepted_req_arr_[0], this));
238 Text_register::do_pre_move_process()
241 walk_l_->typeset_element(text_p_);