]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/item.hh
release: 1.3.70
[lilypond.git] / lily / include / item.hh
index 6f3eb6a7cb19740a0f668c5489d70397fa1dbb62..16f298f7f2361983d612975fcd699d3e6dfff2d2 100644 (file)
@@ -3,18 +3,20 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 #ifndef ITEM_HH
 #define ITEM_HH
 
-#include "glob.hh"
-#include "boxes.hh"
+
+#include "box.hh"
 #include "string.hh"
-#include "score-elem.hh"
+#include "score-element.hh"
+#include "drul-array.hh"
+#include "protected-scm.hh"
 
 /**
- a horizontally fixed size element of the score
+  A horizontally fixed size element of the score.
 
   Item is the datastructure for printables whose width is known
   before the spacing is calculated
   NB. This doesn't mean an Item has to initialize the output field before
   spacing calculation. 
   
-*/
-class Item : public virtual Score_elem {
+  
+  Element properties
+  
+  visibility-lambda -- a function that takes the break
+  direction and returns a (transparent, empty) cons
+
+  breakable -- boolean indicating if this is a breakable item (clef,
+  barline, key sig, etc.)
+
+   */
+class Item : public Score_element
+{
+  Drul_array<Item*> broken_to_drul_;
+
 public:
-    /// indirection to the column it is in
-    PCol * pcol_l_;
-    
-    Item * broken_to_a_[2];
-
-    // nobreak = 0, pre =1, post = 2
-    int break_status_i()const;
-    Item * find_prebroken_piece(PCol*)const;
-    Item * find_prebroken_piece(Line_of_score*)const;    
-
-    virtual Item *item() { return this; }
-    Item();
-    Real hpos_f() const;
-    DECLARE_MY_RUNTIME_TYPEINFO;
-    virtual Line_of_score * line_l() const;
-protected:
-    virtual void  do_breakable_col_processing();
-    virtual void handle_prebroken_dependencies();
-    virtual void do_print()const;
+  VIRTUAL_COPY_CONS(Score_element);
+  Item (SCM);
+  Item (Item const &);
+
+  static bool breakable_b (Score_element*me);
+  bool broken_b () const;
+  
+  Direction break_status_dir () const;
+  
+  Item * find_prebroken_piece (Direction) const;
+  Score_element * find_broken_piece (Line_of_score*) const;    
 
+  virtual Line_of_score * line_l() const;
+  virtual Paper_column * column_l () const;
+  virtual void handle_prebroken_dependencies ();
+protected:
+  virtual void discretionary_processing ();
+  void copy_breakable_items();
 };