#ifndef COMPLEXCOLUMN_HH
#define COMPLEXCOLUMN_HH
+#include "stcol.hh"
+
/// column of Complex_staff: store one request
struct Complex_column : Staff_column {
Slur_req *find_slur(Voice *);
- void typeset_item(Item *, int=1);
- void typeset_item_directional(Item *, int dir, int=1);
- Molecule *create_command_mol(Command *com);
-
- void take_request(Request *rq);
- virtual void setup_requests();
+ void typeset_musical_item(Item *);
+ void typeset_breakable_items(Array<Item *> &pre_p_arr,
+ Array<Item *> &nobreak_p_arr,
+ Array<Item *> &post_p_arr);
+ virtual void setup_one_request(Request*);
- Complex_column(Score_column*s,Complex_staff*rs);
+ Complex_column(Complex_staff*rs);
};
#endif // COMPLEXCOLUMN_HH
/*
- complexwalker.hh -- part of LilyPond
+ complexwalker.hh -- declare Complex_walker
(c) 1996,97 Han-Wen Nienhuys
*/
#define COMPLEXWALKER_HH
#include "proto.hh"
-#include "grouping.hh"
#include "voicegroup.hh"
#include "assoc.hh"
#include "staffwalker.hh"
-#include "key.hh"
-#include "clef.hh"
-#include "register.hh"
-#include "localkeyreg.hh"
-
+#include "staffeleminfo.hh"
+#include "plist.hh"
/**
- A staff walker which uses registers to what to print
+ A staff walker which uses registers to decide what to print
*/
-struct Complex_walker: Staff_walker {
- Local_key local_key_;
- Key key_;
- Array<int> *oldkey_undo;
- Array<int> typesetkey;
-
- int processed_bar_priority;
- bool processed_key;
- bool processed_clef;
- Clef clef_;
- Rhythmic_grouping default_grouping;
-
+class Complex_walker: public Staff_walker {
+ bool try_command_request(Nonmusical_req *req_l);
+ void do_change_group( Voice * v, String group_id_str);
+ void do_announces();
+ void try_request(Request*req);
+ int c0_position_i_;
+ Array<Item*> prebreak_item_p_arr_;
+ Array<Item*> nobreak_item_p_arr_;
+ Array<Item*> postbreak_item_p_arr_;
+
+public:
+
IPointerList<Voice_registers *> voice_reg_list_;
IPointerList<Voice_group_registers*> group_reg_list_;
Assoc<Voice *, Voice_group_registers *> voice_group_map_;
- Local_key_register local_key_reg_;
+ Clef_register *clef_reg_p_;
+ Local_key_register *local_key_reg_p_;
+ Key_register *key_reg_p_;
+ Bar_register *bar_reg_p_;
+ Meter_register *meter_reg_p_;
+
Array<Staff_elem_info> announce_info_arr_;
/* *************** */
+
Voice_registers *find_voice_reg(Voice*v_l)const;
Voice_registers *get_voice_reg(Voice*v_l);
- /// search and return. return 0 if not found.
+ /** search for voice_group containing #v_l#
+
+ @return
+ pointer if found, 0 if not found.
+ */
Voice_group_registers *find_voice_group(Voice* v_l)const;
+
/// search. Create if necessary
Voice_group_registers *get_voice_group(Voice* v_l);
- /// search and return. return 0 if not found
+ /** search for voice_group named #id#
+
+ @return
+ pointer if found, 0 if not found.
+ */
Voice_group_registers *find_voice_group(const char* id)const;
- /// Create if necessary
+
+ /**
+ search for voice_group named #id#, create if necessary
+ */
Voice_group_registers *get_voice_group(const char*);
Array<Voice_registers *> get_voice_regs(Voice_group_registers *) const;
void regs_process_requests();
+ void typeset_breakable_item(Item * pre_p ,
+ Item * nobreak_p, Item * post_p);
void typeset_element(Staff_elem *elem_p);
void announce_element(Staff_elem_info);
- virtual void do_TYPESET_command(Command*);
- virtual void do_INTERPRET_command(Command*);
virtual void process_requests();
virtual void do_post_move();
virtual void do_pre_move();
-
+ /**
+ @return the position of central c.
+ */
+ int c0_position_i() const;
+
+ /**
+ set the position of central c.
+ @param the new position
+ */
+ void set_c0_position(int j);
Complex_walker(Complex_staff*);
+ ~Complex_walker();
+
Complex_column *col();
Complex_staff *staff();
private:
- void do_change_group( Voice * v, String group_id_str);
- void do_announces();
- void try_request(Request*req);
};