]> git.donarmstrong.com Git - lilypond.git/blob - lily/music-list.cc
release: 0.1.11
[lilypond.git] / lily / music-list.cc
1 /*
2   music-list.cc -- implement Music_list, Chord, Voice
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9
10 #include <limits.h>
11 #include "music.hh"
12 #include "debug.hh"
13 #include "music-list.hh"
14
15 Music_list::Music_list (Music_list const&s)
16   : Music (s)
17 {
18   multi_level_i_ = s.multi_level_i_;   
19   for (iter (s.music_p_list_.top(), i); i.ok (); i++)
20         add (i->clone());
21 }
22
23 IMPLEMENT_IS_TYPE_B1(Music_list, Music);
24 IMPLEMENT_IS_TYPE_B1(Voice,Music_list);
25 IMPLEMENT_IS_TYPE_B1(Chord,Music_list);
26
27 MInterval
28 Chord::time_int() const
29 {
30   MInterval m;
31   for (iter (music_p_list_.top(), i); i.ok (); i++)
32         m.unite (i->time_int());
33
34   return m;
35 }
36
37 void
38 Chord::translate (Moment m)
39 {
40   for (iter (music_p_list_.top(), i); i.ok (); i++)
41         i->translate (m); 
42 }
43
44 Chord::Chord()
45 {
46
47 }
48
49 Voice::Voice()
50 {
51   offset_mom_ =0;
52 }
53
54 MInterval
55 Voice::time_int() const
56 {
57   Moment last=0;
58   for (iter (music_p_list_.top(), i); i.ok (); i++) 
59     {
60         MInterval interval = i->time_int();
61         
62       /*
63           c4 <> c4
64       */
65         if (!interval.empty_b())
66             last += interval.length();
67     }
68   return  offset_mom_ + MInterval (0,last);
69 }
70
71 void
72 Voice::translate (Moment dt)
73 {
74   offset_mom_ += dt;
75 }
76
77
78 Music_list::Music_list()
79 {
80   multi_level_i_ = 0;
81 }
82
83 void
84 Music_list::add (Music*m_p)
85 {
86   if (!m_p)
87         return;
88
89   m_p->parent_music_l_ = this;
90   music_p_list_.bottom().add (m_p);
91 }
92
93 void
94 Music_list::transpose (Melodic_req const*rq)
95 {
96   for (iter (music_p_list_.top(),i); i.ok (); i++)
97         i->transpose (rq);    
98 }
99
100 void
101 Music_list::do_print() const
102 {
103 #ifndef NPRINT
104   for (iter (music_p_list_.top(),i); i.ok (); i++)
105         i->print();
106 #endif 
107 }
108
109 IMPLEMENT_IS_TYPE_B1(Request_chord, Chord);
110
111
112 Request_chord::Request_chord()
113 {
114   multi_level_i_ =0;
115 }