+#include <msp/core/raii.h>
#include <msp/debug/demangle.h>
#include <msp/gl/matrix.h>
#include <msp/gl/meshbuilder.h>
first = 0;
max_scroll = 0;
view_size = 5;
+ ignore_slider_change = false;
observer = new DataObserver(*this);
item = item_factory->create_item(index);
else
item = new BasicItem(data->get_string(index));
- item->signal_autosize_changed.connect(sigc::bind(sigc::mem_fun(this, &List::item_autosize_changed), item));
add(*item);
+ item->autosize();
+ item->signal_autosize_changed.connect(sigc::bind(sigc::mem_fun(this, &List::item_autosize_changed), item));
return item;
}
reposition_child(slider, part);
else if(part.get_name()=="items")
{
+ SetFlag flag(ignore_slider_change);
+ check_view_range();
+
const Sides &margin = part.get_margin();
unsigned w = geom.w-min(geom.w, margin.left+margin.right);
unsigned y = geom.h-min(geom.h, margin.top);
}
}
}
-
- check_view_range();
}
Widget::rebuild_special(part);
void List::slider_value_changed(double value)
{
- if(max_scroll>0)
+ if(max_scroll>0 && !ignore_slider_change)
{
first = max_scroll-static_cast<unsigned>(value);
rebuild();
void List::DataObserver::refresh_item(unsigned i)
{
delete list.items[i];
+ // Avoid stale pointer while create_item is executing
+ list.items[i] = 0;
list.items[i] = list.create_item(i);
list.items_changed();
}
if(MultiColumnItem *mci = dynamic_cast<MultiColumnItem *>(*i))
mci->set_widths(self_widths);
}
- else
- set_widths(self_widths);
+
+ set_widths(self_widths);
}