]> git.donarmstrong.com Git - lilypond.git/blob - lily/script-reg.cc
release: 0.0.50
[lilypond.git] / lily / script-reg.cc
1 /*
2   script-reg.cc -- implement Script_register
3
4   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
5 */
6
7 #include "script-reg.hh"
8 #include "script.hh"
9 #include "musical-request.hh"
10 #include "complex-walker.hh"
11 #include "stem.hh"
12 #include "staff-sym.hh"
13
14 Script_register::Script_register()
15 {
16     post_move_processing();
17 }
18
19 bool
20 Script_register::try_request(Request *r_l)
21 {
22     if (!r_l->script())
23         return false ;
24     for (int i=0; i < script_req_l_arr_.size(); i++)
25         if ( !Script_req::compare(*script_req_l_arr_[i], *r_l->script())) {
26             return true;
27         }
28         
29     script_req_l_arr_.push( r_l->script());
30     
31     return true;
32 }
33
34 void
35 Script_register::process_requests()
36 {
37     for (int i=0; i < script_req_l_arr_.size(); i++){
38         Script_req* l=script_req_l_arr_[i];
39         Script *p =new Script( l);
40         script_p_arr_.push(p);
41         announce_element(Staff_elem_info(p, l));
42     }
43 }
44
45 bool
46 Script_register::acceptable_elem_b(Staff_elem*s_l)
47 {
48     char const *nC = s_l->name();
49     return (nC == Stem::static_name());
50 }
51
52 void
53 Script_register::acknowledge_element(Staff_elem_info info)
54 {
55     Staff_elem *elem_l = info.elem_l_;
56     if (!acceptable_elem_b(elem_l))
57         return;
58     
59     for (int i=0; i < script_p_arr_.size(); i++) {
60         Script*script_l = script_p_arr_[i];
61         if (elem_l->name() == Stem::static_name())
62             script_l->set_stem((Stem*)elem_l);
63     }
64 }
65
66 void
67 Script_register::pre_move_processing()
68 {
69     Staff_symbol* s_l = get_staff_info().staff_sym_l_;
70     for (int i=0; i < script_p_arr_.size(); i++) {
71         
72         Script*script_p = script_p_arr_[i];
73         script_p->set_staffsym( s_l);
74         typeset_element(script_p);
75     }
76     script_p_arr_.set_size(0);
77 }
78 void
79 Script_register::post_move_processing()
80 {
81     script_req_l_arr_.set_size(0);
82 }
83
84 void
85 Script_register::set_feature(Features )
86 {
87 //    if (i.direction_i_|| i.initialiser_b_)
88     //dir_i_ = i.direction_i_;
89 }
90 IMPLEMENT_STATIC_NAME(Script_register);
91 ADD_THIS_REGISTER(Script_register);