]> git.donarmstrong.com Git - lilypond.git/blob - lily/bar-grav.cc
release: 0.1.46
[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   bar_p_ =0;
18   do_post_move_processing();
19 }
20
21 bool
22 Bar_engraver::do_try_request (Request*r_l)
23 {
24   Command_req* c_l = r_l->command();
25   if (!c_l|| !c_l->bar()) 
26     return false;
27   Bar_req  * b= c_l->bar();
28   if (bar_req_l_ && bar_req_l_->equal_b (b))
29     return false;
30   
31   bar_req_l_ = b;
32
33   return true;
34 }
35
36 void
37 Bar_engraver::create_bar ()
38 {
39   if (!bar_p_)
40     {
41       bar_p_ = new Bar;
42       bar_p_->break_priority_i_  = 0;
43       announce_element (Score_elem_info (bar_p_, bar_req_l_));
44     }
45 }
46
47 void 
48 Bar_engraver::do_creation_processing ()
49 {
50   create_bar ();
51   bar_p_->type_str_ = "";
52 }
53
54 void
55 Bar_engraver::do_removal_processing ()
56 {
57   if (bar_p_) 
58     {
59       typeset_element (bar_p_);
60       bar_p_ =0;
61     }
62 }
63
64 void
65 Bar_engraver::do_process_requests()
66 {  
67   if (bar_req_l_) 
68     {
69       if (!bar_p_)
70         create_bar ();    
71
72       bar_p_->type_str_ = bar_req_l_->type_str_;
73     }
74   else 
75     {
76       Time_description const *time = get_staff_info().time_C_;
77       if (time && !time->whole_in_measure_) 
78         create_bar ();
79     }
80   
81   if (!bar_p_)
82     {
83       Disallow_break_req r;
84       daddy_grav_l()->try_request (&r);
85     }
86 }
87
88
89 void 
90 Bar_engraver::do_pre_move_processing()
91 {
92   if (bar_p_) 
93     {
94       typeset_element (bar_p_);
95       bar_p_ =0;
96     }
97 }
98
99 void
100 Bar_engraver::do_post_move_processing()
101 {
102   bar_req_l_ = 0;
103 }
104
105
106 IMPLEMENT_IS_TYPE_B1(Bar_engraver,Engraver);
107 ADD_THIS_TRANSLATOR(Bar_engraver);
108
109