lilypond-1.3.118
[lilypond.git] / lily / key-performer.cc
blob7f2e9e171bdc17ae6ec42d6ca70c810bfb5a5374
1 /*
2 key-performer.cc -- implement Key_performer
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--2000 Jan Nieuwenhuizen <janneke@gnu.org>
7 */
9 #include "command-request.hh"
10 #include "audio-item.hh"
11 #include "performer.hh"
13 class Key_performer : public Performer
15 public:
16 VIRTUAL_COPY_CONS(Translator);
18 Key_performer();
19 ~Key_performer();
21 protected:
22 virtual bool try_music (Music* req_l);
23 virtual void create_audio_elements ();
24 virtual void stop_translation_timestep ();
26 private:
27 Key_change_req* key_req_l_;
28 Audio_key* audio_p_;
31 ADD_THIS_TRANSLATOR (Key_performer);
33 Key_performer::Key_performer ()
35 key_req_l_ = 0;
36 audio_p_ = 0;
39 Key_performer::~Key_performer ()
43 void
44 Key_performer::create_audio_elements ()
46 if (key_req_l_ &&
47 gh_list_p (key_req_l_->get_mus_property ("pitch-alist")))
49 audio_p_ = new Audio_key (); // *key_req_l_->key_);
50 Audio_element_info info (audio_p_, key_req_l_);
51 announce_element (info);
52 key_req_l_ = 0;
56 void
57 Key_performer::stop_translation_timestep ()
59 if (audio_p_)
61 play_element (audio_p_);
62 audio_p_ = 0;
66 bool
67 Key_performer::try_music (Music* req_l)
69 if (Key_change_req *kc = dynamic_cast <Key_change_req *> (req_l))
71 if (key_req_l_)
72 warning (_ ("FIXME: key change merge"));
74 key_req_l_ = kc;
75 return true;
78 return false;