class Beam_engraver : public Engraver
{
public:
- DECLARE_ACKNOWLEDGER (stem);
- DECLARE_ACKNOWLEDGER (rest);
+ void acknowledge_stem (Grob_info);
+ void acknowledge_rest (Grob_info);
+ void listen_beam (Stream_event *);
protected:
Stream_event *start_ev_;
virtual bool valid_start_point ();
virtual bool valid_end_point ();
- DECLARE_TRANSLATOR_LISTENER (beam);
public:
TRANSLATOR_DECLARATIONS (Beam_engraver);
};
prev_start_ev_ = 0;
}
-IMPLEMENT_TRANSLATOR_LISTENER (Beam_engraver, beam);
void
Beam_engraver::listen_beam (Stream_event *ev)
{
last_stem_added_at_ = now;
- Duration *stem_duration = Duration::unsmob (ev->get_property ("duration"));
+ Duration *stem_duration = unsmob<Duration> (ev->get_property ("duration"));
int durlog = stem_duration->duration_log ();
- //int durlog = Duration::unsmob (ev->get_property ("duration"))->duration_log ();
+ //int durlog = unsmob<Duration> (ev->get_property ("duration"))->duration_log ();
if (durlog <= 2)
{
ev->origin ()->warning (_ ("stem does not fit in beam"));
Beam::add_stem (beam_, stem);
}
-ADD_ACKNOWLEDGER (Beam_engraver, stem);
-ADD_ACKNOWLEDGER (Beam_engraver, rest);
+
+void
+Beam_engraver::boot ()
+{
+ ADD_LISTENER (Beam_engraver, beam);
+ ADD_ACKNOWLEDGER (Beam_engraver, stem);
+ ADD_ACKNOWLEDGER (Beam_engraver, rest);
+}
ADD_TRANSLATOR (Beam_engraver,
/* doc */
{
public:
TRANSLATOR_DECLARATIONS (Grace_beam_engraver);
-
- DECLARE_TRANSLATOR_LISTENER (beam);
+ TRANSLATOR_INHERIT (Beam_engraver);
protected:
virtual bool valid_start_point ();
return beam_ && valid_start_point ();
}
-/*
- Ugh, C&P code.
- */
-IMPLEMENT_TRANSLATOR_LISTENER (Grace_beam_engraver, beam);
void
-Grace_beam_engraver::listen_beam (Stream_event *ev)
+Grace_beam_engraver::boot ()
{
- Direction d = to_dir (ev->get_property ("span-direction"));
-
- if (d == START && valid_start_point ())
- start_ev_ = ev;
- else if (d == STOP && valid_end_point ())
- stop_ev_ = ev;
+ ADD_LISTENER (Grace_beam_engraver, beam);
+ ADD_ACKNOWLEDGER (Grace_beam_engraver, stem);
+ ADD_ACKNOWLEDGER (Grace_beam_engraver, rest);
}
-ADD_ACKNOWLEDGER (Grace_beam_engraver, stem);
-ADD_ACKNOWLEDGER (Grace_beam_engraver, rest);
-
ADD_TRANSLATOR (Grace_beam_engraver,
/* doc */
"Handle @code{Beam} events by engraving beams. If omitted,"