6 Staff::Staff(Staff const&src)
8 PL_copy(voices,src.voices);
9 PL_copy(commands,src.commands);
10 assert(!cols.size()); // cols is a runtime field.
13 pscore_ = src.pscore_;
18 return score_->paper_;
24 PCursor<Staff_column *> stc(cols);
26 if (!stc->score_column->used())
34 Staff::get_col(Real w, bool mus)
36 Score_column* sc = score_->find_col(w,mus);
37 assert(sc->when == w);
38 PCursor<Staff_column *> stc(cols);
39 for (; stc.ok(); stc++) {
40 if (*stc->score_column > *sc) // too far
42 if (sc == stc->score_column)
45 Staff_column* newst = create_col(sc);
48 cols.bottom().add(newst);
57 if ((stc-1)->when() == newst->when()) {
68 Staff::add_voice(Voice *v)
70 voices.bottom().add(v);
74 put all stuff grouped vertically in the Staff_cols
77 Staff::setup_staffcols()
80 for (PCursor<Voice*> vc(voices); vc.ok(); vc++) {
83 for (PCursor<Voice_element *> ve(vc->elts); ve.ok(); ve++) {
85 Staff_column *sc=get_col(now,true);
91 for (PCursor<Command*> cc(commands); cc.ok(); cc++) {
92 Staff_column *sc=get_col(cc->when,false);
93 sc->s_commands.add(cc);
97 /// merge commands from score
99 Staff::add_commands(PointerList<Command*> const &cl)
101 PCursor<Command*> score_c(cl);
102 PCursor<Command*> cc(commands);
104 while (score_c.ok()) {
105 while (cc.ok() && cc->when <= score_c->when)
108 Command*nc = new Command (*(* score_c));
110 // cc->when > score_c->when
113 commands.bottom().add( nc);
114 cc = commands.bottom();
119 // now integrate break commands with other commands.
120 // maybe do this in derived functions.
128 for (PCursor<Staff_column*> sc(cols); sc.ok(); sc++) {
129 sc->process_commands();
130 sc->process_requests();
151 for (PCursor<Voice*> vc(voices); vc.ok(); vc++) {
152 l = MAX(l, vc->last());
163 for (PCursor<Voice*> vc(voices); vc.ok(); vc++) {