]> git.donarmstrong.com Git - lilypond.git/blob - hdr/commandrequest.hh
release: 0.0.32
[lilypond.git] / hdr / commandrequest.hh
1 /*
2   commandrequest.hh -- declare Non musical requests
3
4   source file of the LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9
10 #ifndef COMMANDREQUEST_HH
11 #define COMMANDREQUEST_HH
12
13 #include "request.hh"
14 #include "varray.hh"
15
16 /**
17   Request assumed to be "happening" before the musical requests
18  */
19 struct Nonmusical_req : virtual Request {
20     REQUESTMETHODS(Nonmusical_req, nonmus);
21
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 Timing_req*timing() {  return 0; }
30 };
31
32
33 /** Baseclass for meter/partial req. It has to be handled by
34   Staff_{walker,column} baseclass.  */
35 struct Timing_req : Nonmusical_req {
36     REQUESTMETHODS(Timing_req, timing);
37 };
38
39
40 struct Partial_measure_req : Timing_req {
41     Moment duration_;
42
43     Partial_measure_req(Moment);
44     REQUESTMETHODS(Partial_measure_req, partial);
45 };
46
47 /**
48   todo: allow C meter
49  */
50 struct Meter_change_req : Timing_req {
51     int beats_i_, one_beat_i_;
52
53     Meter_change_req();
54     void set(int,int);
55     REQUESTMETHODS(Meter_change_req, meterchange);
56 };
57
58 /// toggle Cadenza mode
59 struct Cadenza_req : Timing_req {
60     /// turn on?
61     bool on_b;
62     Cadenza_req(bool);
63     REQUESTMETHODS(Cadenza_req,cadenza);
64 };
65
66 /// check if we're at start of a  measure.
67 struct Barcheck_req : Timing_req {
68
69     REQUESTMETHODS(Barcheck_req,barcheck);
70 };
71
72 struct Measure_grouping_req: Timing_req {
73     Array<int> beat_i_arr_;
74     Array<Moment> elt_length_arr_;
75
76     REQUESTMETHODS(Measure_grouping_req, measuregrouping);
77 };
78
79 struct Group_change_req : Nonmusical_req {
80     String newgroup_str_;
81     REQUESTMETHODS(Group_change_req, groupchange);
82 };
83
84 /** draw a (repeat)-bar. This something different than #Barcheck_req#,
85   the latter should only happen at the start of a measure.  */
86 struct Bar_req : Nonmusical_req {
87     String type;
88     Bar_req(String);
89     REQUESTMETHODS(Bar_req,bar);
90 };
91 struct Terminate_voice_req : Nonmusical_req {
92     REQUESTMETHODS(Terminate_voice_req,terminate);
93 };
94
95 struct Group_feature_req : Nonmusical_req {
96     int stemdir_i_;
97     Group_feature_req();
98     REQUESTMETHODS(Group_feature_req, groupfeature);
99 };
100
101
102 struct Key_change_req : Nonmusical_req {
103     Array<Melodic_req*> melodic_p_arr_;
104
105     Key_change_req();
106     Key_change_req(Key_change_req const&);
107     ~Key_change_req();
108     REQUESTMETHODS(Key_change_req, keychange);
109 };
110
111 struct Clef_change_req : Nonmusical_req {
112     String clef_str_;
113     Clef_change_req(String);
114     REQUESTMETHODS(Clef_change_req, clefchange);
115 };
116
117 #endif // COMMANDREQUEST_HH