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();
}
void List::set_selected_index(int i)
{
- if(i>static_cast<int>(data->size()))
+ if(i>=static_cast<int>(data->size()))
throw out_of_range("List::set_selected_index");
if(sel_index>=0)
list.data->signal_item_added.connect(sigc::mem_fun(this, &DataObserver::item_added));
list.data->signal_item_removed.connect(sigc::mem_fun(this, &DataObserver::item_removed));
list.data->signal_cleared.connect(sigc::mem_fun(this, &DataObserver::cleared));
- list.data->signal_refresh_strings.connect(sigc::mem_fun(this, &DataObserver::refresh_strings));
+ list.data->signal_refresh_item.connect(sigc::mem_fun(this, &DataObserver::refresh_item));
}
void List::DataObserver::item_added(unsigned i)
list.items_changed();
}
-void List::DataObserver::refresh_strings()
+void List::DataObserver::refresh_item(unsigned i)
{
+ delete list.items[i];
+ list.items[i] = list.create_item(i);
list.items_changed();
}