return ret;
}
-IMPLEMENT_LISTENER (Context, acknowledge_infant);
void
Context::acknowledge_infant (SCM sev)
{
infant_event_ = Stream_event::unsmob (sev);
}
-IMPLEMENT_LISTENER (Context, set_property_from_event);
void
Context::set_property_from_event (SCM sev)
{
}
}
-IMPLEMENT_LISTENER (Context, unset_property_from_event);
void
Context::unset_property_from_event (SCM sev)
{
Creates a new context from a CreateContext event, and sends an
AnnounceNewContext event to this context.
*/
-IMPLEMENT_LISTENER (Context, create_context_from_event);
void
Context::create_context_from_event (SCM sev)
{
/* We want to be the first ones to hear our own events. Therefore, wait
before registering events_below_ */
new_context->event_source ()->
- add_listener (GET_LISTENER (new_context->create_context_from_event),
+ add_listener (new_context->GET_LISTENER (Context, create_context_from_event),
ly_symbol2scm ("CreateContext"));
new_context->event_source ()->
- add_listener (GET_LISTENER (new_context->remove_context),
+ add_listener (new_context->GET_LISTENER (Context, remove_context),
ly_symbol2scm ("RemoveContext"));
new_context->event_source ()->
- add_listener (GET_LISTENER (new_context->change_parent),
+ add_listener (new_context->GET_LISTENER (Context, change_parent),
ly_symbol2scm ("ChangeParent"));
new_context->event_source ()->
- add_listener (GET_LISTENER (new_context->set_property_from_event),
+ add_listener (new_context->GET_LISTENER (Context, set_property_from_event),
ly_symbol2scm ("SetProperty"));
new_context->event_source ()->
- add_listener (GET_LISTENER (new_context->unset_property_from_event),
+ add_listener (new_context->GET_LISTENER (Context, unset_property_from_event),
ly_symbol2scm ("UnsetProperty"));
new_context->events_below_->register_as_listener (new_context->event_source_);
/* TODO: This is fairly misplaced. We can fix this when we have taken out all
iterator specific stuff from the Context class */
event_source_->
- add_listener (GET_LISTENER (acknowledge_infant),
+ add_listener (GET_LISTENER (Context, acknowledge_infant),
ly_symbol2scm ("AnnounceNewContext"));
/* The CreateContext creates a new context, and sends an announcement of the
new context through another event. That event will be stored in
ly_symbol2scm ("type"), cdef->get_context_name (),
ly_symbol2scm ("id"), ly_string2scm (id));
event_source_->
- remove_listener (GET_LISTENER (acknowledge_infant),
+ remove_listener (GET_LISTENER (Context, acknowledge_infant),
ly_symbol2scm ("AnnounceNewContext"));
assert (infant_event_);
properties_dict ()->remove (sym);
}
-IMPLEMENT_LISTENER (Context, change_parent);
void
Context::change_parent (SCM sev)
{
/*
Die. The next GC sweep should take care of the actual death.
*/
-IMPLEMENT_LISTENER (Context, remove_context);
void
Context::remove_context (SCM)
{
combination of dispatchers, even if it matches more than one event
type.
*/
-IMPLEMENT_LISTENER (Dispatcher, dispatch);
void
Dispatcher::dispatch (SCM sev)
{
{
int priority = scm_to_int (scm_cdar (disp));
Dispatcher *d = Dispatcher::unsmob (scm_caar (disp));
- d->internal_add_listener (GET_LISTENER (dispatch), ev_class, priority);
+ d->internal_add_listener (GET_LISTENER (Dispatcher, dispatch), ev_class, priority);
}
listen_classes_ = scm_cons (ev_class, listen_classes_);
}
for (SCM disp = dispatchers_; scm_is_pair (disp); disp = scm_cdr (disp))
{
Dispatcher *d = Dispatcher::unsmob (scm_caar (disp));
- d->remove_listener (GET_LISTENER (dispatch), ev_class);
+ d->remove_listener (GET_LISTENER (Dispatcher, dispatch), ev_class);
}
listen_classes_ = scm_delq_x (ev_class, listen_classes_);
}
dispatchers_ = scm_acons (disp->self_scm (), scm_from_int (priority), dispatchers_);
- Listener list = GET_LISTENER (dispatch);
+ Listener list = GET_LISTENER (Dispatcher, dispatch);
for (SCM cl = listen_classes_; scm_is_pair (cl); cl = scm_cdr (cl))
{
disp->internal_add_listener (list, scm_car (cl), priority);
{
dispatchers_ = scm_assq_remove_x (dispatchers_, disp->self_scm ());
- Listener listener = GET_LISTENER (dispatch);
+ Listener listener = GET_LISTENER (Dispatcher, dispatch);
for (SCM cl = listen_classes_; scm_is_pair (cl); cl = scm_cdr (cl))
{
disp->remove_listener (listener, scm_car (cl));
#include "translator-dispatch-list.hh"
#include "warn.hh"
-IMPLEMENT_LISTENER (Engraver_group, override);
void
Engraver_group::override (SCM sev)
{
ev->get_property ("value"));
}
-IMPLEMENT_LISTENER (Engraver_group, revert);
void
Engraver_group::revert (SCM sev)
{
Engraver_group::connect_to_context (Context *c)
{
Translator_group::connect_to_context (c);
- c->event_source ()->add_listener (GET_LISTENER (override), ly_symbol2scm ("Override"));
- c->event_source ()->add_listener (GET_LISTENER (revert), ly_symbol2scm ("Revert"));
+ c->event_source ()->add_listener (GET_LISTENER (Engraver_group, override), ly_symbol2scm ("Override"));
+ c->event_source ()->add_listener (GET_LISTENER (Engraver_group, revert), ly_symbol2scm ("Revert"));
}
void
Engraver_group::disconnect_from_context ()
{
- context ()->event_source ()->remove_listener (GET_LISTENER (override), ly_symbol2scm ("Override"));
- context ()->event_source ()->remove_listener (GET_LISTENER (revert), ly_symbol2scm ("Revert"));
+ context ()->event_source ()->remove_listener (GET_LISTENER (Engraver_group, override), ly_symbol2scm ("Override"));
+ context ()->event_source ()->remove_listener (GET_LISTENER (Engraver_group, revert), ly_symbol2scm ("Revert"));
Translator_group::disconnect_from_context ();
}
/* We only need the most basic stuff to bootstrap the context tree */
event_source ()->add_listener (GET_LISTENER (create_context_from_event),
ly_symbol2scm ("CreateContext"));
- event_source ()->add_listener (GET_LISTENER (prepare),
+ event_source ()->add_listener (GET_LISTENER (Global_context, prepare),
ly_symbol2scm ("Prepare"));
events_below ()->register_as_listener (event_source_);
return extra_mom_pq_.size ();
}
-IMPLEMENT_LISTENER (Global_context, prepare);
void
Global_context::prepare (SCM sev)
{
virtual void finalize ();
TRANSLATOR_DECLARATIONS (Grace_engraver);
- DECLARE_LISTENER (grace_change);
+ void grace_change (SCM);
};
Grace_engraver::Grace_engraver ()
}
// The iterator should usually come before process_music
-IMPLEMENT_LISTENER (Grace_engraver, grace_change);
void
Grace_engraver::grace_change (SCM)
{
if (last_moment_ == Rational (-1))
{
Dispatcher *d = context ()->event_source ();
- d->add_listener (GET_LISTENER (grace_change), ly_symbol2scm ("GraceChange"));
+ d->add_listener (GET_LISTENER (Grace_engraver, grace_change), ly_symbol2scm ("GraceChange"));
}
last_moment_ = now;
}
if (last_moment_ != Rational (-1))
{
Dispatcher *d = context ()->event_source ();
- d->remove_listener (GET_LISTENER (grace_change), ly_symbol2scm ("GraceChange"));
+ d->remove_listener (GET_LISTENER (Grace_engraver, grace_change), ly_symbol2scm ("GraceChange"));
}
}
// UGH! initialises implementation_
friend SCM ly_make_global_translator (SCM);
- DECLARE_LISTENER (set_property_from_event);
- DECLARE_LISTENER (unset_property_from_event);
+ void set_property_from_event (SCM);
+ void unset_property_from_event (SCM);
public:
string id_string () const { return id_string_; }
void internal_set_property (SCM var_sym, SCM value);
Context *create_context (Context_def *, const string&, SCM);
- DECLARE_LISTENER (create_context_from_event);
- DECLARE_LISTENER (acknowledge_infant);
- DECLARE_LISTENER (remove_context);
- DECLARE_LISTENER (change_parent);
+ void create_context_from_event (SCM);
+ void acknowledge_infant (SCM);
+ void remove_context (SCM);
+ void change_parent (SCM);
void disconnect_from_parent ();
void check_removal ();
string context_name () const;
(dist . priority) pair. */
SCM dispatchers_;
SCM listen_classes_;
- DECLARE_LISTENER (dispatch);
+ void dispatch (SCM);
/* priority counter. Listeners with low priority receive events
first. */
int priority_count_;
protected:
vector<Grob_info> announce_infos_;
Drul_array<SCM> acknowledge_hash_table_drul_;
- DECLARE_LISTENER (override);
- DECLARE_LISTENER (revert);
+ void override (SCM);
+ void revert (SCM);
public:
DECLARE_CLASSNAME (Engraver_group);
Engraver_group ();
void apply_finalizations ();
void add_finalization (SCM);
- DECLARE_LISTENER (prepare);
+ void prepare (SCM);
virtual SCM get_output ();
virtual Output_def *get_output_def () const;
virtual Moment now_mom () const;
- declare the method using the DECLARE_LISTENER macro.
class Foo
{
- DECLARE_LISTENER (method);
+ void method (SCM);
...
};
This macro declares the method to take a SCM as parameter, and to
touched.
- implement the method using IMPLEMENT_LISTENER:
- IMPLEMENT_LISTENER (Foo, method)
void method (SCM e)
{
write ("Foo hears an event!");
Foo *foo = (...);
Stream_distributor *d = (...);
- Listener l = GET_LISTENER (foo->method);
+ Listener l = foo->GET_LISTENER (Foo, method);
d->register_listener (l, "EventClass");
Whenever d hears a stream-event ev of class "EventClass",
SCM mark_smob ();
virtual ~Scheme_listener ();
Scheme_listener (SCM callback);
- DECLARE_LISTENER (call);
+ void call (SCM);
private:
SCM callback_;
};
void typeset_all ();
protected:
- DECLARE_LISTENER (finish);
- DECLARE_LISTENER (prepare);
- DECLARE_LISTENER (one_time_step);
+ void finish (SCM);
+ void prepare (SCM);
+ void one_time_step (SCM);
/* Engraver_group_engraver interface */
virtual void connect_to_context (Context *);
Score_performer ();
protected:
- DECLARE_LISTENER (finish);
- DECLARE_LISTENER (prepare);
- DECLARE_LISTENER (one_time_step);
+ void finish (SCM);
+ void prepare (SCM);
+ void one_time_step (SCM);
/* Engraver_group_engraver interface */
virtual void connect_to_context (Context *);
SCM protected_events_;
- DECLARE_LISTENER (create_child_translator);
+ void create_child_translator (SCM);
public:
DECLARE_CLASSNAME (Translator_group);
static void _internal_declare_ ## m (); \
private: \
static Listener _get_ ## m ## _listener (void *, SCM); \
-DECLARE_LISTENER (_listen_scm_ ## m);
+void _listen_scm_ ## m (SCM);
#define DECLARE_ACKNOWLEDGER(x) public : void acknowledge_ ## x (Grob_info); protected:
#define DECLARE_END_ACKNOWLEDGER(x) public : void acknowledge_end_ ## x (Grob_info); protected:
{ \
cl *obj = (cl *) me; \
(void) unused; \
- return obj->GET_LISTENER (_listen_scm_ ## m); \
+ return obj->GET_LISTENER (cl, _listen_scm_ ## m); \
} \
\
-IMPLEMENT_LISTENER (cl, _listen_scm_ ## m) \
void \
cl::_listen_scm_ ## m (SCM sev) \
{ \
private:
bool start_new_syllable () const;
Context *find_voice ();
- DECLARE_LISTENER (set_busy);
- DECLARE_LISTENER (check_new_context);
+ void set_busy (SCM);
+ void check_new_context (SCM);
bool music_found_;
bool lyrics_found_;
associatedVoice switching, this routine may be triggered for
the wrong music_context_
*/
-IMPLEMENT_LISTENER (Lyric_combine_music_iterator, set_busy)
void
Lyric_combine_music_iterator::set_busy (SCM se)
{
if (music_context_)
{
music_context_->events_below ()->
- remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("rhythmic-event"));
+ remove_listener (GET_LISTENER (Lyric_combine_music_iterator, set_busy), ly_symbol2scm ("rhythmic-event"));
}
music_context_ = to;
if (to)
{
- to->events_below ()->add_listener (GET_LISTENER (set_busy),
+ to->events_below ()->add_listener (GET_LISTENER (Lyric_combine_music_iterator, set_busy),
ly_symbol2scm ("rhythmic-event"));
}
}
delayed when voices are created implicitly.
*/
Global_context *g = get_outlet ()->get_global_context ();
- g->events_below ()->add_listener (GET_LISTENER (check_new_context), ly_symbol2scm ("CreateContext"));
+ g->events_below ()->add_listener (GET_LISTENER (Lyric_combine_music_iterator, check_new_context), ly_symbol2scm ("CreateContext"));
/*
We do not create a Lyrics context, because the user might
*/
}
-IMPLEMENT_LISTENER (Lyric_combine_music_iterator, check_new_context)
void
Lyric_combine_music_iterator::check_new_context (SCM /*sev*/)
{
{
public:
TRANSLATOR_DECLARATIONS (Midi_control_function_performer);
- DECLARE_LISTENER (announce_function_value_change);
+ void announce_function_value_change (SCM);
~Midi_control_function_performer ();
void connect_to_context (Context *c);
Midi_control_function_performer::connect_to_context (Context *c)
{
c->events_below ()->
- add_listener (GET_LISTENER (announce_function_value_change),
+ add_listener (GET_LISTENER (Midi_control_function_performer, announce_function_value_change),
ly_symbol2scm ("SetProperty"));
}
Midi_control_function_performer::disconnect_from_context (Context *c)
{
c->events_below ()->
- remove_listener (GET_LISTENER (announce_function_value_change),
+ remove_listener (GET_LISTENER (Midi_control_function_performer, announce_function_value_change),
ly_symbol2scm ("SetProperty"));
}
-IMPLEMENT_LISTENER (Midi_control_function_performer,
- announce_function_value_change)
void
Midi_control_function_performer::announce_function_value_change (SCM sev)
{
private:
/* used by try_process */
- DECLARE_LISTENER (set_busy);
+ void set_busy (SCM);
bool busy_;
bool notice_busy_;
{
Context *c = handles_[i].get_context ();
if (c->is_alias (ly_symbol2scm ("Voice")))
- c->event_source ()->remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("music-event"));
+ c->event_source ()->remove_listener (GET_LISTENER (Part_combine_iterator, set_busy), ly_symbol2scm ("music-event"));
handles_[i].set_context (0);
}
}
c = c->find_create_context (type, outlet_names_[i], SCM_EOL);
handles_[i].set_context (c);
if (c->is_alias (ly_symbol2scm ("Voice")))
- c->event_source ()->add_listener (GET_LISTENER (set_busy), ly_symbol2scm ("music-event"));
+ c->event_source ()->add_listener (GET_LISTENER (Part_combine_iterator, set_busy), ly_symbol2scm ("music-event"));
}
SCM lst = get_music ()->get_property ("elements");
set_context (shared);
}
-IMPLEMENT_LISTENER (Part_combine_iterator, set_busy);
void
Part_combine_iterator::set_busy (SCM se)
{
#include "scheme-listener.hh"
-IMPLEMENT_LISTENER (Scheme_listener, call)
void
Scheme_listener::call (SCM ev)
{
Engraver_group::derived_mark ();
}
-IMPLEMENT_LISTENER (Score_engraver, prepare);
void
Score_engraver::prepare (SCM)
{
precomputed_recurse_over_translators (context (), START_TRANSLATION_TIMESTEP, DOWN);
}
-IMPLEMENT_LISTENER (Score_engraver, finish);
void
Score_engraver::finish (SCM)
{
Engraver_group::connect_to_context (c);
Dispatcher *d = c->get_global_context ()->event_source ();
- d->add_listener (GET_LISTENER (one_time_step), ly_symbol2scm ("OneTimeStep"));
- d->add_listener (GET_LISTENER (prepare), ly_symbol2scm ("Prepare"));
- d->add_listener (GET_LISTENER (finish), ly_symbol2scm ("Finish"));
+ d->add_listener (GET_LISTENER (Score_engraver, one_time_step), ly_symbol2scm ("OneTimeStep"));
+ d->add_listener (GET_LISTENER (Score_engraver, prepare), ly_symbol2scm ("Prepare"));
+ d->add_listener (GET_LISTENER (Score_engraver, finish), ly_symbol2scm ("Finish"));
}
/*
Score_engraver::disconnect_from_context ()
{
Dispatcher *d = context ()->get_global_context ()->event_source ();
- d->remove_listener (GET_LISTENER (one_time_step), ly_symbol2scm ("OneTimeStep"));
- d->remove_listener (GET_LISTENER (prepare), ly_symbol2scm ("Prepare"));
- d->remove_listener (GET_LISTENER (finish), ly_symbol2scm ("Finish"));
+ d->remove_listener (GET_LISTENER (Score_engraver, one_time_step), ly_symbol2scm ("OneTimeStep"));
+ d->remove_listener (GET_LISTENER (Score_engraver, prepare), ly_symbol2scm ("Prepare"));
+ d->remove_listener (GET_LISTENER (Score_engraver, finish), ly_symbol2scm ("Finish"));
Engraver_group::disconnect_from_context ();
}
typeset_all ();
}
-IMPLEMENT_LISTENER (Score_engraver, one_time_step);
void
Score_engraver::one_time_step (SCM)
{
Performer_group::connect_to_context (c);
Dispatcher *d = c->get_global_context ()->event_source ();
- d->add_listener (GET_LISTENER (one_time_step), ly_symbol2scm ("OneTimeStep"));
- d->add_listener (GET_LISTENER (prepare), ly_symbol2scm ("Prepare"));
- d->add_listener (GET_LISTENER (finish), ly_symbol2scm ("Finish"));
+ d->add_listener (GET_LISTENER (Score_performer, one_time_step), ly_symbol2scm ("OneTimeStep"));
+ d->add_listener (GET_LISTENER (Score_performer, prepare), ly_symbol2scm ("Prepare"));
+ d->add_listener (GET_LISTENER (Score_performer, finish), ly_symbol2scm ("Finish"));
}
void
Score_performer::disconnect_from_context ()
{
Dispatcher *d = context ()->get_global_context ()->event_source ();
- d->remove_listener (GET_LISTENER (one_time_step), ly_symbol2scm ("OneTimeStep"));
- d->remove_listener (GET_LISTENER (prepare), ly_symbol2scm ("Prepare"));
- d->remove_listener (GET_LISTENER (finish), ly_symbol2scm ("Finish"));
+ d->remove_listener (GET_LISTENER (Score_performer, one_time_step), ly_symbol2scm ("OneTimeStep"));
+ d->remove_listener (GET_LISTENER (Score_performer, prepare), ly_symbol2scm ("Prepare"));
+ d->remove_listener (GET_LISTENER (Score_performer, finish), ly_symbol2scm ("Finish"));
Performer_group::disconnect_from_context ();
}
-IMPLEMENT_LISTENER (Score_performer, prepare);
void
Score_performer::prepare (SCM sev)
{
precomputed_recurse_over_translators (context (), START_TRANSLATION_TIMESTEP, UP);
}
-IMPLEMENT_LISTENER (Score_performer, finish);
void
Score_performer::finish (SCM)
{
UP);
}
-IMPLEMENT_LISTENER (Score_performer, one_time_step);
void
Score_performer::one_time_step (SCM)
{
}
context_ = c;
- c->event_source ()->add_listener (GET_LISTENER (create_child_translator),
+ c->event_source ()->add_listener (GET_LISTENER (Translator_group, create_child_translator),
ly_symbol2scm ("AnnounceNewContext"));
for (SCM tr_list = simple_trans_list_; scm_is_pair (tr_list); tr_list = scm_cdr (tr_list))
{
Translator *tr = Translator::unsmob (scm_car (tr_list));
tr->disconnect_from_context (context_);
}
- context_->event_source ()->remove_listener (GET_LISTENER (create_child_translator),
+ context_->event_source ()->remove_listener (GET_LISTENER (Translator_group, create_child_translator),
ly_symbol2scm ("AnnounceNewContext"));
context_ = 0;
protected_events_ = SCM_EOL;
Create a new translator for a newly created child context. Triggered
by AnnounceNewContext events.
*/
-IMPLEMENT_LISTENER (Translator_group, create_child_translator);
void
Translator_group::create_child_translator (SCM sev)
{