]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/list.cpp
Add a persistent view size attribute to List
[libs/gltk.git] / source / list.cpp
index 710d1fc6fa7cf7c05e2fe88e5c6349aa018cf298..c74af90d4541cb2185f2afc1f0d7a1bff8f6c172 100644 (file)
@@ -31,6 +31,7 @@ void List::init()
        sel_index = -1;
        first = 0;
        max_scroll = 0;
+       view_size = 5;
 
        observer = new DataObserver(*this);
 
@@ -47,11 +48,6 @@ List::~List()
 }
 
 void List::autosize()
-{
-       autosize_rows(5);
-}
-
-void List::autosize_rows(unsigned n)
 {
        if(!style)
                return;
@@ -69,12 +65,12 @@ void List::autosize_rows(unsigned n)
                        items[i]->autosize();
                        const Geometry &igeom = items[i]->get_geometry();
                        max_w = max(max_w, igeom.w);
-                       if(i<n)
+                       if(view_size==0 || i<view_size)
                                total_h += igeom.h;
                }
 
-               if(!items.empty() && items.size()<n)
-                       total_h = total_h*n/items.size();
+               if(!items.empty() && items.size()<view_size)
+                       total_h = total_h*view_size/items.size();
 
                geom.w = max(geom.w, max_w+margin.left+margin.right);
                geom.h = max(geom.h, total_h+margin.top+margin.bottom);
@@ -84,11 +80,6 @@ void List::autosize_rows(unsigned n)
        rebuild();
 }
 
-void List::autosize_all()
-{
-       autosize_rows(data->size());
-}
-
 void List::set_data(ListData &d)
 {
        delete observer;
@@ -114,6 +105,17 @@ List::Item *List::create_item(unsigned index)
        return new BasicItem(data->get_string(index));
 }
 
+void List::set_view_size(unsigned s)
+{
+       view_size = s;
+       signal_autosize_changed.emit();
+}
+
+void List::set_view_all()
+{
+       set_view_size(0);
+}
+
 void List::set_selected_index(int i)
 {
        if(i>static_cast<int>(data->size()))