]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/elem-group.cc
release: 0.0.68pre
[lilypond.git] / lily / elem-group.cc
index e4a012d3f3cab6bd921e26384cf9ab7d2d550d9f..e104187fc24c85cbb21dc9a3a49f78a5a75ab9f4 100644 (file)
@@ -1,5 +1,5 @@
 /*
 elem-group.cc -- implement Element_group
elem-group.cc -- implement Horizontal_vertical_group
 
   source file of the GNU LilyPond music typesetter
 
 #include "item.hh"
 #include "debug.hh"
 
+bool
+Elbement_group::contains_b(Score_elem const*e)const
+{
+    return elem_l_arr_.find_l(e);
+}
+
 Interval
-Element_group::do_height()const 
+Vertical_group::do_height()const 
 {
     Interval r;
     for (int i=0; i < elem_l_arr_.size(); i++) 
@@ -21,7 +27,7 @@ Element_group::do_height()const
 }
 
 Interval
-Element_group::do_width()const 
+Horizontal_group::do_width()const 
 {
     Interval r;
     for (int i=0; i < elem_l_arr_.size(); i++) 
@@ -30,27 +36,55 @@ Element_group::do_width()const
     return r;
 }
 
+IMPLEMENT_STATIC_NAME(Horizontal_group);
+IMPLEMENT_IS_TYPE_B1(Horizontal_group, Elbement_group);
+IMPLEMENT_IS_TYPE_B1(Vertical_group, Elbement_group);
+IMPLEMENT_STATIC_NAME(Vertical_group);
+
 void
-Element_group::add_element(Score_elem*i_l)
+Elbement_group::add_element(Score_elem*i_l)
 {
-    i_l->group_element_i_ ++;
-    
-    assert(! elem_l_arr_.find_l(i_l));
+    assert(i_l!= this);
+    assert(! contains_b(i_l));
+
     elem_l_arr_.push(i_l);
     add_dependency(i_l);
 }
 
 void
-Element_group::translate(Offset o)
+Horizontal_group::add_element(Score_elem*elt)
+{
+    elt->x_group_element_i_ ++;
+    Elbement_group::add_element(elt);
+}
+
+void
+Vertical_group::add_element(Score_elem*e)
+{
+    e->y_group_element_i_++;
+    Elbement_group::add_element(e);
+}
+
+
+void
+Horizontal_group::translate_x(Real x)
+{
+    for (int i=0; i < elem_l_arr_.size(); i++) 
+       elem_l_arr_[i]->translate_x(x);
+}
+
+void
+Vertical_group::translate_y(Real y)
 {
     for (int i=0; i < elem_l_arr_.size(); i++) 
-       elem_l_arr_[i]->translate(o);
+       elem_l_arr_[i]->translate_y(y);
 }
 
-IMPLEMENT_STATIC_NAME(Element_group);
+IMPLEMENT_STATIC_NAME(Elbement_group);
+IMPLEMENT_IS_TYPE_B1(Elbement_group, Score_elem);
 
 void
-Element_group::do_print() const
+Elbement_group::do_print() const
 {
 #ifndef NPRINT
     for (int i=0; i < elem_l_arr_.size(); i++) 
@@ -59,35 +93,91 @@ Element_group::do_print() const
 }
 
 void
-Element_group::do_substitute_dependency(Score_elem* old, Score_elem *new_l)
+Horizontal_group::do_substitute_dependency(Score_elem* old, Score_elem *new_l)
 {
     int i;
 
     while ((i=elem_l_arr_.find_i(old))>=0) {
+       old->x_group_element_i_--;
        
-       old->group_element_i_--;
        if (new_l){ 
-           new_l->group_element_i_ ++;
+           new_l->x_group_element_i_ ++;
            elem_l_arr_[i] = new_l;
        }else {     
            elem_l_arr_.del(i);
        }
     }
+}
+
+void
+Vertical_group::do_substitute_dependency(Score_elem* old, Score_elem *new_l)
+{
+    int i;
 
+    while ((i=elem_l_arr_.find_i(old))>=0) {
+       old->y_group_element_i_--;
+       
+       if (new_l){ 
+           new_l->y_group_element_i_ ++;
+           elem_l_arr_[i] = new_l;
+       }else {     
+           elem_l_arr_.del(i);
+       }
+    }
 }
 
-String
-Element_group::TeX_string()const
+Vertical_group::Vertical_group(Vertical_group 
+                              const &s)
+    : Elbement_group(s)
 {
-    return "";
+   for (int i=0; i < elem_l_arr_.size(); i++) 
+       elem_l_arr_[i]->y_group_element_i_ ++;   
 }
 
-Element_group::Element_group(Element_group const&s)
-    :elem_l_arr_(s.elem_l_arr_)
+Horizontal_group::Horizontal_group(Horizontal_group 
+                                  const &s)
+    : Elbement_group(s)
 {
    for (int i=0; i < elem_l_arr_.size(); i++) 
-       elem_l_arr_[i]->group_element_i_ ++;   
+       elem_l_arr_[i]->x_group_element_i_ ++;   
+}
+
+Elbement_group::Elbement_group()
+{
+    transparent_b_ = true;
+}
+
+IMPLEMENT_IS_TYPE_B2(Horizontal_vertical_group, Horizontal_group, Vertical_group);
+IMPLEMENT_STATIC_NAME(Horizontal_vertical_group);
+
+void
+Horizontal_vertical_group::do_substitute_dependency(Score_elem*o,Score_elem*n)
+{
+    Vertical_group::do_substitute_dependency(o,n);
+    Horizontal_group::do_substitute_dependency(o,n);
+}
+
+void
+Horizontal_vertical_group::add_element(Score_elem*e)
+{
+    Vertical_group::add_element(e);
+    Horizontal_group::add_element(e);
+}
+
+void
+Horizontal_vertical_group::do_print()const
+{
+    Vertical_group::do_print();
 }
 
-Element_group::Element_group()
-{}
+void
+Vertical_group::do_print()const
+{
+    Elbement_group::do_print();
+}
+
+void
+Horizontal_group::do_print() const
+{
+    Elbement_group::do_print();
+}