4 #include "staffwalker.hh"
7 #include "staffcommands.hh"
9 #include "inputcommands.hh"
10 #include "inputcommand.hh"
14 Staff::do_commands(PointerList
<Input_command
*> score_wide
,
15 PointerList
<Input_command
*> staff_wide
)
17 Input_commands commands
;
19 // bring in commands from voices.
20 for (iter_top(voices
, i
); i
.ok(); i
++) {
21 Moment here
= i
->start
;
22 for (iter_top(i
->elts
, j
); j
.ok(); j
++) {
23 for (iter_top(j
->reqs
, k
); k
.ok(); k
++) {
25 commands
.find_moment(here
);
26 commands
.add(*k
->command()->com_p_
,
27 score_l_
->markers_assoc_
);
33 for (iter_top(score_wide
,i
); i
.ok(); i
++)
34 commands
.add(**i
, score_l_
->markers_assoc_
);
35 for (iter_top(staff_wide
,i
); i
.ok(); i
++)
36 commands
.add(**i
, score_l_
->markers_assoc_
);
42 Staff::add(PointerList
<Voice
*> &l
)
44 for (iter_top(l
,i
); i
.ok(); i
++)
45 voices
.bottom().add(i
);
49 Staff::truncate_cols(Moment l
)
52 for (; i
->when() > l
; i
=cols
.bottom()) {
53 Staff_column
* col_p
= i
.get();
54 assert(col_p
->when() > l
);
62 return score_l_
->paper_p_
;
70 if (!i
->score_column_l_
->used())
78 Staff::get_col(Moment w
, bool mus
)
83 if (i
->musical_b() == mus
) {
84 assert( score_l_
->find_col(w
,mus
).ptr() == i
->score_column_l_
);
89 } else if (i
->when() > w
)
92 /* post: *sc > *->score_column_l_ || !i.ok() */
94 Score_column
* sccol_l
= score_l_
->find_col(w
,mus
);
95 Staff_column
* newst
= create_col(sccol_l
);
98 cols
.bottom().add(newst
);
109 // making a fix at 2:30 am, with several beers drunk.
111 if ((i
-1).ok()&& (i
-1)->when() == newst
->when()) {
121 Staff::get_marks(Array
<String
>&s_arr
, Array
<Moment
>&m_arr
)
123 for (iter_top(voices
,i
); i
.ok(); i
++) {
124 Moment now
= i
->start
;
125 for (iter_top(i
->elts
,j
); j
.ok(); j
++) {
126 for (iter_top(j
->reqs
, k
); k
.ok(); k
++) {
127 if (k
->mark()) { // ugh. 4 levels
128 s_arr
.push(k
->mark()->mark_str_
);
137 put all stuff grouped vertically in the Staff_cols
140 Staff::setup_staffcols()
142 for (iter_top(voices
,i
); i
.ok(); i
++) {
144 Moment now
= i
->start
;
145 for (iter_top(i
->elts
,j
); j
.ok(); j
++) {
147 Staff_column
*s_l
= get_col(now
, true);
148 assert(now
== s_l
->when());
155 set_time_descriptions();
161 Staff::set_time_descriptions()
163 Time_description
t(0,0);
164 for (iter_top(cols
,i
); i
.ok(); i
++) {
165 if (i
->staff_commands_p_
)
166 t
= i
->staff_commands_p_
->tdescription_
;
167 else if (i
->tdescription_
)
168 t
= *i
->tdescription_
;
169 if(!i
->tdescription_
) {
170 i
->tdescription_
= new Time_description(i
->when() - t
.when
,&t
);
192 for (; i
.ok(); j
++,i
++) {
193 if ( j
->when() == i
->when())
194 assert(!j
->musical_b() && i
->musical_b());
196 assert(j
->when () < i
->when() );
207 for (iter_top(voices
,i
); i
.ok(); i
++) {
219 for (iter_top(voices
,i
); i
.ok(); i
++) {