+
+protected:
+ /**
+ Sets the widget's parent Container. The widget must be unparented when
+ calling this function with a non-null parameter.
+ */
+ void set_parent(Container *);
+public:
+ Container *get_parent() const { return parent; }
+
+ /**
+ Sets the widget style. The final style name is constructed by concatenating
+ the widget class and the style name with a dash.
+ */
+ void set_style(const std::string &);
+ const Style &get_style() const { return *style; }
+
+protected:
+ /**
+ Gets a style object from the resource collection based on the class and
+ style names of the widget.
+ */
+ void update_style();
+
+public:
+ void set_tooltip(const std::string &);
+ const std::string &get_tooltip() const { return tooltip; }
+
+ void set_visible(bool);
+ bool is_visible() const { return visible; }
+ void set_focusable(bool);
+ bool is_focusable() const { return focusable; }
+ void set_focus();
+
+protected:
+ void set_state(State s) { set_state(s, s); }
+ void clear_state(State s) { set_state(s, NORMAL); }
+ void set_state(State, State);
+
+ void rebuild();
+ virtual void rebuild_special(const Part &, CachedPart &) { }
+
+public:
+ void render(GL::Renderer &) const;
+protected:
+ virtual void render_special(const Part &, GL::Renderer &) const { }
+
+public:
+ // Events