Foundation classes for a basic GUI implementing simple widgets and events
Dependents: TouchScreenGUIDemo
Widgets/Widget.h@8:a460cabc85ac, 2016-04-11 (annotated)
- Committer:
- duncanFrance
- Date:
- Mon Apr 11 16:54:02 2016 +0000
- Revision:
- 8:a460cabc85ac
- Parent:
- 7:303850a4b30c
- Child:
- 12:63db16fea709
Added GUI for common defaults
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 | 8:a460cabc85ac | 4 | #include "GUI.h" |
duncanFrance | 0:0a590815d51c | 5 | |
duncanFrance | 0:0a590815d51c | 6 | /** |
duncanFrance | 0:0a590815d51c | 7 | * A basic widget draws itself in a rectangular area |
duncanFrance | 0:0a590815d51c | 8 | **/ |
duncanFrance | 0:0a590815d51c | 9 | |
duncanFrance | 0:0a590815d51c | 10 | class Widget : public EventListener { |
duncanFrance | 0:0a590815d51c | 11 | |
duncanFrance | 0:0a590815d51c | 12 | public: |
duncanFrance | 0:0a590815d51c | 13 | |
duncanFrance | 8:a460cabc85ac | 14 | Widget(GUI* gui) : _gui(gui), _fg(White), _bg(Black), _x(0), _y(0), _width(0), _height(0), _hidden(false) {} |
duncanFrance | 0:0a590815d51c | 15 | |
duncanFrance | 1:48796b602c86 | 16 | virtual bool isEventTarget(Event e) { |
duncanFrance | 8:a460cabc85ac | 17 | return !_hidden && e.screenX >= _x && e.screenX <= (_x+_width) && e.screenY >= _y && e.screenY <= (_y+_height); |
duncanFrance | 1:48796b602c86 | 18 | } |
duncanFrance | 0:0a590815d51c | 19 | |
duncanFrance | 0:0a590815d51c | 20 | virtual void setLocation(int x, int y) { |
duncanFrance | 0:0a590815d51c | 21 | _x = x; |
duncanFrance | 0:0a590815d51c | 22 | _y = y; |
duncanFrance | 0:0a590815d51c | 23 | } |
duncanFrance | 0:0a590815d51c | 24 | |
duncanFrance | 0:0a590815d51c | 25 | virtual void setSize(int width, int height) { |
duncanFrance | 0:0a590815d51c | 26 | _width = width; |
duncanFrance | 0:0a590815d51c | 27 | _height = height; |
duncanFrance | 0:0a590815d51c | 28 | } |
duncanFrance | 0:0a590815d51c | 29 | |
duncanFrance | 0:0a590815d51c | 30 | virtual int x() { |
duncanFrance | 0:0a590815d51c | 31 | return _x; |
duncanFrance | 0:0a590815d51c | 32 | } |
duncanFrance | 0:0a590815d51c | 33 | |
duncanFrance | 0:0a590815d51c | 34 | virtual int y() { |
duncanFrance | 0:0a590815d51c | 35 | return _y; |
duncanFrance | 0:0a590815d51c | 36 | } |
duncanFrance | 0:0a590815d51c | 37 | |
duncanFrance | 0:0a590815d51c | 38 | virtual int height() { |
duncanFrance | 0:0a590815d51c | 39 | return _height; |
duncanFrance | 0:0a590815d51c | 40 | } |
duncanFrance | 0:0a590815d51c | 41 | |
duncanFrance | 0:0a590815d51c | 42 | virtual int width() { |
duncanFrance | 0:0a590815d51c | 43 | return _width; |
duncanFrance | 0:0a590815d51c | 44 | } |
duncanFrance | 0:0a590815d51c | 45 | |
duncanFrance | 0:0a590815d51c | 46 | virtual void setForeground(uint16_t color) { |
duncanFrance | 0:0a590815d51c | 47 | _fg = color; |
duncanFrance | 0:0a590815d51c | 48 | } |
duncanFrance | 0:0a590815d51c | 49 | |
duncanFrance | 1:48796b602c86 | 50 | virtual void setBackground(uint16_t color) { |
duncanFrance | 0:0a590815d51c | 51 | _bg = color; |
duncanFrance | 0:0a590815d51c | 52 | } |
duncanFrance | 0:0a590815d51c | 53 | |
duncanFrance | 8:a460cabc85ac | 54 | virtual void draw() { |
duncanFrance | 8:a460cabc85ac | 55 | if(!_hidden) _draw(); |
duncanFrance | 8:a460cabc85ac | 56 | } |
duncanFrance | 8:a460cabc85ac | 57 | |
duncanFrance | 8:a460cabc85ac | 58 | virtual void clear() { |
duncanFrance | 8:a460cabc85ac | 59 | if(!_hidden) _clear(); |
duncanFrance | 8:a460cabc85ac | 60 | } |
duncanFrance | 0:0a590815d51c | 61 | |
duncanFrance | 8:a460cabc85ac | 62 | void show() { |
duncanFrance | 8:a460cabc85ac | 63 | _hidden = false; |
duncanFrance | 8:a460cabc85ac | 64 | draw(); |
duncanFrance | 8:a460cabc85ac | 65 | } |
duncanFrance | 8:a460cabc85ac | 66 | |
duncanFrance | 8:a460cabc85ac | 67 | void hide() { |
duncanFrance | 8:a460cabc85ac | 68 | clear(); |
duncanFrance | 8:a460cabc85ac | 69 | _hidden = true; |
duncanFrance | 0:0a590815d51c | 70 | } |
duncanFrance | 0:0a590815d51c | 71 | |
duncanFrance | 0:0a590815d51c | 72 | bool isHidden() { |
duncanFrance | 0:0a590815d51c | 73 | return _hidden; |
duncanFrance | 0:0a590815d51c | 74 | } |
duncanFrance | 8:a460cabc85ac | 75 | |
duncanFrance | 8:a460cabc85ac | 76 | void setEventHandler(uint8_t type, EventHandler handler) { |
duncanFrance | 8:a460cabc85ac | 77 | EventListener::setEventHandler(type, handler); |
duncanFrance | 8:a460cabc85ac | 78 | _gui->eventDispatcher()->detachListener(this); |
duncanFrance | 8:a460cabc85ac | 79 | _gui->eventDispatcher()->attachListener(this); |
duncanFrance | 8:a460cabc85ac | 80 | } |
duncanFrance | 0:0a590815d51c | 81 | |
duncanFrance | 8:a460cabc85ac | 82 | int unsetEventHandler(uint8_t type) { |
duncanFrance | 8:a460cabc85ac | 83 | |
duncanFrance | 8:a460cabc85ac | 84 | int remaining = EventListener::unsetEventHandler(type); |
duncanFrance | 8:a460cabc85ac | 85 | |
duncanFrance | 8:a460cabc85ac | 86 | if(remaining == 0) { |
duncanFrance | 8:a460cabc85ac | 87 | _gui->eventDispatcher()->detachListener(this); |
duncanFrance | 8:a460cabc85ac | 88 | } |
duncanFrance | 8:a460cabc85ac | 89 | |
duncanFrance | 8:a460cabc85ac | 90 | return remaining; |
duncanFrance | 8:a460cabc85ac | 91 | } |
duncanFrance | 8:a460cabc85ac | 92 | |
duncanFrance | 8:a460cabc85ac | 93 | |
duncanFrance | 0:0a590815d51c | 94 | protected: |
duncanFrance | 8:a460cabc85ac | 95 | |
duncanFrance | 8:a460cabc85ac | 96 | virtual void _draw() = 0; |
duncanFrance | 8:a460cabc85ac | 97 | virtual void _clear() = 0; |
duncanFrance | 8:a460cabc85ac | 98 | |
duncanFrance | 0:0a590815d51c | 99 | |
duncanFrance | 8:a460cabc85ac | 100 | GUI* _gui; |
duncanFrance | 5:b7ce5721a0b5 | 101 | uint16_t _fg, _bg; |
duncanFrance | 5:b7ce5721a0b5 | 102 | int _x,_y,_width,_height; |
duncanFrance | 0:0a590815d51c | 103 | bool _hidden; |
duncanFrance | 0:0a590815d51c | 104 | |
duncanFrance | 0:0a590815d51c | 105 | }; |
duncanFrance | 0:0a590815d51c | 106 | |
duncanFrance | 0:0a590815d51c | 107 | #endif |