]> git.donarmstrong.com Git - lilypond.git/blob - lily/complex-walker.cc
release: 0.0.65
[lilypond.git] / lily / complex-walker.cc
1 /*
2   complex-walker.cc -- implement Complex_walker
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8 #include "score.hh" 
9 #include "staff-column.hh"
10 #include "voice.hh"
11 #include "p-score.hh"
12 #include "debug.hh"
13 #include "complex-walker.hh"
14 #include "walk-regs.hh"
15 #include "score-elem.hh"
16 #include "staff.hh"
17 #include "staffline.hh"
18
19 void
20 Complex_walker::do_post_move()
21 {
22     walk_regs_p_->post_move_processing();
23 }
24
25 void
26 Complex_walker::do_pre_move()
27 {
28     walk_regs_p_->pre_move_processing();
29 }
30
31 void
32 Complex_walker::do_announces()
33 {
34     walk_regs_p_->do_announces();
35 }
36
37
38 void
39 Complex_walker::try_request(Request*req)
40 {
41     bool b =walk_regs_p_->try_request(req);
42     if (!b)
43         req->warning("junking request: "  + String(req->name()));
44 }
45
46 void
47 Complex_walker::process_requests()
48 {
49     Staff_column*c =ptr();
50
51     for (int i=0; i < c->creationreq_l_arr_.size(); i++) {
52         try_request(c->creationreq_l_arr_[i]);
53     }    
54     for (int i=0; i < c->commandreq_l_arr_.size(); i++) {
55         try_request(c->commandreq_l_arr_[i]);
56     }
57
58     for (int i=0; i < c->musicalreq_l_arr_.size(); i++) {
59         try_request(c->musicalreq_l_arr_[i]);
60     }
61
62     regs_process_requests();
63     do_announces();
64 }
65
66 void
67 Complex_walker::regs_process_requests()
68 {
69     walk_regs_p_->process_requests();
70 }
71
72 void
73 Complex_walker::typeset_element(Score_elem *elem_p)
74 {
75     if (!elem_p)
76         return;
77     staff_l_->staff_line_l_->add_element(elem_p);
78     if (elem_p->spanner())
79         pscore_l_->typeset_unbroken_spanner(elem_p->spanner());
80     else
81         ptr()->typeset_musical_item(elem_p->item()); 
82 }
83
84 Complex_walker::Complex_walker(Staff*s)
85     : Staff_walker(s, s->score_l_->pscore_p_)
86 {
87     walk_regs_p_ = new Walker_registers(this);    
88     do_post_move();
89 }
90
91
92 Complex_walker::~Complex_walker()
93 {
94     delete walk_regs_p_;
95 }
96
97
98