]> git.donarmstrong.com Git - lilypond.git/blob - src/staffwalker.cc
5967242dbb41ccda95b549ced8e1bc4aa662fa27
[lilypond.git] / src / staffwalker.cc
1 #include "request.hh"
2 #include "staffwalker.hh"
3 #include "stcol.hh"
4 #include "sccol.hh"
5
6 Staff_walker::~Staff_walker() {}
7 Staff_walker::Staff_walker(Staff_walker const &s)
8     :PCursor<Staff_column*> (s)
9 {
10     assert(false);
11 }
12
13 Staff_walker::Staff_walker(Staff * s, PScore*ps )
14     : PCursor<Staff_column*> (s->cols)
15 {
16     staff_ = s;
17     pscore_ = ps;
18     break_status = BREAK_END - BREAK_PRE;
19 }
20
21 Moment
22 Staff_walker::when() const
23 {
24     return (* (PCursor<Staff_column*> *) this)->when();
25 }
26
27 void
28 Staff_walker::process()
29 {
30     break_status = BREAK_END - BREAK_PRE;
31     if (ptr()->staff_commands_p_)
32         for (iter_top(*ptr()->staff_commands_p_,i); i.ok(); i++) {
33             process_command(i);
34     }
35
36     process_requests();
37 }
38
39
40 void
41 Staff_walker::process_command(Command*com)
42 {
43     switch (com->code){
44     case BREAK_PRE:
45     case BREAK_MIDDLE:
46     case BREAK_POST:
47     case BREAK_END:
48         (*this)->score_column_l_->set_breakable();
49         break_status = com->code- BREAK_PRE;
50         break;
51     case INTERPRET:
52         do_INTERPRET_command(com);
53         break;
54         
55     case TYPESET:
56         do_TYPESET_command(com);
57         break;
58    
59     default :
60         break;
61     }
62 }
63
64 void
65 Staff_walker::operator++(int i)
66 {
67     PCursor<Staff_column*>::operator++(i);
68     reset();
69 }