]> git.donarmstrong.com Git - lilypond.git/blob - lily/meter-reg.cc
release: 0.0.65
[lilypond.git] / lily / meter-reg.cc
1 /*
2   meter-reg.cc -- implement Meter_register
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "meter-reg.hh"
10 #include "meter.hh"
11 #include "command-request.hh"
12
13 Meter_register::Meter_register()
14 {
15     post_move_processing();
16 }
17
18 bool
19 Meter_register::try_request(Request*r_l)
20 {
21     Command_req* creq_l= r_l->command();
22      if (!creq_l || !creq_l->meterchange()) 
23         return false;
24      Meter_change_req *m = creq_l->meterchange();
25      if (meter_req_l_ && meter_req_l_->compare(*m))
26          return false;
27      
28     meter_req_l_ = m;
29     return true;
30 }
31
32 void
33 Meter_register::process_requests()
34 {
35     if (meter_req_l_ ) {
36         Array<Scalar> args;
37         args.push(meter_req_l_->beats_i_);
38         args.push(meter_req_l_->one_beat_i_);
39         
40         meter_p_ = new Meter(args);
41     }
42
43     if (meter_p_)
44         announce_element(Score_elem_info(meter_p_, meter_req_l_) );
45 }
46
47 void
48 Meter_register::pre_move_processing()
49 {
50     if (meter_p_) {
51         Meter * post_p =new Meter(*meter_p_);
52         Meter * pre_p =new Meter(*meter_p_);
53         
54         typeset_breakable_item(pre_p, meter_p_, post_p);
55         meter_p_ =0;
56     }
57 }
58
59 void
60 Meter_register::post_move_processing()
61 {
62     meter_req_l_ = 0;
63     meter_p_ =0;
64 }
65 IMPLEMENT_STATIC_NAME(Meter_register);
66 ADD_THIS_REGISTER(Meter_register);