]> git.donarmstrong.com Git - lilypond.git/blob - lily/auto-plet-engraver.cc
254f029f59a6b5e9e554f2e840bb3880fc5c3026
[lilypond.git] / lily / auto-plet-engraver.cc
1 /*   
2   auto-plet-engraver.cc --  implement Auto_plet_engraver
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10 #include "auto-plet-engraver.hh"
11 #include "command-request.hh"
12 #include "plet-spanner.hh"
13 #include "note-column.hh"
14
15 bool
16 Tuplet_engraver::do_try_request (Request *r)
17 {
18   Command_req * c = dynamic_cast <Command_req *> (r);
19   if (!(c &&
20       dynamic_cast <Bracket_req *> (c)))
21     {
22       return false;
23     }
24
25   Bracket_req * b = dynamic_cast <Bracket_req *> (c);
26   bracket_req_arr_.push (b);
27   return true;
28 }
29
30 void
31 Tuplet_engraver::do_process_requests ()
32 {
33   int stopcount =0;
34   Link_array<Plet_spanner> start_arr;
35   
36   for (int i=0; i < bracket_req_arr_.size (); i++)
37     {
38       if (bracket_req_arr_[i]->spantype == Span_req::STOP)
39         stopcount++;
40       if (bracket_req_arr_[i]->spantype == Span_req::START)
41         {
42           Plet_spanner* glep = new Plet_spanner ();
43           start_arr.push  (glep);
44 // lots of stuff does info->elem_l_->is_type ()
45 //        announce_element (Score_element_info (glep, bracket_req_arr_[i]));
46         }
47     }
48
49   for (; stopcount--; )
50     {
51       Plet_spanner* glep = started_span_p_arr_.pop ();
52       stop_now_span_p_arr_.push (glep);
53     }
54
55   for (int i=0; i < start_arr.size (); i++)
56     started_span_p_arr_.push (start_arr.pop ());
57 }
58
59 void
60 Tuplet_engraver::acknowledge_element (Score_element_info i)
61 {
62   if (i.elem_l_->is_type_b (Note_column::static_name ()))
63     {
64       Note_column *nc = (Note_column*)dynamic_cast <Item *> (i.elem_l_);
65       for (int j =0; j  <started_span_p_arr_.size (); j++)
66         // started_span_p_arr_[j]->add_column (nc);
67         ;
68     }
69 }
70
71 void
72 Tuplet_engraver::do_pre_move_processing ()
73 {
74   typeset_all ();
75 }
76
77 void
78 Tuplet_engraver::typeset_all ()
79 {
80   for (int i=0; i < stop_now_span_p_arr_.size (); i++)
81     {
82       typeset_element (stop_now_span_p_arr_[i]);
83     }
84
85   stop_now_span_p_arr_.clear ();
86 }
87
88 void
89 Tuplet_engraver::do_removal_processing ()
90 {
91   typeset_all ();
92   for (int i=0; i < started_span_p_arr_.size (); i++)
93     {
94       typeset_element (started_span_p_arr_[i]);
95     }  
96 }
97
98 ADD_THIS_TRANSLATOR(Tuplet_engraver);
99 IMPLEMENT_IS_TYPE_B1(Tuplet_engraver, Engraver);
100
101 Tuplet_engraver::Tuplet_engraver()
102 {
103 }
104
105
106 void
107 Tuplet_engraver::do_post_move_processing ()
108 {
109   bracket_req_arr_.clear (); 
110 }