-/* $Id$
-
-This file is part of libmspgltk
-Copyright © 2009-2011 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
#ifndef MSP_GLTK_CONTAINER_H_
#define MSP_GLTK_CONTAINER_H_
#include <list>
+#include <stdexcept>
#include <sigc++/trackable.h>
#include "widget.h"
namespace Msp {
namespace GLtk {
+class hierarchy_error: public std::logic_error
+{
+public:
+ hierarchy_error(const std::string &);
+ virtual ~hierarchy_error() throw() { }
+};
+
+
class Container: virtual public Widget
{
protected:
virtual ~Child();
void visibility_changed(bool);
+ void request_focus();
+ void grab_pointer();
+ void ungrab_pointer();
};
std::list<Child *> children;
Widget *click_focus;
unsigned click_button;
+ Widget *pointer_focus;
+ bool pointer_grabbed;
+ Widget *input_focus;
Container();
public:
std::list<Widget *> get_children() const;
Widget *get_child_at(int, int);
Widget *get_descendant_at(int, int);
+ void raise(Widget &);
+
+protected:
+ void set_pointer_focus(Widget *);
+ void set_input_focus(Widget *);
+public:
+ Widget *get_input_focus() const { return input_focus; }
+ Widget *get_final_input_focus() const;
virtual void button_press(int, int, unsigned);
virtual void button_release(int, int, unsigned);
virtual void pointer_motion(int, int);
+private:
+ Widget *get_pointer_target(int, int);
+public:
virtual void pointer_leave();
+ virtual void key_press(unsigned, unsigned);
+ virtual void key_release(unsigned, unsigned);
+ virtual void character(wchar_t);
+ virtual void focus_out();
protected:
virtual void on_reparent();
virtual void on_child_added(Widget &) { }