]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/list.cpp
Recreate list items when setting data
[libs/gltk.git] / source / list.cpp
index b969ec038994bbe9d9609bf558b4d0b732e57ca4..ec3f9942d458eece47a62f4eb2ee2b233c5d54b7 100644 (file)
@@ -82,6 +82,17 @@ void List::set_data(ListData &d)
        own_data = false;
        observer = new DataObserver(*this);
 
+       for(vector<Item *>::iterator i=items.begin(); i!=items.end(); ++i)
+               delete *i;
+       items.clear();
+       unsigned n_items = data->size();
+       for(unsigned i=0; i<n_items; ++i)
+       {
+               Item *item = create_item(i);
+               add(*item);
+               items.push_back(item);
+       }
+
        items_changed();
 }
 
@@ -117,7 +128,7 @@ void List::set_selected_index(int i)
                items[sel_index]->set_active(false);
        if(i<0)
                sel_index = -1;
-       else
+       else if(i!=sel_index)
        {
                sel_index = i;
                items[sel_index]->set_active(true);
@@ -358,6 +369,7 @@ List::Loader::Loader(List &l):
        DataFile::DerivedObjectLoader<List, Widget::Loader>(l)
 {
        add("item", &Loader::item);
+       add("view_size", &List::view_size);
 }
 
 void List::Loader::item(const string &v)