]> git.donarmstrong.com Git - lilypond.git/blob - lily/bar-column-engraver.cc
release: 1.0.1
[lilypond.git] / lily / bar-column-engraver.cc
1 /*
2   bar-column-grav.cc -- implement Bar_column_engraver
3
4   source file of the GNU LilyPond music typesetter
5
6   (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
8
9
10 #include "bar-column-engraver.hh"
11 #include "bar-column.hh"
12 #include "request.hh"
13 #include "script.hh"
14 #include "bar.hh"
15
16 Bar_column_engraver::Bar_column_engraver()
17 {
18   bar_l_ =0;
19   barcol_p_ =0;
20   break_priority_i_ = 0;
21 }
22
23 void
24 Bar_column_engraver::do_creation_processing ()
25 {
26 }
27
28
29 void
30 Bar_column_engraver::do_process_requests ()
31 {
32   Scalar pri = get_property ("barColumnPriority");
33   if (pri.length_i() && pri.isnum_b ())
34     {
35       break_priority_i_ = int(pri);
36     }
37 }
38
39 void
40 Bar_column_engraver::create_column ()
41 {
42   if (!barcol_p_)
43     {
44       barcol_p_ = new Bar_column;
45       barcol_p_->breakable_b_ =true;
46       barcol_p_->break_priority_i_ = break_priority_i_;
47       announce_element (Score_element_info (barcol_p_, 0));      
48     }
49 }
50
51
52 void
53 Bar_column_engraver::acknowledge_element (Score_element_info info)
54 {
55   Item * it = info.elem_l_->access_Item ();
56   if (!it)
57     return;
58
59   if (it->is_type_b (Script::static_name())
60       && it->breakable_b_
61       && info.origin_grav_l_arr_.size() == 1
62       && it->break_priority_i_ == break_priority_i_)
63     {
64       create_column ();
65       barcol_p_->add_script ((Script*)it);
66     }
67   else if (info.origin_grav_l_arr_.size() == 1
68            && it->break_priority_i_ == break_priority_i_
69            && it->breakable_b_ 
70            && it->is_type_b (Bar::static_name()))
71     {
72       create_column ();
73       barcol_p_->set_bar ( (Bar*)it);
74     }
75 }
76
77
78 void
79 Bar_column_engraver::process_acknowledged ()
80 {
81 }
82
83
84
85 void
86 Bar_column_engraver::do_pre_move_processing()
87 {
88   if (barcol_p_) 
89     {
90       typeset_element (barcol_p_);
91       barcol_p_ =0;
92     }
93 }
94
95 void
96 Bar_column_engraver::do_post_move_processing()
97 {
98   script_l_arr_.clear();
99   bar_l_ =0;
100 }
101
102 IMPLEMENT_IS_TYPE_B1(Bar_column_engraver, Engraver);
103 ADD_THIS_TRANSLATOR(Bar_column_engraver);