Foundation classes for a basic GUI implementing simple widgets and events

Dependents:   TouchScreenGUIDemo

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?

UserRevisionLine numberNew 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