2 register.hh -- part of LilyPond
4 (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
10 #include "lily-proto.hh"
13 #include "staff-elem-info.hh"
14 #include "staff-info.hh"
17 a struct which processes requests, and creates the #Staff_elem#s.
18 It may use derived classes. Hungarian postfix: register
20 class Request_register {
21 friend class Register_group_register;
23 You cannot copy a Request_register
25 Request_register(const Request_register&){}
30 virtual Paper_def * paper() const;
33 try to fit the request in this register
36 false: not noted, not taken.
38 true: request swallowed. Don't try to put the request elsewhere.
41 Default: always return false
43 virtual bool try_request(Request *req_l);
45 /// make items/spanners with the requests you got
46 virtual void process_requests(){}
48 /** typeset any items/spanners. Default: do nothing
50 virtual void pre_move_processing(){}
51 /** reset any appropriate data. Default: do nothing
53 virtual void post_move_processing(){}
56 Is this request eligible to be processed? Default: return false.
58 virtual bool acceptable_request_b(Request*) const;
61 typeset a "command" item. Default: pass on to daddy.
62 If the column is not breakable, #pre_p# and #post_p# are junked
64 virtual void typeset_breakable_item(Item * pre_p ,
65 Item * nobreak_p, Item * post_p);
67 Invoke walker method to typeset element. Default: pass on to daddy.
69 virtual void typeset_element(Staff_elem*elem_p);
72 take note of item/spanner
73 put item in spanner. Adjust local key; etc.
75 Default: ignore the info
77 virtual void acknowledge_element(Staff_elem_info) {}
79 Announce element. Default: pass on to daddy. Utility
81 virtual void announce_element(Staff_elem_info);
83 Set features of the register(s). Default: ignore features.
85 virtual void set_feature(Features){}
87 Does this equal or contain a certain register?
89 virtual bool contains_b(Request_register*reg_l)const;
91 Get information on the staff. Default: ask daddy.
93 virtual Staff_info get_staff_info();
96 virtual void do_print()const;
98 /** Every Request_register (except for the 'top' which is directly
99 inside the Staff_walker, is a element of a group. */
100 Register_group_register * daddy_reg_l_;
103 virtual ~Request_register(){}
104 NAME_MEMBERS(Request_register);
109 A macro to automate administration of registers.
111 #define ADD_THIS_REGISTER(c) \
113 static Request_register * globalctor (){ \
117 add_request_register(c::static_name(), globalctor); \
122 typedef Request_register*(*Reg_ctor)(void);
123 void add_request_register(String s, Reg_ctor f);
125 #endif // REGISTER_HH