2 command-request.hh -- declare non-musical requests
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
10 #ifndef COMMANDREQUEST_HH
11 #define COMMANDREQUEST_HH
15 #include "duration.hh"
17 /** Request which are assumed to be "happening" before the
19 class Command_req : public virtual Request {
21 REQUESTMETHODS(Command_req, command);
22 virtual Measure_grouping_req * measuregrouping() { return 0; }
23 virtual Clef_change_req * clefchange() { return 0; }
24 virtual Key_change_req * keychange() { return 0; }
25 virtual Partial_measure_req * partial() { return 0; }
26 virtual Meter_change_req * meterchange() { return 0; }
27 virtual Bar_req *bar() { return 0; }
28 virtual Cadenza_req *cadenza() { return 0; }
29 virtual Disallow_break_req *disallowbreak() { return 0; }
30 virtual Timing_req*timing() { return 0; }
31 virtual Command_script_req*commandscript() { return 0;}
32 virtual Break_force_req *forcebreak () { return 0; }
36 class Break_force_req : public Command_req {
38 REQUESTMETHODS(Break_force_req, forcebreak);
41 class Command_script_req : public Command_req, public Script_req {
45 ~Command_script_req();
46 REQUESTMETHODS(Command_script_req, commandscript);
50 class Disallow_break_req : public Command_req {
52 REQUESTMETHODS(Disallow_break_req, disallowbreak);
56 /** Baseclass for meter/partial req. It has to be handled by
57 Staff_{walker,column} baseclass. */
58 class Timing_req : public Command_req {
60 REQUESTMETHODS(Timing_req, timing);
61 virtual Tempo_req * tempo(){return 0; }
65 class Tempo_req : public Timing_req
72 REQUESTMETHODS(Tempo_req, tempo);
73 bool do_equal_b (Request *) const;
76 class Partial_measure_req : public Timing_req {
80 Partial_measure_req (Moment);
81 REQUESTMETHODS(Partial_measure_req, partial);
82 bool do_equal_b (Request*) const;
88 class Meter_change_req : public Timing_req {
90 int beats_i_, one_beat_i_;
94 bool do_equal_b (Request*) const;
95 REQUESTMETHODS(Meter_change_req, meterchange);
98 /// toggle Cadenza mode
99 class Cadenza_req : public Timing_req {
103 bool do_equal_b (Request*) const;
105 REQUESTMETHODS(Cadenza_req,cadenza);
108 /// check if we're at start of a measure.
109 class Barcheck_req : public Timing_req {
111 bool do_equal_b (Request *) const;
112 REQUESTMETHODS(Barcheck_req,barcheck);
115 class Measure_grouping_req : public Timing_req {
117 Array<int> beat_i_arr_;
118 Array<Moment> elt_length_arr_;
119 bool do_equal_b (Request *) const;
120 REQUESTMETHODS(Measure_grouping_req, measuregrouping);
123 /** draw a (repeat)-bar. This something different than #Barcheck_req#,
124 the latter should only happen at the start of a measure. */
125 class Bar_req : public Command_req {
129 bool do_equal_b (Request*) const;
131 REQUESTMETHODS(Bar_req,bar);
137 Routines for sharps and flats are separated,
138 so that caller may identify non-conventional keys.
140 class Key_change_req : public Command_req {
142 Array<Melodic_req*> melodic_p_arr_;
145 /// don't ignore the octaves in #melodic_p_arr_#?
146 bool multi_octave_b_;
148 Key_change_req (Key_change_req const&);
150 REQUESTMETHODS(Key_change_req, keychange);
152 /// squash the octaves to 1
153 void squash_octaves();
154 /// return number of flats in key
157 /// return number of sharps in key
160 void transpose (Melodic_req const * d) const;
165 class Clef_change_req : public Command_req {
168 Clef_change_req (String);
169 REQUESTMETHODS(Clef_change_req, clefchange);
172 #endif // COMMANDREQUEST_HH