]> git.donarmstrong.com Git - lilypond.git/blobdiff - hdr/register.hh
partial: 0.0.38.hanjan
[lilypond.git] / hdr / register.hh
index 0c47e35cd1979bd2ed7a8c6a04c7bc0b9e03c2e2..95dfe1e67b8e48afc64436a0ab6a6d1a3eb728f5 100644 (file)
@@ -6,77 +6,88 @@
 
 #ifndef REGISTER_HH
 #define REGISTER_HH
+
 #include "proto.hh"
 #include "varray.hh"
 #include "request.hh"
+#include "staffeleminfo.hh"
 
-/// data container.
-struct Staff_elem_info {
-    Staff_elem * elem_p_;
-    Request*req_l_;
-    const Voice * voice_l_;
-    Voice_group_registers * group_regs_l_; 
-    Request_register * origin_reg_l_;
-
-    /* *** */
-    Staff_elem_info(Staff_elem*, Request*, Request_register*);
-    Staff_elem_info();
-};
 
-/// Hungarian postfix: reg
 /**
-  a struct which processes requests, and creates the Staff_elems  
+  a struct which processes requests, and creates the #Staff_elem#s.
+   Hungarian postfix: reg
   */
-struct Request_register {
-    Complex_walker * walk_l_;
-    Array<Request*> accepted_req_arr_;
-    
-    /* *************** */
+class Request_register {
     /**
-      Warning: you can't copy a Request_register
+      Warning: you can't copy a #Request_register#
       */
     Request_register(Request_register const &);
+public:
+    Complex_walker * walk_l_;
+    Array<Request*> accepted_req_arr_;
+    
     Request_register(Complex_walker*);
     Request_register();
     virtual ~Request_register(){}
 
-    /** take note of item/spaanner
-       put item in spanner. Adjust local key; etc.
-      */
-    virtual void acknowledge_element(Staff_elem_info){}
     /**
-      Announce element to  walker
-      */
-    void announce_element(Staff_elem_info);
+      take note of item/spanner
+      put item in spanner. Adjust local key; etc.
 
-    /**
-      invoke walker method to typeset element
+      Default: ignore the info
       */
-    void typeset_element(Staff_elem*elem_p);
-    
+    virtual void acknowledge_element(Staff_elem_info){}
+
     /**
       try to fit the request in this register
 
       @return
       false: not noted,  not taken.
 
-      true: request swallowed. Don't try to put elsewhere
+      true: request swallowed. Don't try to put the request elsewhere.
 
       (may be we could use C++ exceptions.. :-)
+
+      #Request_register::try_request# always returns false
       */
-    virtual bool try_request(Request *req_l) =0;
+    virtual bool try_request(Request *req_l);
     
     /// make items/spanners with the requests you got
-    virtual void process_request()=0;
-    Paperdef * paper() const;
-    /// typeset any spanners. Empty accepted_req_arr_
+    virtual void process_request(){}
+
+    /// typeset any spanners. Empty #accepted_req_arr_#
     void pre_move_processing();
+    /// reset any appropriate data.
     void post_move_processing();
+    virtual bool acceptable_request_b(Request*) const;    
     virtual void set_dir(int){}
 protected:
-    /// virtual, called by pre_move_process()
+    /// utility
+    Paperdef * paper() const;
+
+
+     /**
+      invoke walker method to typeset element
+      */
+    void typeset_element(Staff_elem*elem_p);
+
+
+    /**
+      typeset a "command" item.
+      If the column is not breakable, #pre_p# and #post_p# are junked
+      */
+    void typeset_breakable_item(Item * pre_p , Item * nobreak_p, Item * post_p);
+    /** virtual, called by #pre_move_processing()#
+      #Request_register::do_pre_move_process()# defaults to NOP
+      */
     virtual void do_pre_move_process(){}
+    /** virtual, called by #post_move_processing#,
+      #Request_register::do_post_move_process()# defaults to NOP */
     virtual void do_post_move_process(){}
+    /**
+      Announce element to walker. Utility
+      */
+    void announce_element(Staff_elem_info);
 };