]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/register.hh
808b28d05c80a9396216b77cc2a1bf74b6dd838b
[lilypond.git] / lily / include / register.hh
1 /*
2   register.hh -- part of LilyPond
3
4   (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
5 */
6
7 #ifndef REGISTER_HH
8 #define REGISTER_HH
9
10 #include "proto.hh"
11 #include "varray.hh"
12 #include "request.hh"
13 #include "staff-elem-info.hh"
14
15 /**
16   a struct which processes requests, and creates the #Staff_elem#s.
17   It may use derived classes. Hungarian postfix: register
18   */
19 class Request_register {
20     friend class Register_group_register;
21     /**
22       You cannot copy a Request_register
23      */
24     Request_register(const Request_register&){}
25 protected:
26
27     /// utility
28     virtual Paper_def * paper() const;
29
30     /**
31       try to fit the request in this register
32
33       @return
34       false: not noted,  not taken.
35
36       true: request swallowed. Don't try to put the request elsewhere.
37
38
39       Default: always return false
40       */
41     virtual bool try_request(Request *req_l);
42     
43     /// make items/spanners with the requests you got
44     virtual void process_requests(){}
45
46     /** typeset any items/spanners. Default: do nothing
47      */
48     virtual void pre_move_processing(){}
49     /** reset any appropriate data. Default: do nothing
50      */
51     virtual void post_move_processing(){}
52    
53     /**
54       Is this request eligible to be processed? Default: return false.
55      */
56     virtual bool acceptable_request_b(Request*) const;
57
58     /**
59       typeset a "command" item. Default: pass on to daddy.
60       If the column is not breakable, #pre_p# and #post_p# are junked
61       */
62     virtual void typeset_breakable_item(Item * pre_p ,
63                                         Item * nobreak_p, Item * post_p);
64     /**
65       Invoke walker method to typeset element. Default: pass on to daddy.
66       */
67     virtual void typeset_element(Staff_elem*elem_p);
68     
69      /**
70       take note of item/spanner
71       put item in spanner. Adjust local key; etc.
72
73       Default: ignore the info
74       */
75     virtual void acknowledge_element(Staff_elem_info) {}
76     /**
77       Announce element. Default: pass on to daddy. Utility
78       */
79     virtual void announce_element(Staff_elem_info);
80     /**
81       Set features of the register(s). Default: ignore features.
82      */
83     virtual void set_feature(Features){}
84     /**
85       Does this equal or contain a certain register?
86      */
87     virtual bool contains_b(Request_register*reg_l);
88     /**
89       Get information on the staff. Default: ask daddy.
90       */
91     virtual Staff_info get_staff_info();
92     
93     
94     virtual void do_print()const;  
95 public:
96     /** Every Request_register (except for the 'top' which is directly
97       inside the Staff_walker, is a element of a group.  */
98     Register_group_register * daddy_reg_l_;
99
100     Request_register();
101     virtual ~Request_register(){}
102     NAME_MEMBERS(Request_register);
103     void print() const;
104 };
105
106
107 #endif // REGISTER_HH
108