2 register.hh -- part of LilyPond
4 (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
14 struct Staff_elem_info
{
17 const Voice
* voice_l_
;
18 Voice_group_registers
* group_regs_l_
;
19 Request_register
* origin_reg_l_
;
22 Staff_elem_info(Staff_elem
*, Request
*, Request_register
*);
26 /// Hungarian postfix: reg
28 a struct which processes requests, and creates the Staff_elems
30 struct Request_register
{
31 Complex_walker
* walk_l_
;
32 Array
<Request
*> accepted_req_arr_
;
36 Warning: you can't copy a Request_register
38 Request_register(Request_register
const &);
39 Request_register(Complex_walker
*);
41 virtual ~Request_register(){}
43 /** take note of item/spaanner
44 put item in spanner. Adjust local key; etc.
46 virtual void acknowledge_element(Staff_elem_info
){}
48 Announce element to walker
50 void announce_element(Staff_elem_info
);
53 invoke walker method to typeset element
55 void typeset_element(Staff_elem
*elem_p
);
58 try to fit the request in this register
61 false: not noted, not taken.
63 true: request swallowed. Don't try to put elsewhere
65 (may be we could use C++ exceptions.. :-)
67 virtual bool try_request(Request
*req_l
) =0;
69 /// make items/spanners with the requests you got
70 virtual void process_request()=0;
71 Paperdef
* paper() const;
72 /// typeset any spanners. Empty accepted_req_arr_
73 void pre_move_processing();
74 void post_move_processing();
75 virtual void set_dir(int){}
77 /// virtual, called by pre_move_process()
78 virtual void do_pre_move_process(){}
79 virtual void do_post_move_process(){}