X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpart-combine-engraver.cc;h=be9564685d2007314ab115236d45b3a7e2f515bb;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=2938f281d4c855672b58ddb0546be8e7876471cb;hpb=163225c0cbb1055dfd3614615350ab9f3aaba74c;p=lilypond.git diff --git a/lily/part-combine-engraver.cc b/lily/part-combine-engraver.cc index 2938f281d4..be9564685d 100644 --- a/lily/part-combine-engraver.cc +++ b/lily/part-combine-engraver.cc @@ -2,45 +2,50 @@ part-combine-engraver.cc -- implement PC-engraver source file of the GNU LilyPond music typesetter - - (c) 2000--2004 Jan Nieuwenhuizen + + (c) 2000--2008 Jan Nieuwenhuizen Han-Wen Nienhuys - */ #include "engraver.hh" -#include "text-item.hh" +#include "multi-measure-rest.hh" #include "note-head.hh" -#include "stem.hh" #include "side-position-interface.hh" -#include "multi-measure-rest.hh" +#include "stem.hh" +#include "stream-event.hh" +#include "text-interface.hh" +#include "item.hh" + +#include "translator.icc" class Part_combine_engraver : public Engraver { TRANSLATOR_DECLARATIONS (Part_combine_engraver); protected: - virtual void acknowledge_grob (Grob_info); - virtual void process_music (); - virtual void stop_translation_timestep (); - virtual bool try_music (Music *); + DECLARE_ACKNOWLEDGER (note_head); + DECLARE_ACKNOWLEDGER (stem); + + DECLARE_TRANSLATOR_LISTENER (part_combine); + void process_music (); + void stop_translation_timestep (); private: Item *text_; - Music *event_; + Stream_event *event_; }; -bool -Part_combine_engraver::try_music (Music*m) +IMPLEMENT_TRANSLATOR_LISTENER (Part_combine_engraver, part_combine); +void +Part_combine_engraver::listen_part_combine (Stream_event *ev) { - event_ = m; - return true; + ASSIGN_EVENT_ONCE (event_, ev); } Part_combine_engraver::Part_combine_engraver () { text_ = 0; - event_ = 0; + event_ = 0; } void @@ -49,56 +54,66 @@ Part_combine_engraver::process_music () if (event_ && to_boolean (get_property ("printPartCombineTexts"))) { - SCM what = event_->get_property ("part-combine-status"); + SCM what = event_->get_property ("class"); SCM text = SCM_EOL; - if (what == ly_symbol2scm ("solo1")) + if (what == ly_symbol2scm ("solo-one-event")) text = get_property ("soloText"); - else if (what== ly_symbol2scm ("solo2")) + else if (what == ly_symbol2scm ("solo-two-event")) text = get_property ("soloIIText"); - else if (what == ly_symbol2scm ("unisono")) + else if (what == ly_symbol2scm ("unisono-event")) text = get_property ("aDueText"); - if (Text_interface::markup_p (text)) + if (Text_interface::is_markup (text)) { - text_ = make_item ("CombineTextScript", event_->self_scm () ); + text_ = make_item ("CombineTextScript", event_->self_scm ()); text_->set_property ("text", text); } } } void -Part_combine_engraver::acknowledge_grob (Grob_info i) +Part_combine_engraver::acknowledge_note_head (Grob_info i) { if (text_) { - if (Note_head::has_interface (i.grob_)) - { - Grob*t = text_; - Side_position_interface::add_support (t, i.grob_); - if (Side_position_interface::get_axis (t) == X_AXIS - && !t->get_parent (Y_AXIS)) - t->set_parent (i.grob_, Y_AXIS); - } - if (Stem::has_interface (i.grob_)) - { - Side_position_interface::add_support (text_, i.grob_); - } + Grob *t = text_; + Side_position_interface::add_support (t, i.grob ()); + if (Side_position_interface::get_axis (t) == X_AXIS + && !t->get_parent (Y_AXIS)) + t->set_parent (i.grob (), Y_AXIS); } } -void +void +Part_combine_engraver::acknowledge_stem (Grob_info i) +{ + if (text_) + Side_position_interface::add_support (text_, i.grob ()); +} + +void Part_combine_engraver::stop_translation_timestep () { - text_ = 0; + text_ = 0; event_ = 0; } -ENTER_DESCRIPTION (Part_combine_engraver, -/* descr */ "Part combine engraver for orchestral scores: " - "Print markings a2, Solo, Solo II, and unisono ", -/* creats*/ "CombineTextScript", -/* accepts */ "part-combine-event", -/* acks */ "multi-measure-rest-interface " -"slur-interface stem-interface note-head-interface" -,/* reads */ "printPartCombineTexts", -/* write */ ""); +ADD_ACKNOWLEDGER (Part_combine_engraver, note_head); +ADD_ACKNOWLEDGER (Part_combine_engraver, stem); +ADD_TRANSLATOR (Part_combine_engraver, + /* doc */ + "Part combine engraver for orchestral scores: Print markings" + " @q{a2}, @q{Solo}, @q{Solo II}, and @q{unisono}.", + + /* create */ + "CombineTextScript ", + + /* read */ + "printPartCombineTexts " + "soloText " + "soloIIText " + "aDueText ", + + /* write */ + "" + );