]> git.donarmstrong.com Git - lilypond.git/blob - lily/bar-grav.cc
release: 0.1.7
[lilypond.git] / lily / bar-grav.cc
1 /*
2   bar-reg.cc -- implement Bar_engraver
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "bar-grav.hh"
10 #include "bar.hh"
11 #include "command-request.hh"
12 #include "time-description.hh"
13 #include "engraver-group.hh"
14
15 Bar_engraver::Bar_engraver()
16 {
17     do_post_move_processing();
18 }
19
20 bool
21 Bar_engraver::do_try_request(Request*r_l)
22 {
23     Command_req* c_l = r_l->command();
24     if (!c_l|| !c_l->bar()) 
25         return false;
26     Bar_req  * b= c_l->bar();
27     if (bar_req_l_ && bar_req_l_->equal_b(b))
28         return false;
29     
30     bar_req_l_ = b;
31
32     return true;
33 }
34
35 void
36 Bar_engraver::do_process_requests()
37 {
38     if (bar_req_l_ ) {
39         bar_p_ = new Bar;
40         bar_p_->type_str_=bar_req_l_->type_str_;
41     } else if (!get_staff_info().time_C_->whole_in_measure_) {
42         bar_p_ = new Bar;
43     }
44     
45     if (bar_p_){
46         announce_element(Score_elem_info(bar_p_, bar_req_l_) );
47     } else {
48         Disallow_break_req r;
49         daddy_grav_l_->try_request(&r);
50     }
51 }
52
53
54 void 
55 Bar_engraver::do_pre_move_processing()
56 {
57       if (bar_p_) {
58           typeset_element(bar_p_);
59           bar_p_ =0;
60       }
61 }
62
63 void
64 Bar_engraver::do_post_move_processing()
65 {
66     bar_req_l_ = 0;
67     bar_p_ =0;
68 }
69
70
71 IMPLEMENT_IS_TYPE_B1(Bar_engraver,Engraver);
72 ADD_THIS_ENGRAVER(Bar_engraver);
73
74