]> git.donarmstrong.com Git - lilypond.git/blob - hdr/register.hh
release: 0.0.35
[lilypond.git] / hdr / 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 "staffeleminfo.hh"
14
15
16 /**
17   a struct which processes requests, and creates the #Staff_elem#s.
18    Hungarian postfix: reg
19   */
20 class Request_register {
21     /**
22       Warning: you can't copy a #Request_register#
23       */
24     Request_register(Request_register const &);
25 public:
26     Complex_walker * walk_l_;
27     Array<Request*> accepted_req_arr_;
28     
29     Request_register(Complex_walker*);
30     Request_register();
31     virtual ~Request_register(){}
32
33     /**
34       take note of item/spanner
35       put item in spanner. Adjust local key; etc.
36
37       Default: ignore the info
38       */
39     virtual void acknowledge_element(Staff_elem_info){}
40
41     /**
42       try to fit the request in this register
43
44       @return
45       false: not noted,  not taken.
46
47       true: request swallowed. Don't try to put the request elsewhere.
48
49       (may be we could use C++ exceptions.. :-)
50
51       #Request_register::try_request# always returns false
52       */
53     virtual bool try_request(Request *req_l);
54     
55     /// make items/spanners with the requests you got
56     virtual void process_request(){}
57
58     /// typeset any spanners. Empty #accepted_req_arr_#
59     void pre_move_processing();
60     /// reset any appropriate data.
61     void post_move_processing();
62     virtual bool acceptable_request_b(Request*) const;    
63     virtual void set_dir(int){}
64 protected:
65     /// utility
66     Paperdef * paper() const;
67
68
69      /**
70       invoke walker method to typeset element
71       */
72     void typeset_element(Staff_elem*elem_p);
73
74
75     /**
76       typeset a "command" item.
77       If the column is not breakable, #pre_p# and #post_p# are junked
78       */
79     void typeset_breakable_item(Item * pre_p , Item * nobreak_p, Item * post_p);
80     /** virtual, called by #pre_move_processing()#
81       #Request_register::do_pre_move_process()# defaults to NOP
82       */
83     virtual void do_pre_move_process(){}
84     /** virtual, called by #post_move_processing#,
85       #Request_register::do_post_move_process()# defaults to NOP */
86     virtual void do_post_move_process(){}
87     /**
88       Announce element to walker. Utility
89       */
90     void announce_element(Staff_elem_info);
91 };
92
93
94 #endif // REGISTER_HH
95