#include <list>
#include <stdexcept>
#include <sigc++/trackable.h>
+#include "mspgltk_api.h"
#include "widget.h"
namespace Msp {
namespace GLtk {
-class hierarchy_error: public std::logic_error
+class MSPGLTK_API hierarchy_error: public std::logic_error
{
public:
hierarchy_error(const std::string &);
};
-class Container: virtual public Widget
+class MSPGLTK_API Container: virtual public Widget
{
protected:
struct Child: public sigc::trackable
{
Container &container;
Widget *widget;
+ Time::TimeDelta time_since_animate;
Child(Container &, Widget *);
virtual ~Child();
void request_focus();
void grab_pointer();
void ungrab_pointer();
+ void request_animation(const Time::TimeDelta &);
+ void rebuild_needed();
};
std::list<Child *> children;
Widget *pointer_focus;
bool pointer_grabbed;
Widget *input_focus;
+ Widget *saved_input_focus;
Widget *touch_focus;
+ bool children_rebuild_needed;
Container();
public:
void raise(Widget &);
protected:
- void set_pointer_focus(Widget *);
+ void set_pointer_focus(Widget *, bool = false);
void set_input_focus(Widget *);
public:
Widget *get_input_focus() const { return input_focus; }
Widget *get_final_input_focus() const;
+private:
+ void check_animation_interval();
+
+protected:
+ virtual void rebuild_hierarchy();
+
+public:
virtual void button_press(int, int, unsigned);
virtual void button_release(int, int, unsigned);
virtual void pointer_motion(int, int);
Widget *get_pointer_target(int, int, bool) const;
public:
virtual void pointer_leave();
- virtual void key_press(unsigned, unsigned);
- virtual void key_release(unsigned, unsigned);
virtual void touch_press(int, int, unsigned);
virtual void touch_release(int, int, unsigned);
virtual void touch_motion(int, int, unsigned);
- virtual void character(wchar_t);
+ virtual bool key_press(unsigned, unsigned);
+ virtual bool key_release(unsigned, unsigned);
+ virtual bool character(wchar_t);
+ virtual void focus_in();
virtual void focus_out();
+ virtual bool navigate(Navigation);
+ virtual void animate(const Time::TimeDelta &);
protected:
virtual void on_reparent();
virtual void on_child_added(Widget &) { }
virtual void on_child_removed(Widget &) { }
+ virtual void on_input_focus_changed(Widget *);
};
} // namespace GLtk