#include <sigc++/signal.h>
#include "container.h"
+#include "label.h"
#include "listdata.h"
#include "vslider.h"
class List: virtual public Widget, private Container
{
public:
- class Loader: public Widget::Loader
+ class Loader: public DataFile::DerivedObjectLoader<List, Widget::Loader>
{
public:
Loader(List &);
void refresh_strings();
};
+protected:
+ class Item: public Container
+ {
+ public:
+ virtual const char *get_class() const { return "listitem"; }
+
+ protected:
+ virtual void autosize_special(const Part &, Geometry &);
+ public:
+ void set_active(bool);
+
+ virtual void render_special(const Part &, GL::Renderer &) const;
+ };
+
+public:
+ class BasicItem: public Item
+ {
+ private:
+ Label label;
+
+ public:
+ BasicItem(const std::string &);
+
+ private:
+ virtual void on_style_change();
+ };
+
public:
sigc::signal<void, unsigned> signal_item_selected;
DataObserver *observer;
int sel_index;
unsigned first;
- unsigned n_visible;
- unsigned row_height;
-
- const Part *items_part;
+ unsigned max_scroll;
+ unsigned view_size;
VSlider slider;
+ std::vector<Item *> items;
public:
List();
virtual const char *get_class() const { return "list"; }
- virtual void autosize();
- void autosize_rows(unsigned);
- void autosize_all();
+private:
+ virtual void autosize_special(const Part &, Geometry &);
+public:
void set_data(ListData &);
ListData &get_data() { return *data; }
const ListData &get_data() const { return *data; }
private:
void items_changed();
+protected:
+ virtual Item *create_item(unsigned);
+
public:
+ void set_view_size(unsigned);
+ void set_view_all();
void set_selected_index(int);
int get_selected_index() const { return sel_index; }
private:
- virtual void rebuild_special(const Part &, CachedPart &);
virtual void render_special(const Part &, GL::Renderer &) const;
public:
virtual void on_style_change();
void reposition_slider();
+ void reposition_items();
void check_view_range();
void slider_value_changed(double);
};