]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/request.hh
release: 0.0.67
[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 // GNU LilyPond's second egg of columbus!
12
13 #include "glob.hh"
14 #include "string.hh"
15 #include "moment.hh"
16 #include "virtual-methods.hh"
17 #include "input.hh"
18
19 /**
20  a voice element wants something printed.
21  Hungarian postfix: req
22  @see lilygut manpage
23  */
24 class Request : public Input {
25 public:
26     Voice_element*elt_l_;
27     
28     /* *************** */
29     Voice  * voice_l();
30     Request();
31     Request(Request const&);
32     virtual ~Request(){}
33
34     NAME_MEMBERS();
35     virtual Request* clone() const { return new Request(*this); }
36     void print()const ;
37     
38     virtual void transpose(Melodic_req const &){}
39     virtual Moment duration() const { return 0; }
40
41     /*  accessors for children
42         maybe checkout RTTI
43      */
44     virtual Barcheck_req *barcheck() { return 0; }
45     virtual Script_req *script() { return 0;}
46     virtual Text_req*text() { return 0; }
47     virtual Rest_req *rest() { return 0; }
48     virtual Span_req *span() { return 0; }
49     virtual Spacing_req * spacing() { return 0; }
50     virtual Blank_req * blank() { return 0; }
51     virtual Musical_req *musical() { return 0; }
52     virtual Command_req * command() { return 0; }
53 protected:
54     virtual void do_print()const ;
55 };
56
57 #define REQUESTMETHODS(T,accessor)      \
58 virtual T * accessor() { return this;}\
59 NAME_MEMBERS();\
60 VIRTUAL_COPY_CONS(T, Request)\
61 virtual void do_print() const
62
63
64
65 /** Put a script above or below this ``note'' or bar. eg upbow, downbow. Why
66   a request? These symbols may conflict with slurs and brackets, so
67   this also a request */
68 class Script_req  : public virtual Request { 
69 public:
70     int dir_i_;
71     General_script_def *scriptdef_p_;
72
73     /* *************** */
74     static int compare(const Script_req &, const Script_req &);
75     Script_req();
76     REQUESTMETHODS(Script_req,script);
77     ~Script_req();
78     Script_req(Script_req const&);
79 };
80
81     
82 #endif