Foundation classes for a basic GUI implementing simple widgets and events

Dependents:   TouchScreenGUIDemo

Committer:
duncanFrance
Date:
Sat May 21 18:02:20 2016 +0000
Revision:
15:e69fd74d42e4
Parent:
12:63db16fea709
Child:
18:d849f3ada858
Make attach and detach register/unregister event handlers if needed.;  - need to move the event handling into widget so we can attach/detach

Who changed what in which revision?

UserRevisionLine numberNew contents of line
duncanFrance 12:63db16fea709 1 #ifndef SIMPLEGUI_LINKED_LIST_H
duncanFrance 12:63db16fea709 2 #define SIMPLEGUI_LINKED_LIST_H
duncanFrance 12:63db16fea709 3
duncanFrance 12:63db16fea709 4 #include "mbed.h"
duncanFrance 12:63db16fea709 5
duncanFrance 12:63db16fea709 6 template<class T>
duncanFrance 12:63db16fea709 7 class LinkedListNode
duncanFrance 12:63db16fea709 8 {
duncanFrance 12:63db16fea709 9
duncanFrance 12:63db16fea709 10 public:
duncanFrance 12:63db16fea709 11
duncanFrance 12:63db16fea709 12 LinkedListNode(T* nodeData) : data(nodeData), next(NULL) {}
duncanFrance 12:63db16fea709 13 ~LinkedListNode() {}
duncanFrance 12:63db16fea709 14
duncanFrance 12:63db16fea709 15 T* data;
duncanFrance 12:63db16fea709 16 LinkedListNode<T>* next;
duncanFrance 12:63db16fea709 17 };
duncanFrance 12:63db16fea709 18
duncanFrance 12:63db16fea709 19 template<class T>
duncanFrance 12:63db16fea709 20 class LinkedList
duncanFrance 12:63db16fea709 21 {
duncanFrance 12:63db16fea709 22
duncanFrance 12:63db16fea709 23 public:
duncanFrance 12:63db16fea709 24
duncanFrance 15:e69fd74d42e4 25 LinkedList() : _first(NULL), _next(NULL), _current(NULL), _size(0) {}
duncanFrance 12:63db16fea709 26 ~LinkedList() {}
duncanFrance 12:63db16fea709 27
duncanFrance 12:63db16fea709 28
duncanFrance 12:63db16fea709 29 void append(T* data) {
duncanFrance 12:63db16fea709 30
duncanFrance 12:63db16fea709 31 if(_first == NULL) {
duncanFrance 12:63db16fea709 32
duncanFrance 12:63db16fea709 33 _first = new LinkedListNode<T>(data);
duncanFrance 12:63db16fea709 34
duncanFrance 12:63db16fea709 35 } else {
duncanFrance 12:63db16fea709 36
duncanFrance 12:63db16fea709 37 LinkedListNode<T>* p = _first;
duncanFrance 12:63db16fea709 38 LinkedListNode<T>* d = new LinkedListNode<T>(data);
duncanFrance 12:63db16fea709 39
duncanFrance 12:63db16fea709 40 while(p->next != NULL) {
duncanFrance 12:63db16fea709 41 p = p->next;
duncanFrance 12:63db16fea709 42 }
duncanFrance 12:63db16fea709 43
duncanFrance 12:63db16fea709 44 p->next = d;
duncanFrance 12:63db16fea709 45 }
duncanFrance 15:e69fd74d42e4 46 _size++;
duncanFrance 12:63db16fea709 47 }
duncanFrance 12:63db16fea709 48
duncanFrance 12:63db16fea709 49 void appendOnce(T* data) {
duncanFrance 12:63db16fea709 50
duncanFrance 12:63db16fea709 51 if(_first == NULL) {
duncanFrance 12:63db16fea709 52
duncanFrance 12:63db16fea709 53 _first = new LinkedListNode<T>(data);
duncanFrance 15:e69fd74d42e4 54 _size++;
duncanFrance 12:63db16fea709 55
duncanFrance 12:63db16fea709 56 } else {
duncanFrance 12:63db16fea709 57
duncanFrance 12:63db16fea709 58 LinkedListNode<T>* p = _first;
duncanFrance 12:63db16fea709 59 LinkedListNode<T>* d = new LinkedListNode<T>(data);
duncanFrance 12:63db16fea709 60
duncanFrance 12:63db16fea709 61 while(p->next != NULL) {
duncanFrance 12:63db16fea709 62
duncanFrance 12:63db16fea709 63 if(p->data == data) {
duncanFrance 12:63db16fea709 64 return;
duncanFrance 12:63db16fea709 65 }
duncanFrance 12:63db16fea709 66
duncanFrance 12:63db16fea709 67 p = p->next;
duncanFrance 12:63db16fea709 68 }
duncanFrance 12:63db16fea709 69
duncanFrance 12:63db16fea709 70 p->next = d;
duncanFrance 15:e69fd74d42e4 71 _size++;
duncanFrance 12:63db16fea709 72 }
duncanFrance 12:63db16fea709 73 }
duncanFrance 12:63db16fea709 74 void remove(T* data) {
duncanFrance 12:63db16fea709 75
duncanFrance 12:63db16fea709 76 if(_first == NULL) {
duncanFrance 12:63db16fea709 77 return;
duncanFrance 12:63db16fea709 78 }
duncanFrance 12:63db16fea709 79
duncanFrance 12:63db16fea709 80 LinkedListNode<T>* next = _first;
duncanFrance 12:63db16fea709 81 LinkedListNode<T>* prev = _first;
duncanFrance 12:63db16fea709 82
duncanFrance 12:63db16fea709 83 if(_first->data == data) {
duncanFrance 12:63db16fea709 84 _first = _first->next;
duncanFrance 12:63db16fea709 85 delete next;
duncanFrance 15:e69fd74d42e4 86 _size--;
duncanFrance 12:63db16fea709 87 } else {
duncanFrance 12:63db16fea709 88 next = _first->next;
duncanFrance 12:63db16fea709 89 while(next) {
duncanFrance 12:63db16fea709 90 if(next->data == data) {
duncanFrance 12:63db16fea709 91 prev->next = next->next;
duncanFrance 12:63db16fea709 92 delete next;
duncanFrance 15:e69fd74d42e4 93 _size--;
duncanFrance 12:63db16fea709 94 return;
duncanFrance 12:63db16fea709 95 }
duncanFrance 12:63db16fea709 96 prev = next;
duncanFrance 12:63db16fea709 97 next = next->next;
duncanFrance 12:63db16fea709 98 }
duncanFrance 12:63db16fea709 99 }
duncanFrance 12:63db16fea709 100 }
duncanFrance 12:63db16fea709 101
duncanFrance 12:63db16fea709 102 void clear() {
duncanFrance 12:63db16fea709 103 LinkedListNode<T>* here = _first;
duncanFrance 12:63db16fea709 104 LinkedListNode<T>* next;
duncanFrance 12:63db16fea709 105 while(here != NULL) {
duncanFrance 12:63db16fea709 106 next = here->next;
duncanFrance 12:63db16fea709 107 delete here;
duncanFrance 12:63db16fea709 108 here = next;
duncanFrance 12:63db16fea709 109 }
duncanFrance 12:63db16fea709 110 _first = NULL;
duncanFrance 15:e69fd74d42e4 111 _size = 0;
duncanFrance 12:63db16fea709 112 }
duncanFrance 12:63db16fea709 113
duncanFrance 12:63db16fea709 114 void reset() {
duncanFrance 12:63db16fea709 115 _current = _first;
duncanFrance 12:63db16fea709 116 }
duncanFrance 12:63db16fea709 117
duncanFrance 12:63db16fea709 118 T* next() {
duncanFrance 12:63db16fea709 119
duncanFrance 12:63db16fea709 120 LinkedListNode<T>* p = _current;
duncanFrance 12:63db16fea709 121 if(p != NULL) {
duncanFrance 12:63db16fea709 122 _current = _current->next;
duncanFrance 12:63db16fea709 123 return p->data;
duncanFrance 12:63db16fea709 124 }
duncanFrance 12:63db16fea709 125
duncanFrance 12:63db16fea709 126 return NULL;
duncanFrance 12:63db16fea709 127 }
duncanFrance 12:63db16fea709 128
duncanFrance 12:63db16fea709 129 bool contains(T *thing) {
duncanFrance 12:63db16fea709 130 LinkedListNode<T>* here = _first;
duncanFrance 12:63db16fea709 131 while(here != NULL) {
duncanFrance 12:63db16fea709 132 if(here->data == thing) {
duncanFrance 12:63db16fea709 133 return true;
duncanFrance 12:63db16fea709 134 }
duncanFrance 12:63db16fea709 135 here = here->next;
duncanFrance 12:63db16fea709 136 }
duncanFrance 12:63db16fea709 137 return false;
duncanFrance 12:63db16fea709 138 }
duncanFrance 15:e69fd74d42e4 139
duncanFrance 15:e69fd74d42e4 140 int size() {
duncanFrance 15:e69fd74d42e4 141 return _size;
duncanFrance 15:e69fd74d42e4 142 }
duncanFrance 12:63db16fea709 143
duncanFrance 12:63db16fea709 144
duncanFrance 12:63db16fea709 145 protected:
duncanFrance 12:63db16fea709 146
duncanFrance 12:63db16fea709 147 LinkedListNode<T>* _first;
duncanFrance 12:63db16fea709 148 LinkedListNode<T>* _next;
duncanFrance 12:63db16fea709 149 LinkedListNode<T>* _current;
duncanFrance 15:e69fd74d42e4 150 int _size;
duncanFrance 12:63db16fea709 151
duncanFrance 12:63db16fea709 152 };
duncanFrance 12:63db16fea709 153
duncanFrance 12:63db16fea709 154 #endif