4
4
source file of the GNU LilyPond music typesetter
6
(c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
6
(c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
10
#include "lily-guile.hh"
11
9
#include "paper-column.hh"
12
#include "paper-def.hh"
10
#include "output-def.hh"
13
11
#include "side-position-interface.hh"
16
12
#include "engraver.hh"
17
13
#include "context.hh"
14
#include "grob-array.hh"
16
#include "translator.icc"
21
TODO: detect the top staff (stavesFound), and acknowledge staff-group
22
system-start-delims. If we find these, and the top staff is in the
23
staff-group, add padding to the bar number.
19
TODO: detect the top staff (stavesFound), and acknowledge staff-group
20
system-start-delims. If we find these, and the top staff is in the
21
staff-group, add padding to the bar number.
28
24
class Bar_number_engraver : public Engraver
33
virtual void stop_translation_timestep ();
34
virtual void acknowledge_grob (Grob_info);
35
virtual void process_music ();
29
void stop_translation_timestep ();
30
DECLARE_ACKNOWLEDGER (break_aligned);
31
DECLARE_ACKNOWLEDGER (break_alignment);
32
void process_music ();
36
33
void create_items ();
37
TRANSLATOR_DECLARATIONS (Bar_number_engraver );
34
TRANSLATOR_DECLARATIONS (Bar_number_engraver);
42
38
Bar_number_engraver::process_music ()
44
40
// todo include (&&!time->cadenza_b_)
46
42
SCM wb = get_property ("whichBar");
44
if (scm_is_string (wb))
50
SCM smp = get_property ("measurePosition");
52
Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
46
Moment mp (robust_scm2moment (get_property ("measurePosition"), Moment (0)));
53
47
if (mp.main_part_ == Rational (0))
55
49
SCM bn = get_property ("currentBarNumber");
56
50
SCM proc = get_property ("barNumberVisibility");
57
if (gh_number_p (bn) && gh_procedure_p (proc)
58
&& to_boolean (gh_call1(proc, bn)))
51
if (scm_is_number (bn) && ly_is_procedure (proc)
52
&& to_boolean (scm_call_1 (proc, bn)))
62
56
text_->set_property
63
("text", scm_makfrom0str (to_string (gh_scm2int (bn)).to_str0 ()));
57
("text", scm_number_to_string (bn, scm_from_int (10)));
72
63
Bar_number_engraver::Bar_number_engraver ()
70
see rehearsal mark comments.
79
Bar_number_engraver::acknowledge_grob (Grob_info inf)
73
Bar_number_engraver::acknowledge_break_aligned (Grob_info inf)
75
Grob *s = inf.grob ();
83
&& dynamic_cast<Item*> (s)
84
&& s->get_property ("break-align-symbol") == ly_symbol2scm ("left-edge"))
77
&& !text_->get_parent (X_AXIS)
78
&& dynamic_cast<Item *> (s)
79
&& (s->get_property_data (ly_symbol2scm ("break-align-symbol"))
80
== text_->get_property_data (ly_symbol2scm ("break-align-symbol"))))
87
83
By default this would land on the Paper_column -- so why
91
Bar_number_engraver::acknowledge_break_alignment (Grob_info inf)
93
Grob *s = inf.grob ();
95
&& dynamic_cast<Item *> (s))
97
text_->set_parent (s, X_AXIS);
94
102
Bar_number_engraver::stop_translation_timestep ()
98
text_->set_property ("side-support-elements", get_property ("stavesFound"));
106
text_->set_object ("side-support-elements",
107
grob_list_to_grob_array (get_property ("stavesFound")));
106
113
Bar_number_engraver::create_items ()
111
text_ = make_item ("BarNumber");
112
Side_position_interface::set_axis (text_,Y_AXIS);
114
announce_grob (text_, SCM_EOL);
118
text_ = make_item ("BarNumber", SCM_EOL);
117
ENTER_DESCRIPTION (Bar_number_engraver,
118
/* descr */ "A bar number is created whenever measurePosition is zero. It is\n"
119
"put on top of all staves, and appears only at left side of the staff. "
120
"The staves are taken from @code{stavesFound}, which is maintained by "
121
"@code{@ref{Staff_collecting_engraver}}. "
124
/* creats*/ "BarNumber",
126
/* acks */ "break-aligned-interface",
127
/* reads */ "currentBarNumber stavesFound barNumberVisibility" ,
122
ADD_ACKNOWLEDGER(Bar_number_engraver,break_aligned);
123
ADD_ACKNOWLEDGER(Bar_number_engraver,break_alignment);
125
ADD_TRANSLATOR (Bar_number_engraver,
126
/* doc */ "A bar number is created whenever measurePosition "
127
"is zero and when there is a bar line (ie. when @code{whichBar} is set. "
129
"put on top of all staves, and appears only at left side of the staff. "
130
"The staves are taken from @code{stavesFound}, which is maintained by "
131
"@code{@ref{Staff_collecting_engraver}}. ",
133
/* create */ "BarNumber",
139
"barNumberVisibility ",