+private:
+ /// This exists to make disconnecting signals easier
+ class DataObserver: public sigc::trackable
+ {
+ private:
+ List &list;
+
+ public:
+ DataObserver(List &);
+
+ void item_added(unsigned);
+ void item_removed(unsigned);
+ void cleared();
+ 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;