Foundation classes for a basic GUI implementing simple widgets and events
Dependents: TouchScreenGUIDemo
Widgets/Widget.h
- Committer:
- duncanFrance
- Date:
- 2016-05-28
- Revision:
- 18:d849f3ada858
- Parent:
- 16:e9a771ecfdbe
File content as of revision 18:d849f3ada858:
#ifndef SIMPLEGUI_WIDGET_H #define SIMPLEGUI_WIDGET_H class Widget; #include "GraphicsContext.h" #include "EventListener.h" #include "Rectangle.h" #include "Point.h" /** * A basic widget draws itself in a rectangular area **/ class Widget : public EventListener { public: Widget(GraphicsContext* context); virtual void setParent(Widget* parent); virtual Widget *getParent(); /******************************************************** * Methods relating to containment * In the base class these methods do nothing. * They are implemented in container classes ********************************************************/ virtual void attach(Widget *widget) {} virtual void detach(Widget *widget) {} /******************************************************** * Common Widget methods ********************************************************/ virtual void setLocation(int x, int y); virtual void setSize(int width, int height); virtual void setWidth(int width); virtual void setHeight(int height); virtual int x(); virtual int y(); virtual int height(); virtual int width(); virtual void setOffset(int x, int y); virtual int offsetX(); virtual int offsetY(); virtual void setForeground(uint16_t color); virtual void setBackground(uint16_t color); virtual void setPadding(int pixels); virtual void setBorder(int width, uint16_t colour); /** * Cause the widget to redraw itself if is is dirty or damaged **/ virtual void draw(); virtual void clear(); void show(); void hide(); bool isHidden(); /** * Implementation of EventListener **/ virtual void handleEvent(Event e); virtual void setEventHandler(EventHandler *handler); virtual void unsetEventHandler(EventHandler *handler); bool intersects(Widget *widget); /** * Mark the widget as needing to be redrawn **/ void dirty(); bool isDirty(); /** * Mark the widget and all its children as dirty **/ virtual void dirtyAll(); /** * Mark the widget as having changed dimensions or location **/ void damage(); bool isDamaged(); void adjust(); /** * Convenience method **/ GraphicsDisplay *display(); virtual void _reenumerateEvents(); virtual void _reenumerateHandledEvents(); virtual uint16_t _getHandledEvents(); protected: virtual void _draw(); virtual void _clear(); virtual void _dirty(); virtual void _damage(); virtual void _adjust(); /** * Methods to help with event handling **/ bool _isEventTarget(Event e); uint16_t _handledEvents; Widget* _parent; GraphicsContext* _context; uint16_t _fg, _bg; Point _offset; Rectangle _outer; Rectangle _inner; bool _hidden; int _padding; int _borderWidth; uint16_t _borderColour; bool _adjusting; bool _dirtied; bool _dirtying; bool _damaged; bool _damaging; LinkedList<EventHandler> _handlers; }; #endif