#include <sigc++/signal.h>
#include "container.h"
+#include "label.h"
#include "listdata.h"
#include "vslider.h"
void refresh_strings();
};
+protected:
+ class Item: public Container
+ {
+ public:
+ virtual const char *get_class() const { return "listitem"; }
+
+ virtual void autosize();
+ 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;
VSlider slider;
+ std::vector<Item *> items;
public:
List();
const ListData &get_data() const { return *data; }
private:
void items_changed();
+protected:
+ virtual Item *create_item(unsigned);
public:
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);
};