2 command-request.hh -- declare Non musical requests
4 source file of the LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
10 #ifndef COMMANDREQUEST_HH
11 #define COMMANDREQUEST_HH
16 /** Request which are assumed to be "happening" before the
18 class Command_req : public virtual Request {
20 REQUESTMETHODS(Command_req, command);
21 virtual Terminate_voice_req *terminate() {return 0;}
22 virtual Group_change_req * groupchange() { return 0;}
23 virtual Group_feature_req * groupfeature() { return 0; }
25 virtual Measure_grouping_req * measuregrouping() { return 0; }
26 virtual Clef_change_req * clefchange() { return 0; }
27 virtual Key_change_req * keychange() { return 0; }
28 virtual Partial_measure_req * partial() { return 0; }
29 virtual Meter_change_req * meterchange() { return 0; }
30 virtual Bar_req *bar() { return 0; }
31 virtual Cadenza_req *cadenza() { return 0; }
32 virtual Timing_req*timing() { return 0; }
36 /** Baseclass for meter/partial req. It has to be handled by
37 Staff_{walker,column} baseclass. */
38 class Timing_req : public Command_req {
40 REQUESTMETHODS(Timing_req, timing);
44 class Partial_measure_req : public Timing_req {
48 Partial_measure_req(Moment);
49 REQUESTMETHODS(Partial_measure_req, partial);
55 class Meter_change_req : public Timing_req {
57 int beats_i_, one_beat_i_;
59 int compare(Meter_change_req const&);
62 REQUESTMETHODS(Meter_change_req, meterchange);
65 /// toggle Cadenza mode
66 class Cadenza_req : public Timing_req {
71 REQUESTMETHODS(Cadenza_req,cadenza);
74 /// check if we're at start of a measure.
75 class Barcheck_req : public Timing_req {
78 REQUESTMETHODS(Barcheck_req,barcheck);
81 class Measure_grouping_req : public Timing_req {
83 Array<int> beat_i_arr_;
84 Array<Moment> elt_length_arr_;
86 REQUESTMETHODS(Measure_grouping_req, measuregrouping);
89 class Group_change_req : public Command_req {
92 REQUESTMETHODS(Group_change_req, groupchange);
95 /** draw a (repeat)-bar. This something different than #Barcheck_req#,
96 the latter should only happen at the start of a measure. */
97 class Bar_req : public Command_req {
101 int compare(const Bar_req&)const;
102 REQUESTMETHODS(Bar_req,bar);
104 class Terminate_voice_req : public Command_req {
106 REQUESTMETHODS(Terminate_voice_req,terminate);
109 class Group_feature_req : public Command_req {
114 REQUESTMETHODS(Group_feature_req, groupfeature);
120 Routines for sharps and flats are separated,
121 so that caller may identify non-conventional keys.
123 class Key_change_req : public Command_req {
125 Array<Melodic_req*> melodic_p_arr_;
128 /// don't ignore the octaves in #melodic_p_arr_#?
129 bool multi_octave_b_;
131 Key_change_req(Key_change_req const&);
133 REQUESTMETHODS(Key_change_req, keychange);
135 /// squash the octaves to 1
136 void squash_octaves();
137 /// return number of flats in key
140 /// return number of sharps in key
143 void transpose(Melodic_req const & d) const;
148 class Clef_change_req : public Command_req {
151 Clef_change_req(String);
152 REQUESTMETHODS(Clef_change_req, clefchange);
155 #endif // COMMANDREQUEST_HH