Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
-#include "proto.hh"
#include "musical-request.hh"
#include "multi-measure-rest.hh"
#include "paper-column.hh"
#include "staff-symbol-referencer.hh"
#include "engraver.hh"
#include "moment.hh"
+#include "spanner.hh"
/**
The name says it all: make multi measure rests
- */
+
+FIXME? The MM rest engraver must be able to see bar lines, so it won't
+work at Voice level. Not a problem in practice, but aesthetically pleasing?
+
+*/
class Multi_measure_rest_engraver : public Engraver
{
public:
int start_measure_i_;
Moment start_moment_;
- Multi_measure_rest *mmrest_p_;
- Multi_measure_rest *lastrest_p_;
+ Spanner *mmrest_p_;
+ Spanner *lastrest_p_;
};
ADD_THIS_TRANSLATOR (Multi_measure_rest_engraver);
void
Multi_measure_rest_engraver::acknowledge_element (Score_element_info i)
{
- if (Bar *c = dynamic_cast<Bar*> (i.elem_l_))
+ Item * item = dynamic_cast<Item*> (i.elem_l_);
+ if (item && Bar::has_interface (item))
{
if (mmrest_p_)
- mmrest_p_->add_column (c);
+ Multi_measure_rest::add_column (mmrest_p_,item);
if (lastrest_p_)
- lastrest_p_->add_column (c);
+ Multi_measure_rest::add_column (lastrest_p_,item);
}
}
if (busy_span_req_l_ && !mmrest_p_)
{
- mmrest_p_ = new Multi_measure_rest (SCM_EOL);
- Staff_symbol_referencer_interface si (mmrest_p_);
- si.set_interface ();
+ mmrest_p_ = new Spanner (get_property ("basicMultiMeasureRestProperties"));
- announce_element (Score_element_info (mmrest_p_, busy_span_req_l_));
+ Multi_measure_rest::set_interface (mmrest_p_);
+ Staff_symbol_referencer::set_interface (mmrest_p_);
+
+ announce_element (mmrest_p_, busy_span_req_l_);
start_measure_i_
= gh_scm2int (get_property ("currentBarNumber"));
}
if (mmrest_p_ && (now_mom () >= start_moment_)
&& !mp
- && (scm_ilength (mmrest_p_->get_elt_pointer ("columns")) >= 2))
+ && (scm_ilength (mmrest_p_->get_elt_property ("columns")) >= 2))
{
typeset_element (mmrest_p_);
/*
void
Multi_measure_rest_engraver::do_post_move_processing ()
{
- Moment now (now_mom ());
-
-
SCM smp = get_property ("measurePosition");
Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);