X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fengraver-group.cc;h=525c1fa85765cba6fe01008d52eb76c04c15f4c0;hb=6f664e0e318a1651f6fe9317a842bf9c7f476f08;hp=71533cd116cd8e353d853285578ed287fc3344c6;hpb=d4f38c4239f67dd08d616794a9cdc47a30a86b6a;p=lilypond.git diff --git a/lily/engraver-group.cc b/lily/engraver-group.cc index 71533cd116..525c1fa857 100644 --- a/lily/engraver-group.cc +++ b/lily/engraver-group.cc @@ -6,13 +6,54 @@ (c) 1997--2006 Han-Wen Nienhuys */ +#include "context.hh" +#include "dispatcher.hh" #include "engraver-group.hh" - -#include "warn.hh" -#include "paper-score.hh" #include "grob.hh" -#include "context.hh" +#include "paper-score.hh" +#include "stream-event.hh" #include "translator-dispatch-list.hh" +#include "warn.hh" + +IMPLEMENT_LISTENER (Engraver_group, override); +void +Engraver_group::override (SCM sev) +{ + Stream_event *ev = unsmob_stream_event (sev); + + execute_general_pushpop_property (context (), + ev->get_property ("symbol"), + ev->get_property ("property-path"), + ev->get_property ("value")); +} + +IMPLEMENT_LISTENER (Engraver_group, revert); +void +Engraver_group::revert (SCM sev) +{ + Stream_event *ev = unsmob_stream_event (sev); + + execute_general_pushpop_property (context (), + ev->get_property ("symbol"), + ev->get_property ("property-path"), + SCM_UNDEFINED); +} + +void +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")); +} + +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")); + Translator_group::disconnect_from_context (); +} void Engraver_group::announce_grob (Grob_info info) @@ -140,7 +181,6 @@ Engraver_group::Engraver_group () ADD_TRANSLATOR_GROUP (Engraver_group, /* doc */ "A group of engravers taken together", /* create */ "", - /* accept */ "", /* read */ "", /* write */ "");