Foundation classes for a basic GUI implementing simple widgets and events

Dependents:   TouchScreenGUIDemo

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?

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