]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/request.hh
release: 0.1.11
[lilypond.git] / lily / include / request.hh
1 /*
2   request.hh -- declare Request baseclasses.
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #ifndef REQUEST_HH
10 #define REQUEST_HH
11
12
13 #include "string.hh"
14 #include "moment.hh"
15 #include "virtual-methods.hh"
16 #include "input.hh"
17 #include "music.hh"
18 #include "direction.hh"
19
20 /**
21  a voice element wants something printed.
22  Hungarian postfix: req
23  @see lilygut manpage
24  */
25 class Request : public Music {
26
27 public:
28     
29     /* *************** */
30
31     virtual ~Request(){}
32
33     DECLARE_MY_RUNTIME_TYPEINFO;
34     VIRTUAL_COPY_CONS(Request,Music);
35     
36     virtual MInterval time_int() const;
37     virtual void transpose (Melodic_req const &){}
38     virtual Moment duration() const { return 0; }
39
40     /*  accessors for children
41         maybe checkout RTTI
42      */
43     virtual Barcheck_req *barcheck() { return 0; }
44     virtual Script_req *script() { return 0;}
45     virtual Span_req *span() { return 0; }
46     virtual Spacing_req * spacing() { return 0; }
47     virtual Blank_req * blank() { return 0; }
48     virtual Musical_req *musical() { return 0; }
49     virtual Command_req * command() { return 0; }
50     bool equal_b (Request*) const;
51 protected:
52     virtual bool do_equal_b (Request*) const;
53     virtual void do_print() const;
54 };
55
56 #define REQUESTMETHODS(T,accessor)      \
57 virtual T * accessor() { return this;}\
58 DECLARE_MY_RUNTIME_TYPEINFO;\
59 VIRTUAL_COPY_CONS(T, Request);\
60 virtual void do_print() const
61
62
63
64 /** Put a script above or below this ``note'' or bar. eg upbow, downbow. Why
65   a request? These symbols may conflict with slurs and brackets, so
66   this also a request */
67 class Script_req  : public virtual Request { 
68 public:
69     Direction dir_;
70     General_script_def *scriptdef_p_;
71
72     /* *************** */
73     bool do_equal_b (Request*) const;
74
75     Script_req();
76     REQUESTMETHODS(Script_req,script);
77     ~Script_req();
78     Script_req (Script_req const&);
79 };
80
81     
82 #endif