]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/elem-group.hh
d65c17312370202fe5e307fc02715ec1ed9e001f
[lilypond.git] / lily / include / elem-group.hh
1 /*
2   elem-group.hh -- declare Horizontal_vertical_group_element
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9
10 #ifndef ELEM_GROUP_HH
11 #define ELEM_GROUP_HH
12
13 #include "score-elem.hh"
14 #include "axis-group.hh"
15
16
17
18 /**
19   Treat a group of elements a unity in horizontal sense .
20   A column is a typical Vertical_group.
21  */
22 class Horizontal_group_element : public virtual Axis_group_element {
23 protected:
24     virtual void remove_all();
25     virtual Interval do_width() const;
26
27 public:
28     DECLARE_MY_RUNTIME_TYPEINFO;
29     virtual void add_element (Score_elem*);
30     virtual void remove_element (Score_elem*);
31
32 };
33 /**
34   Like Horizontal_group_element, but in X direction
35  */
36 class Vertical_group_element : public virtual Axis_group_element {
37 protected:
38     virtual Interval do_height() const;
39     virtual void remove_all();
40
41 public:
42     virtual void add_element (Score_elem*);
43     virtual void remove_element (Score_elem*);
44     DECLARE_MY_RUNTIME_TYPEINFO;
45 };
46
47 /** A class to treat a group of elements as a single entity. The
48   dimensions are the unions of the dimensions of what it contains.
49   Translation means translating the contents.
50   */
51 class Horizontal_vertical_group_element : public Vertical_group_element, 
52                                   public Horizontal_group_element 
53 {  
54 protected:
55     virtual void remove_all();
56 public:
57     virtual void add_element (Score_elem*);
58     virtual void remove_element (Score_elem*);
59     
60     DECLARE_MY_RUNTIME_TYPEINFO;    
61 };
62
63 #endif // ELEM_GROUP_HH