+ Item *item = list.create_item(i);
+ list.add(*item);
+ list.items.insert(list.items.begin()+i, item);
+ list.items_changed();
+}
+
+void List::DataObserver::item_removed(unsigned i)
+{
+ if(list.sel_index>static_cast<int>(i))
+ --list.sel_index;
+ else if(list.sel_index==static_cast<int>(i))
+ list.sel_index = -1;
+
+ delete list.items[i];
+ list.items.erase(list.items.begin()+i);
+ list.items_changed();
+}
+
+void List::DataObserver::cleared()
+{
+ list.sel_index = -1;
+ for(vector<Item *>::iterator i=list.items.begin(); i!=list.items.end(); ++i)
+ delete *i;
+ list.items.clear();
+ list.items_changed();
+}
+
+void List::DataObserver::refresh_strings()
+{
+ list.items_changed();
+}
+
+
+void List::Item::autosize_special(const Part &part, Geometry &ageom)
+{
+ if(part.get_name()=="children")