]> git.donarmstrong.com Git - lilypond.git/blob - hdr/complexwalker.hh
release: 0.0.34
[lilypond.git] / hdr / complexwalker.hh
1 /*
2   complexwalker.hh -- declare Complex_walker
3
4   (c) 1996,97 Han-Wen Nienhuys
5 */
6
7 #ifndef COMPLEXWALKER_HH
8 #define COMPLEXWALKER_HH
9
10 #include "proto.hh"
11 #include "voicegroup.hh"
12 #include "assoc.hh"
13 #include "staffwalker.hh"
14 #include "staffeleminfo.hh"
15 #include "plist.hh"
16
17 /**
18   A staff walker which uses registers to decide what to print
19  */
20 class Complex_walker: public Staff_walker {
21     bool try_command_request(Nonmusical_req *req_l);
22     void do_change_group( Voice * v, String group_id_str);
23     void do_announces();
24     void try_request(Request*req);    
25     int c0_position_i_;
26
27     Array<Item*> prebreak_item_p_arr_;
28     Array<Item*> nobreak_item_p_arr_;
29     Array<Item*> postbreak_item_p_arr_;
30     
31 public:
32     
33     IPointerList<Voice_registers *> voice_reg_list_;
34     IPointerList<Voice_group_registers*> group_reg_list_;
35     Assoc<Voice *, Voice_group_registers *> voice_group_map_;
36
37     Clef_register *clef_reg_p_;
38     Local_key_register *local_key_reg_p_;
39     Key_register *key_reg_p_;
40     Bar_register *bar_reg_p_;
41     Meter_register *meter_reg_p_;
42     
43     Array<Staff_elem_info> announce_info_arr_;
44     
45     /* *************** */
46
47     Voice_registers *find_voice_reg(Voice*v_l)const;
48     Voice_registers *get_voice_reg(Voice*v_l);
49     
50     /** search for voice_group containing #v_l#
51
52       @return
53       pointer if found,  0 if not found.
54       */
55     Voice_group_registers *find_voice_group(Voice* v_l)const;
56
57     /// search. Create if necessary
58     Voice_group_registers *get_voice_group(Voice* v_l);
59     /** search for voice_group named #id#
60
61       @return
62       pointer if found,  0 if not found.
63       */
64     Voice_group_registers *find_voice_group(const char* id)const;
65
66     /**
67       search for voice_group named #id#, create if necessary
68       */
69     Voice_group_registers *get_voice_group(const char*);
70
71     Array<Voice_registers *> get_voice_regs(Voice_group_registers *) const;
72     
73     void regs_process_requests();
74     void typeset_breakable_item(Item * pre_p ,
75                                 Item * nobreak_p, Item * post_p);
76     void typeset_element(Staff_elem *elem_p);
77     void announce_element(Staff_elem_info);
78     virtual void process_requests();
79     virtual void do_post_move();
80     virtual void do_pre_move();
81     /**
82       @return the position of central c.
83      */
84     int c0_position_i() const;
85
86     /**
87       set the position of central c.
88       @param the new position
89      */
90     void set_c0_position(int j);
91     Complex_walker(Complex_staff*);
92     ~Complex_walker();
93
94     Complex_staff *staff();
95 private:
96 };
97
98
99 #endif // COMPLEXWALKER_HH
100
101