]> git.donarmstrong.com Git - lilypond.git/blob - lily/chord-tremolo-iterator.cc
release: 1.5.0
[lilypond.git] / lily / chord-tremolo-iterator.cc
1 /*   
2   chord-tremolo-iterator.cc --  implement Chord_tremolo_iterator
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 2000--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10
11 /*
12   this is culled from various other iterators, but sharing code by subclassing proved to be too difficult.
13  */
14
15 #include "input.hh"
16 #include "chord-tremolo-iterator.hh"
17 #include "repeated-music.hh"
18
19 void
20 Chord_tremolo_iterator::construct_children ()
21 {
22   Repeated_music * rep = dynamic_cast<Repeated_music*> (music_l ());
23   factor_  = Moment (1, rep->repeat_count ());
24   child_iter_p_ = get_iterator_p (rep->body ());
25 }
26
27 Chord_tremolo_iterator::Chord_tremolo_iterator ()
28 {
29   factor_ = 1;
30   child_iter_p_ = 0;
31 }
32
33 Chord_tremolo_iterator::Chord_tremolo_iterator (Chord_tremolo_iterator const &src)
34   : Music_iterator (src)
35 {
36   child_iter_p_ = src.child_iter_p_? src.child_iter_p_->clone () : 0; 
37 }
38
39 void
40 Chord_tremolo_iterator::process (Moment m)
41 {
42   if (!m)
43     {
44       Music_iterator *yeah = try_music (music_l ());
45       if (yeah)
46         set_translator (yeah->report_to_l ());
47       else
48         music_l ()->origin ()->warning (_ ("no one to print a tremolos"));
49     }
50
51   child_iter_p_->process (factor_ * m);
52 }
53
54
55 Moment
56 Chord_tremolo_iterator::pending_moment () const
57 {
58   return child_iter_p_->pending_moment () / factor_;
59 }
60
61 bool
62 Chord_tremolo_iterator::ok () const
63 {
64   return child_iter_p_ && child_iter_p_->ok ();
65 }
66
67 Chord_tremolo_iterator::~Chord_tremolo_iterator ()
68 {
69   delete child_iter_p_;
70 }
71
72 Music_iterator*
73 Chord_tremolo_iterator::try_music_in_children (Music  *m) const
74 {
75   return child_iter_p_->try_music (m);
76 }
77
78
79
80 IMPLEMENT_CTOR_CALLBACK (Chord_tremolo_iterator);
81