lilypond-0.0.4
[lilypond.git] / pscore.hh
blob5ae4c37951649695cca690a9f1e99339500f56d3
1 // the breaking problem for a score.
3 #ifndef PSCORE_HH
4 #define PSCORE_HH
7 #include "vray.hh"
8 #include "pcol.hh"
9 #include "pstaff.hh"
11 /// all stuff which goes onto paper
12 struct PScore {
13 /// width of paper
14 Real linewidth;
16 /// the columns, ordered left to right
17 PointerList<PCol *> cols;
19 /// the idealspacings, no particular order
20 PointerList<Idealspacing*> suz;
22 /// the staffs ordered top to bottom
23 PointerList<PStaff*> staffs;
25 /// all symbols in score. No particular order.
26 PointerList<Item*> its;
28 /// if broken, the different lines
29 PointerList<Line_of_score*> lines;
31 /// crescs etc; no particular order
32 PointerList<Spanner *> spanners;
34 /****************************************************************/
36 svec<Item*> select_items(PStaff*, PCol*);
38 void calc_breaking();
39 /**
40 calculate where the lines are to be broken.
42 POST
44 lines contain the broken lines.
47 /// search all pcols which are breakable.
48 svec<const PCol *> find_breaks() const;
50 /// add a line to the broken stuff. Positions given in #config#
51 void add_line(svec<const PCol *> curline, svec<Real> config);
53 /// helper: solve for the columns in #curline#.
54 svec<Real> solve_line(svec<const PCol *> curline) const;
56 void add(PStaff *);
57 /// add item
58 void typeset_item(Item *, PCol *,PStaff*,int);
59 /// add to bottom of pcols
60 void add(PCol*);
61 /**
64 void output(Tex_stream &ts);
66 Idealspacing* get_spacing(PCol *, PCol *);
68 get the spacing between c1 and c2, create one if necessary.
72 PCursor<PCol *> find_col(PCol *);
73 void clean_cols();
74 void problem_OK()const ;
75 void OK()const ;
76 PScore();
77 void print() const;
79 /** notes, signs, symbols in a score can be grouped in two ways:
80 horizontally (staffwise), and vertically (columns). #PScore#
81 contains the items, the columns and the staffs.
83 #endif