+/* $Id$
+
+This file is part of libmspgltk
+Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
#ifndef MSP_GLTK_PANEL_H_
#define MSP_GLTK_PANEL_H_
namespace Msp {
namespace GLtk {
+/**
+Panels are containers for other widgets. Panel styles should have a special
+part "children" to render the child widgets. All properties of this part are
+ignored.
+*/
class Panel: public Widget
{
public:
class Loader: public Widget::Loader
{
private:
- Panel &panel;
+ Panel &pnl;
std::map<std::string, Widget *> &wdg_map;
public:
private:
template<typename T>
void child(const std::string &);
+ void panel(const std::string &);
};
- Panel(const Resources &);
- ~Panel();
-
- void add(Widget &);
- void button_press(int, int, unsigned);
- void button_release(int, int, unsigned);
- void pointer_motion(int, int);
- void key_press(unsigned, unsigned, wchar_t);
- void key_release(unsigned, unsigned);
- void focus_out();
private:
- typedef std::list<Widget *> ChildSeq;
-
- ChildSeq children;
+ std::list<Widget *> children;
Widget *pointer_focus;
unsigned pointer_grab;
Widget *input_focus;
Panel(const Panel &);
Panel &operator=(const Panel &);
- const char *get_class() const { return "panel"; }
- void render_part(const Part &) const;
- void set_pointer_focus(Widget *);
+public:
+ Panel(const Resources &);
+ ~Panel();
+
+ void add(Widget &);
+ void remove(Widget &);
+ void raise(Widget &);
+ void set_focus(Widget &);
+
+ virtual void button_press(int, int, unsigned);
+ virtual void button_release(int, int, unsigned);
+ virtual void pointer_motion(int, int);
+ virtual void pointer_leave();
+ virtual void key_press(unsigned, unsigned, wchar_t);
+ virtual void key_release(unsigned, unsigned);
+ virtual void focus_out();
+
+ // These functions are not intended to be called from outside GLtk
+ void child_hidden(Widget &);
+ void grab_pointer(Widget &);
+ void ungrab_pointer(Widget &);
+ void grab_focus(Widget &);
+private:
+ virtual const char *get_class() const { return "panel"; }
+ virtual void render_special(const Part &) const;
+
+ void set_pointer_focus(Widget *, int);
void set_input_focus(Widget *);
+ Widget *get_child_at(int, int);
};
} // namespace GLtk