Rectangle const getRect(void);
private:
virtual void processMessage(Message const* const message);
private:
int _x;
int _y;
int _width;
int _height;
int _zOrder;
};
class WidgetManager
{
public:
virtual int const run(void)
{
Message* message = 0;
std::vector<Widget*> widgets;
int maxZOrder = 0;
Widget* widget = 0;
while (message = getMessage())
{
switch (message->type)
{
case mtKey:
_currentWidget->notify(message);
break;
case mtMouse:
widgets = findWidgetsByLocation(mouseLocation);
for (std::vector<Widget*>::iterator i = _widgets.begin(); i != _widgets.end(); ++i)
{
if (maxZOrder < (*i)->_zOrder)
{
maxZOrder = (*i)->_zOrder;
widget = *i;
}
}
if (widget)
{
_currentWidget = widget;
widget->notify(message);
}
break;
case mtSysKey:
break;
case mt...
break;
default:
break;
}
}
}
private:
std::vector<Widget*> findWidgetsByLocation(Point p)
{
std::vector<Widget*> result;
for (std::vector<Widget*>::iterator i = _widgets.begin(); i != _widgets.end(); ++i)
{
if (pointInRect(p, *i))
{
result.push_back(*i);
}
}
return result;
}