]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/elem-group.cc
release: 0.1.9
[lilypond.git] / lily / elem-group.cc
index 1bf661a27140846c11cd1d2c3eb325258b67adf2..807573384f4022aa696d16eacafcc7b30159f9dc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- elem-group.cc -- implement Horizontal_vertical_group
+  elem-group.cc -- implement Horizontal_vertical_group_element
 
   source file of the GNU LilyPond music typesetter
 
 #include "item.hh"
 #include "debug.hh"
 
-bool
-Elbement_group::contains_b(Score_elem const*e)const
+void
+Axis_group_element::do_unlink()
 {
-    return elem_l_arr_.find_l(e);
+  remove_all();
 }
 
-Interval
-Vertical_group::do_height()const 
-{
-    Interval r;
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-       r.unite(elem_l_arr_[i]->height());
-    return r;
-}
 
-Interval
-Horizontal_group::do_width()const 
+bool
+Axis_group_element::contains_b (Score_elem const*e)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_.contains_b (e);
 }
 
-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
-Elbement_group::add_element(Score_elem*i_l)
+Link_array<Score_elem>
+Axis_group_element::get_extra_dependencies()const
 {
-    assert(i_l!= this);
-    assert(! contains_b(i_l));
-
-    elem_l_arr_.push(i_l);
-    add_dependency(i_l);
+  return axis_admin_.elem_l_arr_;
 }
 
 void
-Horizontal_group::add_element(Score_elem*elt)
+Axis_group_element::do_print()const
 {
-    elt->x_group_element_i_ ++;
-    Elbement_group::add_element(elt);
+  axis_admin_.print();
 }
 
-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)
+Vertical_group_element::add_element (Score_elem*e)
 {
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-       elem_l_arr_[i]->translate_x(x);
+  axis_admin_.add_element (e, this, Y_AXIS, Y_AXIS);
 }
 
 void
-Vertical_group::translate_y(Real y)
+Vertical_group_element::remove_element (Score_elem*e)
 {
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-       elem_l_arr_[i]->translate_y(y);
+  axis_admin_.remove_element (e, Y_AXIS, Y_AXIS);
 }
 
-IMPLEMENT_STATIC_NAME(Elbement_group);
-IMPLEMENT_IS_TYPE_B1(Elbement_group, Score_elem);
 
-void
-Elbement_group::do_print() const
+Interval
+Vertical_group_element::do_height() const
 {
-#ifndef NPRINT
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-       mtor << elem_l_arr_[i]->name() << ' ';
-#endif
+  return axis_admin_.extent (Y_AXIS);
 }
-
 void
-Horizontal_group::do_substitute_dependency(Score_elem* old, Score_elem *new_l)
+Vertical_group_element::remove_all()
 {
-    int i;
-
-    while ((i=elem_l_arr_.find_i(old))>=0) {
-       old->x_group_element_i_--;
-       
-       if (new_l){ 
-           new_l->x_group_element_i_ ++;
-           elem_l_arr_[i] = new_l;
-       }else {     
-           elem_l_arr_.del(i);
-       }
-    }
+  axis_admin_.remove_all (Y_AXIS,Y_AXIS);
 }
+// ****************
 
 void
-Vertical_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->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);
-       }
-    }
+  axis_admin_.remove_all (X_AXIS,X_AXIS);
 }
 
-Vertical_group::Vertical_group(Vertical_group 
-                              const &s)
-    : Elbement_group(s)
+void
+Horizontal_group_element::add_element (Score_elem*e)
 {
-   for (int i=0; i < elem_l_arr_.size(); i++) 
-       elem_l_arr_[i]->y_group_element_i_ ++;   
+  axis_admin_.add_element (e,this, X_AXIS,X_AXIS);
 }
 
-Horizontal_group::Horizontal_group(Horizontal_group 
-                                  const &s)
-    : Elbement_group(s)
+void
+Horizontal_group_element::remove_element (Score_elem*e)
 {
-   for (int i=0; i < elem_l_arr_.size(); i++) 
-       elem_l_arr_[i]->x_group_element_i_ ++;   
+  axis_admin_.remove_element (e,X_AXIS,X_AXIS);
 }
 
-Elbement_group::Elbement_group()
+
+Interval
+Horizontal_group_element::do_width()const
 {
-    transparent_b_ = true;
+  return axis_admin_.extent (X_AXIS);
 }
 
-IMPLEMENT_IS_TYPE_B2(Horizontal_vertical_group, Horizontal_group, Vertical_group);
-IMPLEMENT_STATIC_NAME(Horizontal_vertical_group);
 
-Horizontal_vertical_group::Horizontal_vertical_group()
-{
-}
+// ****************
 
 void
-Horizontal_vertical_group::do_substitute_dependency(Score_elem*o,Score_elem*n)
+Horizontal_vertical_group_element::remove_all()
 {
-    Vertical_group::do_substitute_dependency(o,n);
-    Horizontal_group::do_substitute_dependency(o,n);
+  axis_admin_.remove_all (X_AXIS,Y_AXIS);
 }
-
 void
-Horizontal_vertical_group::add_element(Score_elem*e)
+Horizontal_vertical_group_element::add_element (Score_elem *e)
 {
-    Vertical_group::add_element(e);
-    Horizontal_group::add_element(e);
+  axis_admin_.add_element (e, this, X_AXIS, Y_AXIS);
 }
 
 void
-Horizontal_vertical_group::do_print()const
+Horizontal_vertical_group_element::remove_element (Score_elem*e)
 {
-    Vertical_group::do_print();
+  axis_admin_.remove_element (e, X_AXIS, Y_AXIS);
 }
 
-void
-Vertical_group::do_print()const
-{
-    Elbement_group::do_print();
-}
 
-void
-Horizontal_group::do_print() const
-{
-    Elbement_group::do_print();
-}
+
+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);