Foundation classes for a basic GUI implementing simple widgets and events
Dependents: TouchScreenGUIDemo
Widgets/Widget.h@13:6714534e7974, 2016-05-21 (annotated)
- Committer:
- duncanFrance
- Date:
- Sat May 21 14:40:09 2016 +0000
- Revision:
- 13:6714534e7974
- Parent:
- 12:63db16fea709
- Child:
- 16:e9a771ecfdbe
Cleaned up SpinnerWidget; Started on SpinnerDialog - will extract Dialog later
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
duncanFrance | 0:0a590815d51c | 1 | #ifndef SIMPLEGUI_WIDGET_H |
duncanFrance | 0:0a590815d51c | 2 | #define SIMPLEGUI_WIDGET_H |
duncanFrance | 0:0a590815d51c | 3 | |
duncanFrance | 12:63db16fea709 | 4 | class Widget; |
duncanFrance | 12:63db16fea709 | 5 | |
duncanFrance | 12:63db16fea709 | 6 | #include "GraphicsContext.h" |
duncanFrance | 12:63db16fea709 | 7 | #include "EventListener.h" |
duncanFrance | 12:63db16fea709 | 8 | #include "Rectangle.h" |
duncanFrance | 13:6714534e7974 | 9 | #include "Point.h" |
duncanFrance | 0:0a590815d51c | 10 | |
duncanFrance | 0:0a590815d51c | 11 | /** |
duncanFrance | 0:0a590815d51c | 12 | * A basic widget draws itself in a rectangular area |
duncanFrance | 0:0a590815d51c | 13 | **/ |
duncanFrance | 0:0a590815d51c | 14 | |
duncanFrance | 12:63db16fea709 | 15 | class Widget : public EventListener |
duncanFrance | 12:63db16fea709 | 16 | { |
duncanFrance | 12:63db16fea709 | 17 | |
duncanFrance | 12:63db16fea709 | 18 | public: |
duncanFrance | 12:63db16fea709 | 19 | |
duncanFrance | 12:63db16fea709 | 20 | Widget(GraphicsContext* context); |
duncanFrance | 12:63db16fea709 | 21 | |
duncanFrance | 12:63db16fea709 | 22 | virtual void setParent(Widget* parent); |
duncanFrance | 12:63db16fea709 | 23 | |
duncanFrance | 12:63db16fea709 | 24 | /******************************************************** |
duncanFrance | 12:63db16fea709 | 25 | * Methods relating to containment |
duncanFrance | 12:63db16fea709 | 26 | * In the base class these methods do nothing. |
duncanFrance | 12:63db16fea709 | 27 | * They are implemented in container classes |
duncanFrance | 12:63db16fea709 | 28 | ********************************************************/ |
duncanFrance | 12:63db16fea709 | 29 | virtual void attach(Widget *widget) {} |
duncanFrance | 12:63db16fea709 | 30 | virtual void detach(Widget *widget) {} |
duncanFrance | 12:63db16fea709 | 31 | |
duncanFrance | 12:63db16fea709 | 32 | /******************************************************** |
duncanFrance | 12:63db16fea709 | 33 | * Common Widget methods |
duncanFrance | 12:63db16fea709 | 34 | ********************************************************/ |
duncanFrance | 12:63db16fea709 | 35 | virtual bool isEventTarget(Event e); |
duncanFrance | 0:0a590815d51c | 36 | |
duncanFrance | 12:63db16fea709 | 37 | virtual void setLocation(int x, int y); |
duncanFrance | 12:63db16fea709 | 38 | virtual void setSize(int width, int height); |
duncanFrance | 12:63db16fea709 | 39 | virtual void setWidth(int width); |
duncanFrance | 12:63db16fea709 | 40 | virtual void setHeight(int height); |
duncanFrance | 12:63db16fea709 | 41 | virtual int x(); |
duncanFrance | 12:63db16fea709 | 42 | virtual int y(); |
duncanFrance | 12:63db16fea709 | 43 | virtual int height(); |
duncanFrance | 12:63db16fea709 | 44 | virtual int width(); |
duncanFrance | 13:6714534e7974 | 45 | |
duncanFrance | 13:6714534e7974 | 46 | virtual void setOffset(int x, int y); |
duncanFrance | 13:6714534e7974 | 47 | virtual int offsetX(); |
duncanFrance | 13:6714534e7974 | 48 | virtual int offsetY(); |
duncanFrance | 12:63db16fea709 | 49 | |
duncanFrance | 12:63db16fea709 | 50 | virtual void setForeground(uint16_t color); |
duncanFrance | 12:63db16fea709 | 51 | virtual void setBackground(uint16_t color); |
duncanFrance | 12:63db16fea709 | 52 | |
duncanFrance | 12:63db16fea709 | 53 | void setPadding(int pixels); |
duncanFrance | 12:63db16fea709 | 54 | void setBorder(int width, uint16_t colour); |
duncanFrance | 12:63db16fea709 | 55 | |
duncanFrance | 12:63db16fea709 | 56 | /** |
duncanFrance | 12:63db16fea709 | 57 | * Cause the widget to redraw itself if is is dirty or damaged |
duncanFrance | 12:63db16fea709 | 58 | **/ |
duncanFrance | 12:63db16fea709 | 59 | virtual void draw(); |
duncanFrance | 12:63db16fea709 | 60 | virtual void clear(); |
duncanFrance | 12:63db16fea709 | 61 | |
duncanFrance | 12:63db16fea709 | 62 | void show(); |
duncanFrance | 12:63db16fea709 | 63 | void hide(); |
duncanFrance | 12:63db16fea709 | 64 | bool isHidden(); |
duncanFrance | 12:63db16fea709 | 65 | |
duncanFrance | 12:63db16fea709 | 66 | void setEventHandler(EventHandler *handler); |
duncanFrance | 12:63db16fea709 | 67 | void unsetEventHandler(EventHandler *handler); |
duncanFrance | 0:0a590815d51c | 68 | |
duncanFrance | 12:63db16fea709 | 69 | bool intersects(Widget *widget); |
duncanFrance | 12:63db16fea709 | 70 | |
duncanFrance | 12:63db16fea709 | 71 | /** |
duncanFrance | 12:63db16fea709 | 72 | * Mark the widget as needing to be redrawn |
duncanFrance | 12:63db16fea709 | 73 | **/ |
duncanFrance | 12:63db16fea709 | 74 | void dirty(); |
duncanFrance | 12:63db16fea709 | 75 | bool isDirty(); |
duncanFrance | 12:63db16fea709 | 76 | /** |
duncanFrance | 12:63db16fea709 | 77 | * Mark the widget and all its children as dirty |
duncanFrance | 12:63db16fea709 | 78 | **/ |
duncanFrance | 12:63db16fea709 | 79 | virtual void dirtyAll(); |
duncanFrance | 12:63db16fea709 | 80 | |
duncanFrance | 12:63db16fea709 | 81 | /** |
duncanFrance | 12:63db16fea709 | 82 | * Mark the widget as having changed dimensions or location |
duncanFrance | 12:63db16fea709 | 83 | **/ |
duncanFrance | 12:63db16fea709 | 84 | void damage(); |
duncanFrance | 12:63db16fea709 | 85 | bool isDamaged(); |
duncanFrance | 12:63db16fea709 | 86 | |
duncanFrance | 12:63db16fea709 | 87 | void adjust(); |
duncanFrance | 12:63db16fea709 | 88 | |
duncanFrance | 12:63db16fea709 | 89 | /** |
duncanFrance | 12:63db16fea709 | 90 | * Convenience method |
duncanFrance | 12:63db16fea709 | 91 | **/ |
duncanFrance | 12:63db16fea709 | 92 | GraphicsDisplay *display(); |
duncanFrance | 12:63db16fea709 | 93 | |
duncanFrance | 12:63db16fea709 | 94 | protected: |
duncanFrance | 8:a460cabc85ac | 95 | |
duncanFrance | 12:63db16fea709 | 96 | virtual void _draw(); |
duncanFrance | 12:63db16fea709 | 97 | virtual void _clear(); |
duncanFrance | 12:63db16fea709 | 98 | |
duncanFrance | 12:63db16fea709 | 99 | virtual void _dirty(); |
duncanFrance | 12:63db16fea709 | 100 | virtual void _damage(); |
duncanFrance | 12:63db16fea709 | 101 | virtual void _adjust(); |
duncanFrance | 12:63db16fea709 | 102 | |
duncanFrance | 12:63db16fea709 | 103 | |
duncanFrance | 12:63db16fea709 | 104 | Widget* _parent; |
duncanFrance | 12:63db16fea709 | 105 | GraphicsContext* _context; |
duncanFrance | 12:63db16fea709 | 106 | uint16_t _fg, _bg; |
duncanFrance | 12:63db16fea709 | 107 | |
duncanFrance | 13:6714534e7974 | 108 | Point _offset; |
duncanFrance | 12:63db16fea709 | 109 | Rectangle _outer; |
duncanFrance | 12:63db16fea709 | 110 | Rectangle _inner; |
duncanFrance | 12:63db16fea709 | 111 | |
duncanFrance | 12:63db16fea709 | 112 | bool _hidden; |
duncanFrance | 12:63db16fea709 | 113 | int _padding; |
duncanFrance | 12:63db16fea709 | 114 | int _borderWidth; |
duncanFrance | 12:63db16fea709 | 115 | uint16_t _borderColour; |
duncanFrance | 8:a460cabc85ac | 116 | |
duncanFrance | 12:63db16fea709 | 117 | bool _adjusting; |
duncanFrance | 8:a460cabc85ac | 118 | |
duncanFrance | 12:63db16fea709 | 119 | bool _dirtied; |
duncanFrance | 12:63db16fea709 | 120 | bool _dirtying; |
duncanFrance | 12:63db16fea709 | 121 | |
duncanFrance | 12:63db16fea709 | 122 | bool _damaged; |
duncanFrance | 12:63db16fea709 | 123 | bool _damaging; |
duncanFrance | 0:0a590815d51c | 124 | }; |
duncanFrance | 0:0a590815d51c | 125 | |
duncanFrance | 0:0a590815d51c | 126 | #endif |