| Revision 1 (by (no author), 2006/09/28 22:53:53) |
Initial import |
/// \file widget.h
/// Class for GUI elements
#ifndef WIDGET_H_INCLUDED
#define WIDGET_H_INCLUDED
#include "event.h"
#include "events.h"
class Widget
{
public: // Public variables
int x, y, w, h;
bool isFocused;
bool wantKeyboard;
Widget* parent;
bool wantRedraw;
/// For tracking mouse clicks
int saved_buttons;
Event<> onClick;
public: // Public functions
Widget(Widget* parent = NULL);
virtual ~Widget();
bool IsMouseOver();
virtual void WantRedraw();
virtual void Focus();
virtual void FocusChild(Widget* child);
virtual void Redraw(RedrawEventArgs* e);
virtual void KeyDown(KeyEventArgs* e);
virtual void KeyUp(KeyEventArgs* e);
virtual void MouseMove(MouseEventArgs* e);
virtual void MousePress(MouseEventArgs* e);
virtual void MouseRelease(MouseEventArgs* e);
virtual void MouseScroll(MouseEventArgs* e);
virtual void MouseClick();
};
struct WidgetRef
{
WidgetRef(Widget* widget): widget(widget), refs(new int(1))
{ }
WidgetRef(const WidgetRef& other): widget(other.widget), refs(other.refs)
{ ++*refs; }
~WidgetRef()
{
--*refs;
if(!*refs)
{
delete widget;
delete refs;
}
}
Widget* operator->()
{ return widget; }
operator Widget*()
{ return widget; }
Widget* widget;
int* refs;
};
#endif
// The end