/*
walkregs.hh -- declare Walker_registers
- source file of the LilyPond music typesetter
+ source file of the GNU LilyPond music typesetter
(c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
*/
#include "register-group.hh"
-
+#include "parray.hh"
/**
Top level registers: the interface to Complex_walker.
[sigh. Sometimes I wish C++ could do better late binding.]
- */
-struct Walker_registers : Register_group_register {
+
+ Basically, this distributes and collects elements and elementinfo to
+ children
+ */
+class Walker_registers : public Register_group_register {
+
Array<Item*> prebreak_item_p_arr_;
Array<Item*> nobreak_item_p_arr_;
Array<Item*> postbreak_item_p_arr_;
+ Link_array<Score_elem> musical_item_p_arr_;
+
Array<Score_elem_info> announce_info_arr_;
Complex_walker * walk_l_;
-
- /* *************** */
-
- void typeset_musical_item(Score_elem * elem_p);
- Walker_registers(Complex_walker*);
- void do_announces();
-
+protected:
virtual Staff_info get_staff_info();
virtual void announce_element(Score_elem_info);
virtual void acknowledge_element(Score_elem_info);
virtual void typeset_breakable_item(Item * pre_p , Item * nobreak_p, Item * post_p);
virtual void typeset_element(Score_elem*elem_p);
+ virtual Paper_def * paper() const;
+public:
virtual void pre_move_processing();
virtual void post_move_processing();
- virtual Paper_def * paper() const;
+
+
+ void do_announces();
+ Walker_registers(Complex_walker*);
};
#endif // WALKREGS_HH
/*
walkregs.cc -- implement Walker_registers
- source file of the LilyPond music typesetter
+ source file of the GNU LilyPond music typesetter
(c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
*/
#include "debug.hh"
#include "walk-regs.hh"
#include "staff-regs.hh"
-#include "staff-elem.hh"
+#include "score-elem.hh"
#include "staff.hh"
#include "complex-walker.hh"
#include "staff-column.hh"
#include "score-walker.hh"
#include "bar.hh" // needed for Bar::static_name
#include "input-register.hh"
+#include "staffline.hh"
Walker_registers::Walker_registers(Complex_walker *w)
{
void
Walker_registers::typeset_element(Score_elem *elem_p)
{
- typeset_musical_item(elem_p);
-}
-
-void
-Walker_registers::typeset_musical_item(Score_elem * elem_p)
-{
- walk_l_->typeset_element(elem_p);
+ musical_item_p_arr_.push(elem_p);
}
void
Walker_registers::typeset_breakable_item(Item * pre_p , Item * nobreak_p,
Item * post_p)
{
- if (pre_p)
+ if (pre_p) {
prebreak_item_p_arr_.push(pre_p);
- if (nobreak_p)
+ walk_l_->staff_l_->staff_line_l_->add_element(pre_p);
+ }
+ if (nobreak_p) {
nobreak_item_p_arr_.push(nobreak_p);
- if (post_p)
+ walk_l_->staff_l_->staff_line_l_->add_element(nobreak_p);
+ }
+ if (post_p) {
postbreak_item_p_arr_.push(post_p);
+ walk_l_->staff_l_->staff_line_l_->add_element(post_p);
+ }
}
void
walk_l_->ptr()->typeset_breakable_items(prebreak_item_p_arr_,
nobreak_item_p_arr_,
postbreak_item_p_arr_);
+ for (int i=0; i < musical_item_p_arr_.size(); i++)
+ walk_l_->typeset_element(musical_item_p_arr_[i]);
+ musical_item_p_arr_.set_size(0);
}
void
Walker_registers::post_move_processing()