]> git.donarmstrong.com Git - lilypond.git/blob - lily/bar-column-engraver.cc
release: 1.1.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 #include <typeinfo>
16
17 Bar_column_engraver::Bar_column_engraver()
18 {
19   bar_l_ =0;
20   barcol_p_ =0;
21   break_priority_i_ = 0;
22 }
23
24 void
25 Bar_column_engraver::do_creation_processing ()
26 {
27 }
28
29
30 void
31 Bar_column_engraver::do_process_requests ()
32 {
33   Scalar pri = get_property ("barColumnPriority");
34   if (pri.length_i() && pri.isnum_b ())
35     {
36       break_priority_i_ = int(pri);
37     }
38 }
39
40 void
41 Bar_column_engraver::create_column ()
42 {
43   if (!barcol_p_)
44     {
45       barcol_p_ = new Bar_column;
46       barcol_p_->breakable_b_ =true;
47       barcol_p_->break_priority_i_ = break_priority_i_;
48       announce_element (Score_element_info (barcol_p_, 0));      
49     }
50 }
51
52
53 void
54 Bar_column_engraver::acknowledge_element (Score_element_info info)
55 {
56   Item * it = dynamic_cast <Item *> (info.elem_l_);
57   if (!it)
58     return;
59   Script *s = dynamic_cast<Script*> (it);
60   Bar *b = dynamic_cast<Bar*> (it);
61   if (s
62       && it->breakable_b_
63       && info.origin_grav_l_arr_.size() == 1
64       && it->break_priority_i_ == break_priority_i_)
65     {
66       create_column ();
67       barcol_p_->add_script (s);
68     }
69   else if (info.origin_grav_l_arr_.size() == 1
70            && it->break_priority_i_ == break_priority_i_
71            && it->breakable_b_
72            &&b)
73
74     {
75       create_column ();
76       barcol_p_->set_bar (b);
77     }
78 }
79
80
81 void
82 Bar_column_engraver::process_acknowledged ()
83 {
84 }
85
86
87
88 void
89 Bar_column_engraver::do_pre_move_processing()
90 {
91   if (barcol_p_) 
92     {
93       typeset_element (barcol_p_);
94       barcol_p_ =0;
95     }
96 }
97
98 void
99 Bar_column_engraver::do_post_move_processing()
100 {
101   script_l_arr_.clear();
102   bar_l_ =0;
103 }
104
105 IMPLEMENT_IS_TYPE_B1(Bar_column_engraver, Engraver);
106 ADD_THIS_TRANSLATOR(Bar_column_engraver);