+void
+Translator_group::connect_to_context (Context *c)
+{
+ if (context_)
+ {
+ programming_error ("translator group is already connected to context "
+ + context_->context_name ());
+ }
+
+ context_ = c;
+ c->event_source ()->add_listener (GET_LISTENER (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 = unsmob_translator (scm_car (tr_list));
+ tr->connect_to_context (c);
+ }
+}
+
+void
+Translator_group::disconnect_from_context ()
+{
+ for (SCM tr_list = simple_trans_list_; scm_is_pair (tr_list); tr_list = scm_cdr (tr_list))
+ {
+ Translator *tr = unsmob_translator (scm_car (tr_list));
+ tr->disconnect_from_context (context_);
+ }
+ context_->event_source ()->remove_listener (GET_LISTENER (create_child_translator),
+ ly_symbol2scm ("AnnounceNewContext"));
+ context_ = 0;
+ protected_events_ = SCM_EOL;
+}
+