]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/request.hh
release: 1.5.29
[lilypond.git] / lily / include / request.hh
index 66e62d484344a43ae15bd09ca9a7085184e368bb..b612cb76fbc75f544ed86a0793e56a4962b5f924 100644 (file)
@@ -1,74 +1,76 @@
 /*
   request.hh -- declare Request baseclasses.
 
-  source file of the LilyPond music typesetter
+  source file of the GNU LilyPond music typesetter
 
-  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+  (c)  1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #ifndef REQUEST_HH
 #define REQUEST_HH
-// LilyPond's second egg of columbus!
 
-#include "glob.hh"
+
 #include "string.hh"
 #include "moment.hh"
-#include "class-name.hh"
+#include "virtual-methods.hh"
+#include "input.hh"
+#include "music.hh"
+#include "direction.hh"
+
+
+/** An atom of musical information.  This is an abstract class for any
+  piece of music that does not contain other Music.
+  
+  Hungarian postfix: req
 
-/**
- a voice element wants something printed.
- Hungarian postfix: req
- @see lilygut manpage
  */
-class Request {
+class Request : public Music {
+public:
+  Request ();
+  VIRTUAL_COPY_CONS (Music);
+  bool equal_b (Request const*) const;
+protected:
+  virtual bool do_equal_b (Request const*) const;
+
+};
+
+
+
+class Script_req : public virtual Request
+{
 public:
-    Voice_element*elt_l_;
-    char const* defined_ch_C_;
-    
-    /* *************** */
-    Voice  * voice_l();
-    Request();
-    Request(Request const&);
-    virtual ~Request(){}
-
-    NAME_MEMBERS(Request);
-    virtual Request* clone() const { return new Request(*this); }
-    void print()const ;
-    
-    virtual void transpose(Melodic_req const &){}
-    virtual Moment duration() const { return 0; }
-
-    /*  accessors for children
-       maybe checkout RTTI
-     */
-    virtual Barcheck_req *barcheck() { return 0; }
-    virtual Note_req *note() { return 0;}
-    virtual Script_req *script() { return 0;}
-    virtual Stem_req *stem() { return 0;}
-    virtual Text_req*text() { return 0; }
-    virtual Rest_req *rest() { return 0; }
-    virtual Span_req *span() { return 0; }
-    virtual Beam_req *beam() { return 0 ; }
-    virtual Plet_req* plet() { return 0; }
-    virtual Slur_req *slur() { return 0 ; }
-    virtual Rhythmic_req*rhythmic() { return 0; }
-    virtual Lyric_req* lreq_l() { return 0; }
-    virtual Melodic_req *melodic() { return 0; }
-    virtual Terminate_voice_req *terminate() {return 0;}
-    virtual Group_change_req * groupchange() { return 0;}
-    virtual Group_feature_req * groupfeature() { return 0; }
-    virtual Spacing_req * spacing() { return 0; }
-    virtual Blank_req * blank() { return 0; }
-    virtual Musical_req *musical() { return 0; }
-    virtual Command_req * command() { return 0; }
+  void set_direction (Direction d);
+  Direction get_direction () const;
+  VIRTUAL_COPY_CONS (Music);
+  Script_req ();
+};
+
+
+/**
+  Requests to start or stop something.
+ This type of request typically results in the creation of a #Spanner#
+*/
+class Span_req  : public virtual Request  {
+public:
+  String get_span_type_str () const;
+  void set_span_type_str (String);
+  void set_span_dir (Direction d);
+  Direction get_span_dir () const;  
+  
+  Span_req ();
 protected:
-    virtual void do_print()const ;
+  
+  virtual bool do_equal_b (Request const*) const;
+
+  VIRTUAL_COPY_CONS (Music);
 };
 
-#define REQUESTMETHODS(T,accessor)     \
-virtual T * accessor() { return this;}\
-NAME_MEMBERS(T);\
-virtual Request *clone() const { return  new T(*this); } \
-virtual void do_print() const
+/**
+  Start a tie at this note, end it at the next
+ */
+class Tie_req : public Request {
+public:
+  VIRTUAL_COPY_CONS (Music);
+};
 
 #endif