]> git.donarmstrong.com Git - lilypond.git/blob - lily/auto-plet-engraver.cc
3ed45b2a46eb6390d17a60a4e1bf0f847f0b708d
[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 "graphical-lisp-element.hh"
13 #include "note-column.hh"
14
15 bool
16 Tuplet_engraver::do_try_request (Request *r)
17 {
18   Command_req * c = r->access_Command_req ();
19   if (!(c &&
20       c->access_Bracket_req ()))
21     {
22       return false;
23     }
24
25   Bracket_req * b = c->access_Bracket_req ();
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<Graphical_lisp_element> 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           Graphical_lisp_element* glep = new Graphical_lisp_element ("tuplet");
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       Graphical_lisp_element* 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*)i.elem_l_->access_Item ();
65       for (int j =0; j  <started_span_p_arr_.size (); j++)
66 //      started_span_p_arr_[j]->add_column (nc);
67         started_span_p_arr_[j]->call ("add-column", (void*)nc);
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 }