lilypond-0.0.32
[lilypond.git] / hdr / register.hh
blob0c47e35cd1979bd2ed7a8c6a04c7bc0b9e03c2e2
1 /*
2 register.hh -- part of LilyPond
4 (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
5 */
7 #ifndef REGISTER_HH
8 #define REGISTER_HH
9 #include "proto.hh"
10 #include "varray.hh"
11 #include "request.hh"
13 /// data container.
14 struct Staff_elem_info {
15 Staff_elem * elem_p_;
16 Request*req_l_;
17 const Voice * voice_l_;
18 Voice_group_registers * group_regs_l_;
19 Request_register * origin_reg_l_;
21 /* *** */
22 Staff_elem_info(Staff_elem*, Request*, Request_register*);
23 Staff_elem_info();
26 /// Hungarian postfix: reg
27 /**
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_;
34 /* *************** */
35 /**
36 Warning: you can't copy a Request_register
38 Request_register(Request_register const &);
39 Request_register(Complex_walker*);
40 Request_register();
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){}
47 /**
48 Announce element to walker
50 void announce_element(Staff_elem_info);
52 /**
53 invoke walker method to typeset element
55 void typeset_element(Staff_elem*elem_p);
57 /**
58 try to fit the request in this register
60 @return
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){}
76 protected:
77 /// virtual, called by pre_move_process()
78 virtual void do_pre_move_process(){}
79 virtual void do_post_move_process(){}
83 #endif // REGISTER_HH