]> git.donarmstrong.com Git - lilypond.git/blob - lily/music-list.cc
release: 0.1.1
[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     return m;
34 }
35
36 void
37 Chord::translate(Moment m)
38 {
39     for (iter(music_p_list_.top(), i); i.ok(); i++)
40         i->translate(m); 
41 }
42
43 Chord::Chord()
44 {
45
46 }
47
48 Voice::Voice()
49 {
50     offset_mom_ =0;
51 }
52
53 MInterval
54 Voice::time_int() const
55 {
56     Moment last=0;
57     for (iter(music_p_list_.top(), i); i.ok(); i++)
58         last += i->time_int().length();
59     return  offset_mom_ + MInterval(0,last);
60 }
61
62 void
63 Voice::translate(Moment dt)
64 {
65     offset_mom_ += dt;
66 }
67
68
69 Music_list::Music_list()
70 {
71     multi_level_i_ = 0;
72 }
73
74 void
75 Music_list::add(Music*m_p)
76 {
77     if (!m_p)
78         return;
79
80     m_p->parent_music_l_ = this;
81     music_p_list_.bottom().add(m_p);
82 }
83
84 void
85 Music_list::transpose(Melodic_req const*rq)
86 {
87     for (iter(music_p_list_.top(),i); i.ok(); i++)
88         i->transpose(rq);    
89 }
90
91 void
92 Music_list::do_print()const
93 {
94 #ifndef NPRINT
95     for (iter(music_p_list_.top(),i); i.ok(); i++)
96         i->print();
97 #endif 
98 }
99
100 IMPLEMENT_IS_TYPE_B1(Request_chord, Chord);
101
102
103 Request_chord::Request_chord()
104 {
105     multi_level_i_ =0;
106 }