]> git.donarmstrong.com Git - lilypond.git/blob - lily/key-performer.cc
release: 1.3.118
[lilypond.git] / lily / key-performer.cc
1 /*
2   key-performer.cc -- implement Key_performer
3
4   source file of the GNU LilyPond music typesetter
5
6   (c)  1997--2000 Jan Nieuwenhuizen <janneke@gnu.org>
7 */
8
9 #include "command-request.hh"
10 #include "audio-item.hh"
11 #include "performer.hh"
12
13 class Key_performer : public Performer
14 {
15 public:
16   VIRTUAL_COPY_CONS(Translator);
17   
18   Key_performer();
19   ~Key_performer();
20
21 protected:
22   virtual bool try_music (Music* req_l);
23   virtual void create_audio_elements ();
24   virtual void stop_translation_timestep ();
25
26 private:
27   Key_change_req* key_req_l_;
28   Audio_key* audio_p_;
29 };
30
31 ADD_THIS_TRANSLATOR (Key_performer);
32
33 Key_performer::Key_performer ()
34 {
35   key_req_l_ = 0;
36   audio_p_ = 0;
37 }
38
39 Key_performer::~Key_performer ()
40 {
41 }
42
43 void
44 Key_performer::create_audio_elements ()
45 {
46   if (key_req_l_ &&
47       gh_list_p (key_req_l_->get_mus_property ("pitch-alist")))
48     {
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;
53     }
54 }
55
56 void
57 Key_performer::stop_translation_timestep ()
58 {
59   if (audio_p_)
60     {
61       play_element (audio_p_);
62       audio_p_ = 0;
63     }
64 }
65
66 bool
67 Key_performer::try_music (Music* req_l)
68 {
69   if (Key_change_req *kc = dynamic_cast <Key_change_req *> (req_l))
70     {
71       if (key_req_l_)
72         warning (_ ("FIXME: key change merge"));
73
74       key_req_l_ = kc;
75       return true;
76     }
77
78   return false;
79 }
80