]> git.donarmstrong.com Git - lilypond.git/blob - lily/multi-measure-rest-engraver.cc
partial: 0.1.59.jcn
[lilypond.git] / lily / multi-measure-rest-engraver.cc
1 /*
2   multi_measure_rest-engraver.cc -- implement Multi_measure_rest_engraver
3
4   (c) 1998 Jan Nieuwenhuizen <jan@digicash.com>
5 */
6
7 #include "proto.hh"
8 #include "musical-request.hh"
9 #include "multi-measure-rest.hh"
10 #include "multi-measure-rest-engraver.hh"
11 #include "score-column.hh"
12
13 IMPLEMENT_IS_TYPE_B1 (Multi_measure_rest_engraver, Engraver);
14 ADD_THIS_TRANSLATOR (Multi_measure_rest_engraver);
15
16 Multi_measure_rest_engraver::Multi_measure_rest_engraver ()
17 {
18   last_mom_ = 0;
19   multi_measure_req_l_ = 0;
20   mmrest_p_ = 0;
21 }
22
23 bool
24 Multi_measure_rest_engraver::do_try_request (Request* req_l)
25 {
26   if (!req_l->musical () || !req_l->musical ()->multi_measure ())
27     return false;
28
29   multi_measure_req_l_ = req_l->musical ()->multi_measure ();
30   last_mom_ = now_moment () + multi_measure_req_l_->duration_.length ();
31
32   return true;
33 }
34
35 void
36 Multi_measure_rest_engraver::do_removal_processing ()
37 {
38   if (mmrest_p_)
39     {
40       typeset_element (mmrest_p_);
41       mmrest_p_ = 0;
42     }
43 }
44
45 void
46 Multi_measure_rest_engraver::do_process_requests ()
47 {
48   if (mmrest_p_ || !multi_measure_req_l_)
49     return;
50
51   mmrest_p_ = new Multi_measure_rest;
52
53   Scalar prop = get_property ("part");
54   if (prop.isnum_b ()) 
55     part_b_ = prop.to_bool ();
56
57 //  if (!part_b_)
58 //    return;
59
60   int measures_i = (int)multi_measure_req_l_->duration_.plet_.iso_i_;
61   if (part_b_)
62     mmrest_p_->measures_i_ = measures_i;
63
64   announce_element (Score_elem_info (mmrest_p_, multi_measure_req_l_));
65
66   multi_measure_req_l_ = 0;
67 }
68
69 void
70 Multi_measure_rest_engraver::do_pre_move_processing ()
71 {
72   if (!mmrest_p_)
73     return;
74
75   typeset_element (mmrest_p_);
76   mmrest_p_ = 0;
77
78   if (part_b_)
79     return;
80
81   if (last_mom_ <= now_moment () + Moment (1))
82     multi_measure_req_l_ = 0;
83 }
84