--- /dev/null
+/*
+ Audio-element-info.cc -- implement Audio_element_info
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+#include "audio-element-info.hh"
+#include "request.hh"
+
+Audio_element_info::Audio_element_info (Audio_element*s_l, Music *r_l)
+{
+ elem_l_ = s_l;
+ req_l_ = r_l;
+}
+
+
+Audio_element_info::Audio_element_info()
+{
+ elem_l_ = 0;
+ req_l_ = 0;
+}
+
+Link_array<Translator>
+Audio_element_info::origin_trans_l_arr (Translator*) const
+{
+ return origin_trans_l_arr_;
+}
void
Bar_script_engraver::acknowledge_element (Score_element_info inf)
{
- if (inf.origin_trans_l_arr_.size () == 1)
+ if (inf.origin_trans_l_arr (this).size () == 1)
{
Item *i=cast_to_interesting_item (inf.elem_l_);
if (!i)
/* Only put numbers on bars that are at our own level (don't put
numbers over the staffs of a GrandStaff, only over the GrandStaff
itself */
- if (inf.origin_trans_l_arr_.size () != 1)
+ if (inf.origin_trans_l_arr (this).size () != 1)
return;
attach_script_to_item (i);
void
Base_span_bar_engraver::acknowledge_element (Score_element_info i)
{
- int depth = i.origin_trans_l_arr_.size();
+ int depth = i.origin_trans_l_arr (this).size();
if (depth > 1
&& dynamic_cast<Bar *> (i.elem_l_))
{
if (!dynamic_cast <Engraver_group_engraver *> (p->car_))
{
Engraver * eng = dynamic_cast<Engraver*> (p->car_);
- if (eng && eng!= info.origin_trans_l_arr_[0])
+ if (eng && eng!= info.origin_trans_l_arr (this)[0])
eng->acknowledge_element (info);
}
}
void
Engraver::announce_element (Score_element_info i)
{
- i.origin_trans_l_arr_.push (this);
+ if (!i.origin_trans_l_)
+ i.origin_trans_l_ = this;
daddy_grav_l()->announce_element (i);
}
Audio_element * elem_l_;
Music *req_l_;
Link_array<Translator> origin_trans_l_arr_;
+ Link_array<Translator> origin_trans_l_arr (Translator*) const;
Audio_element_info (Audio_element*, Music*);
Audio_element_info();
#include "parray.hh"
/**
- Data container for broadcasts
+ Data container for broadcasts.
+
+ TODO: Store this in element info!
*/
struct Score_element_info {
- Score_element * elem_l_;
- Music *req_l_;
- Link_array<Translator> origin_trans_l_arr_;
+ Translator * origin_trans_l_;
+ friend Engraver;
+public:
+ Link_array<Translator> origin_trans_l_arr (Translator*) const;
+ Score_element * elem_l_;
+ Music *req_l_;
+
- Score_element_info (Score_element*, Music*);
- Score_element_info();
+ Score_element_info (Score_element*, Music*);
+ Score_element_info();
};
{
Performer * eng = dynamic_cast<Performer*> (p->car_);
// urg, huh? core dump?
- //if (eng && eng!= info.origin_trans_l_arr_[0])
- if (eng && info.origin_trans_l_arr_.size ()
- && eng!= info.origin_trans_l_arr_[0])
+ //if (eng && eng!= info.origin_trans_l_arr ()[0])
+ if (eng && info.origin_trans_l_arr (this).size ()
+ && eng!= info.origin_trans_l_arr (this)[0])
eng->acknowledge_element (info);
}
}
#include "score-element-info.hh"
#include "request.hh"
+#include "translator.hh"
+#include "translator-group.hh"
Score_element_info::Score_element_info (Score_element*s_l, Music *r_l)
{
elem_l_ = s_l;
req_l_ = r_l;
+ origin_trans_l_ = 0;
}
{
elem_l_ = 0;
req_l_ = 0;
+ origin_trans_l_ = 0;
}
-
+Link_array<Translator>
+Score_element_info::origin_trans_l_arr (Translator* end) const
+{
+ Translator * t = origin_trans_l_;
+ Link_array<Translator> r;
+ do {
+ r.push (t);
+ t = t->daddy_trans_l_;
+ } while (t != end->daddy_trans_l_);
+
+ return r;
+}
+
Score_engraver::announce_element (Score_element_info info)
{
announce_info_arr_.push (info);
- info.origin_trans_l_arr_.push (this);
pscore_p_->typeset_element (info.elem_l_);
}
Staff_margin_engraver::acknowledge_element (Score_element_info inf)
{
Item *i = cast_to_interesting_item (inf.elem_l_);
- if (!i || inf.origin_trans_l_arr_.size() != 1)
+ if (!i || inf.origin_trans_l_arr (this).size() != 1)
return;
{
for (int i=0; i < timing_req_l_arr_.size (); i++)
{
+ /*
+ merge timing reqs.
+ */
if (timing_req_l_arr_[i]->equal_b(t))
return true;
if (String (classname (timing_req_l_arr_[i])) == classname (r))
{
r->warning (_ ("conflicting timing request"));
+ timing_req_l_arr_[i]->warning (_("This is the other timing request"));
return false;
}
}
Moment len = Moment (l) * one_beat;
daddy_trans_l_->set_property ("measureLength",
(new Moment (len))->smobify_self ());
- daddy_trans_l_->set_property ("beatength",
+ daddy_trans_l_->set_property ("beatLength",
(new Moment (one_beat))->smobify_self ());
}
void
Tuplet_spanner::do_post_processing ()
{
-
Link_array<Note_column> column_arr=
Group_interface__extract_elements (this, (Note_column*)0, "columns");
Direction d = directional_element (this).get ();
if (!d)
{
- d = UP;
+ d = get_default_dir ();
directional_element (this).set (d);
}
bool
Vertical_align_engraver::qualifies_b (Score_element_info i) const
{
- int sz = i.origin_trans_l_arr_.size() ;
-
+ int sz = i.origin_trans_l_arr ((Translator*)this).size() ;
Axis_group_element * elt = dynamic_cast<Axis_group_element *> (i.elem_l_);
{
valign_p_->add_element (i.elem_l_);
}
- else if (dynamic_cast<Span_bar*>(i.elem_l_) && i.origin_trans_l_arr_.size ())
+ /*
+ ? huh
+ */
+ else if (dynamic_cast<Span_bar*>(i.elem_l_) && i.origin_trans_l_arr (this).size ())
{
i.elem_l_->add_dependency (valign_p_);
}