]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/elem-group.cc
release: 0.1.9
[lilypond.git] / lily / elem-group.cc
index e4a012d3f3cab6bd921e26384cf9ab7d2d550d9f..807573384f4022aa696d16eacafcc7b30159f9dc 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  elem-group.cc -- implement Element_group
+  elem-group.cc -- implement Horizontal_vertical_group_element
 
   source file of the GNU LilyPond music typesetter
 
 #include "item.hh"
 #include "debug.hh"
 
-Interval
-Element_group::do_height()const 
+void
+Axis_group_element::do_unlink()
 {
-    Interval r;
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-       r.unite(elem_l_arr_[i]->height());
-    return r;
+  remove_all();
 }
 
-Interval
-Element_group::do_width()const 
+
+bool
+Axis_group_element::contains_b (Score_elem const*e)const
+{
+  return axis_admin_.contains_b (e);
+}
+
+Link_array<Score_elem>
+Axis_group_element::get_extra_dependencies()const
 {
-    Interval r;
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-       if (elem_l_arr_[i]->item()) // makes no at preprocessing for spanners. 
-           r.unite(elem_l_arr_[i]->width());
-    return r;
+  return axis_admin_.elem_l_arr_;
 }
 
 void
-Element_group::add_element(Score_elem*i_l)
+Axis_group_element::do_print()const
 {
-    i_l->group_element_i_ ++;
-    
-    assert(! elem_l_arr_.find_l(i_l));
-    elem_l_arr_.push(i_l);
-    add_dependency(i_l);
+  axis_admin_.print();
 }
 
+// ****************
+
+
 void
-Element_group::translate(Offset o)
+Vertical_group_element::add_element (Score_elem*e)
 {
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-       elem_l_arr_[i]->translate(o);
+  axis_admin_.add_element (e, this, Y_AXIS, Y_AXIS);
+}
+
+void
+Vertical_group_element::remove_element (Score_elem*e)
+{
+  axis_admin_.remove_element (e, Y_AXIS, Y_AXIS);
 }
 
-IMPLEMENT_STATIC_NAME(Element_group);
 
+Interval
+Vertical_group_element::do_height() const
+{
+  return axis_admin_.extent (Y_AXIS);
+}
 void
-Element_group::do_print() const
+Vertical_group_element::remove_all()
 {
-#ifndef NPRINT
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-       mtor << elem_l_arr_[i]->name() << ' ';
-#endif
+  axis_admin_.remove_all (Y_AXIS,Y_AXIS);
 }
+// ****************
 
 void
-Element_group::do_substitute_dependency(Score_elem* old, Score_elem *new_l)
+Horizontal_group_element::remove_all()
 {
-    int i;
-
-    while ((i=elem_l_arr_.find_i(old))>=0) {
-       
-       old->group_element_i_--;
-       if (new_l){ 
-           new_l->group_element_i_ ++;
-           elem_l_arr_[i] = new_l;
-       }else {     
-           elem_l_arr_.del(i);
-       }
-    }
+  axis_admin_.remove_all (X_AXIS,X_AXIS);
+}
 
+void
+Horizontal_group_element::add_element (Score_elem*e)
+{
+  axis_admin_.add_element (e,this, X_AXIS,X_AXIS);
 }
 
-String
-Element_group::TeX_string()const
+void
+Horizontal_group_element::remove_element (Score_elem*e)
+{
+  axis_admin_.remove_element (e,X_AXIS,X_AXIS);
+}
+
+
+Interval
+Horizontal_group_element::do_width()const
+{
+  return axis_admin_.extent (X_AXIS);
+}
+
+
+// ****************
+
+void
+Horizontal_vertical_group_element::remove_all()
 {
-    return "";
+  axis_admin_.remove_all (X_AXIS,Y_AXIS);
+}
+void
+Horizontal_vertical_group_element::add_element (Score_elem *e)
+{
+  axis_admin_.add_element (e, this, X_AXIS, Y_AXIS);
 }
 
-Element_group::Element_group(Element_group const&s)
-    :elem_l_arr_(s.elem_l_arr_)
+void
+Horizontal_vertical_group_element::remove_element (Score_elem*e)
 {
-   for (int i=0; i < elem_l_arr_.size(); i++) 
-       elem_l_arr_[i]->group_element_i_ ++;   
+  axis_admin_.remove_element (e, X_AXIS, Y_AXIS);
 }
 
-Element_group::Element_group()
-{}
+
+
+IMPLEMENT_IS_TYPE_B1(Axis_group_element, Score_elem);
+IMPLEMENT_IS_TYPE_B1(Horizontal_group_element, Axis_group_element);
+IMPLEMENT_IS_TYPE_B1(Vertical_group_element, Axis_group_element);
+IMPLEMENT_IS_TYPE_B2(Horizontal_vertical_group_element, Horizontal_group_element, Vertical_group_element);