Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
extras/EASettings.cpp@4:f8f7f4f9c58d, 2010-04-26 (annotated)
- Committer:
- richardparker
- Date:
- Mon Apr 26 21:37:54 2010 +0000
- Revision:
- 4:f8f7f4f9c58d
- Parent:
- 3:24fbf4dbd7e5
- Child:
- 7:6cf21b018420
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
richardparker | 3:24fbf4dbd7e5 | 1 | // Copyright 2010 Richard Parker |
richardparker | 3:24fbf4dbd7e5 | 2 | |
richardparker | 3:24fbf4dbd7e5 | 3 | #include "mbed.h" |
richardparker | 3:24fbf4dbd7e5 | 4 | |
richardparker | 3:24fbf4dbd7e5 | 5 | #include "EASettings.h" |
richardparker | 3:24fbf4dbd7e5 | 6 | |
richardparker | 3:24fbf4dbd7e5 | 7 | #include "../screen/EALCD.h" |
richardparker | 3:24fbf4dbd7e5 | 8 | #include "../screen/EATouch.h" |
richardparker | 3:24fbf4dbd7e5 | 9 | #include "../manager/EATouchManager.h" |
richardparker | 3:24fbf4dbd7e5 | 10 | #include "../widgets/EAButton.h" |
richardparker | 4:f8f7f4f9c58d | 11 | #include "../widgets/EACompass.h" |
richardparker | 3:24fbf4dbd7e5 | 12 | |
richardparker | 4:f8f7f4f9c58d | 13 | #include "HMC6352.h" |
richardparker | 4:f8f7f4f9c58d | 14 | |
richardparker | 4:f8f7f4f9c58d | 15 | EASettings::EASettings(EALCD& lcd, EATouch& touch, EATouchManager& manager, HMC6352& compass) |
richardparker | 3:24fbf4dbd7e5 | 16 | : _lcd(lcd), |
richardparker | 3:24fbf4dbd7e5 | 17 | _touch(touch), |
richardparker | 3:24fbf4dbd7e5 | 18 | _manager(manager), |
richardparker | 4:f8f7f4f9c58d | 19 | _compass(compass), |
richardparker | 3:24fbf4dbd7e5 | 20 | _time(NULL), |
richardparker | 4:f8f7f4f9c58d | 21 | _compassCircle(NULL), |
richardparker | 3:24fbf4dbd7e5 | 22 | _launchBox(NULL), |
richardparker | 3:24fbf4dbd7e5 | 23 | _returnBox(NULL), |
richardparker | 3:24fbf4dbd7e5 | 24 | _touchBox(NULL), |
richardparker | 3:24fbf4dbd7e5 | 25 | _dateBox(NULL), |
richardparker | 3:24fbf4dbd7e5 | 26 | _compassBox(NULL), |
richardparker | 3:24fbf4dbd7e5 | 27 | _nextBox(NULL), |
richardparker | 3:24fbf4dbd7e5 | 28 | _prevBox(NULL), |
richardparker | 3:24fbf4dbd7e5 | 29 | _incBox(NULL), |
richardparker | 3:24fbf4dbd7e5 | 30 | _decBox(NULL), |
richardparker | 3:24fbf4dbd7e5 | 31 | _state(EASettings::STATE_ENDED) |
richardparker | 3:24fbf4dbd7e5 | 32 | { |
richardparker | 3:24fbf4dbd7e5 | 33 | // Actually start the RTC without this call RTC is not running. |
richardparker | 3:24fbf4dbd7e5 | 34 | set_time(0); |
richardparker | 3:24fbf4dbd7e5 | 35 | time_t seconds = time(NULL); |
richardparker | 3:24fbf4dbd7e5 | 36 | _time = localtime(&seconds); |
richardparker | 3:24fbf4dbd7e5 | 37 | } |
richardparker | 3:24fbf4dbd7e5 | 38 | |
richardparker | 3:24fbf4dbd7e5 | 39 | EASettings::~EASettings() |
richardparker | 3:24fbf4dbd7e5 | 40 | { |
richardparker | 3:24fbf4dbd7e5 | 41 | } |
richardparker | 3:24fbf4dbd7e5 | 42 | |
richardparker | 3:24fbf4dbd7e5 | 43 | void EASettings::start() |
richardparker | 3:24fbf4dbd7e5 | 44 | { |
richardparker | 3:24fbf4dbd7e5 | 45 | _state = EASettings::STATE_IDLE; |
richardparker | 3:24fbf4dbd7e5 | 46 | _drawLaunchButton(); |
richardparker | 3:24fbf4dbd7e5 | 47 | } |
richardparker | 3:24fbf4dbd7e5 | 48 | |
richardparker | 4:f8f7f4f9c58d | 49 | void EASettings::tick() |
richardparker | 4:f8f7f4f9c58d | 50 | { |
richardparker | 4:f8f7f4f9c58d | 51 | // Do action depending on the state that in. |
richardparker | 4:f8f7f4f9c58d | 52 | switch(state()) |
richardparker | 4:f8f7f4f9c58d | 53 | { |
richardparker | 4:f8f7f4f9c58d | 54 | case EASettings::STATE_COMPASS: |
richardparker | 4:f8f7f4f9c58d | 55 | _updateCompass(); |
richardparker | 4:f8f7f4f9c58d | 56 | break; |
richardparker | 4:f8f7f4f9c58d | 57 | } |
richardparker | 4:f8f7f4f9c58d | 58 | } |
richardparker | 4:f8f7f4f9c58d | 59 | |
richardparker | 3:24fbf4dbd7e5 | 60 | void EASettings::actionHandler(EAHitBox* box, short x, short y) |
richardparker | 3:24fbf4dbd7e5 | 61 | { |
richardparker | 3:24fbf4dbd7e5 | 62 | State nextState = EASettings::STATE_IDLE; |
richardparker | 3:24fbf4dbd7e5 | 63 | |
richardparker | 3:24fbf4dbd7e5 | 64 | // Disable hit boxs from previous screens. |
richardparker | 3:24fbf4dbd7e5 | 65 | _disableHitBoxs(); |
richardparker | 3:24fbf4dbd7e5 | 66 | |
richardparker | 3:24fbf4dbd7e5 | 67 | // Do action depending on the state that in. |
richardparker | 3:24fbf4dbd7e5 | 68 | switch(state()) |
richardparker | 3:24fbf4dbd7e5 | 69 | { |
richardparker | 3:24fbf4dbd7e5 | 70 | case EASettings::STATE_IDLE: |
richardparker | 3:24fbf4dbd7e5 | 71 | _drawPortal(); |
richardparker | 3:24fbf4dbd7e5 | 72 | nextState = EASettings::STATE_PORTAL; |
richardparker | 3:24fbf4dbd7e5 | 73 | break; |
richardparker | 3:24fbf4dbd7e5 | 74 | case EASettings::STATE_PORTAL: |
richardparker | 3:24fbf4dbd7e5 | 75 | if (box == _returnBox->hitBox()) |
richardparker | 3:24fbf4dbd7e5 | 76 | { |
richardparker | 3:24fbf4dbd7e5 | 77 | nextState = EASettings::STATE_ENDED; |
richardparker | 3:24fbf4dbd7e5 | 78 | } |
richardparker | 3:24fbf4dbd7e5 | 79 | else if (box == _touchBox->hitBox()) |
richardparker | 3:24fbf4dbd7e5 | 80 | { |
richardparker | 3:24fbf4dbd7e5 | 81 | _touch.calibrate(); |
richardparker | 3:24fbf4dbd7e5 | 82 | _drawPortal(); |
richardparker | 3:24fbf4dbd7e5 | 83 | nextState = EASettings::STATE_PORTAL; |
richardparker | 3:24fbf4dbd7e5 | 84 | } |
richardparker | 3:24fbf4dbd7e5 | 85 | else if (box == _dateBox->hitBox()) |
richardparker | 3:24fbf4dbd7e5 | 86 | { |
richardparker | 3:24fbf4dbd7e5 | 87 | _drawDate(); |
richardparker | 3:24fbf4dbd7e5 | 88 | _state = EASettings::STATE_DATE_SECOND; |
richardparker | 3:24fbf4dbd7e5 | 89 | nextState = _nextDate(); |
richardparker | 4:f8f7f4f9c58d | 90 | } |
richardparker | 4:f8f7f4f9c58d | 91 | else if (box == _compassBox->hitBox()) |
richardparker | 4:f8f7f4f9c58d | 92 | { |
richardparker | 4:f8f7f4f9c58d | 93 | _drawCompass(); |
richardparker | 4:f8f7f4f9c58d | 94 | nextState = EASettings::STATE_COMPASS; |
richardparker | 3:24fbf4dbd7e5 | 95 | } else { |
richardparker | 3:24fbf4dbd7e5 | 96 | _drawPortal(); |
richardparker | 3:24fbf4dbd7e5 | 97 | nextState = EASettings::STATE_PORTAL; |
richardparker | 3:24fbf4dbd7e5 | 98 | } |
richardparker | 3:24fbf4dbd7e5 | 99 | break; |
richardparker | 4:f8f7f4f9c58d | 100 | case EASettings::STATE_COMPASS: |
richardparker | 4:f8f7f4f9c58d | 101 | if (box == _returnBox->hitBox()) |
richardparker | 4:f8f7f4f9c58d | 102 | { |
richardparker | 4:f8f7f4f9c58d | 103 | _drawPortal(); |
richardparker | 4:f8f7f4f9c58d | 104 | nextState = EASettings::STATE_PORTAL; |
richardparker | 4:f8f7f4f9c58d | 105 | } else { |
richardparker | 4:f8f7f4f9c58d | 106 | _drawCompass(); |
richardparker | 4:f8f7f4f9c58d | 107 | nextState = EASettings::STATE_COMPASS; |
richardparker | 4:f8f7f4f9c58d | 108 | } |
richardparker | 4:f8f7f4f9c58d | 109 | break; |
richardparker | 3:24fbf4dbd7e5 | 110 | case EASettings::STATE_DATE_DAY: |
richardparker | 3:24fbf4dbd7e5 | 111 | case EASettings::STATE_DATE_MONTH: |
richardparker | 3:24fbf4dbd7e5 | 112 | case EASettings::STATE_DATE_YEAR: |
richardparker | 3:24fbf4dbd7e5 | 113 | case EASettings::STATE_DATE_HOUR: |
richardparker | 3:24fbf4dbd7e5 | 114 | case EASettings::STATE_DATE_MINUTE: |
richardparker | 3:24fbf4dbd7e5 | 115 | case EASettings::STATE_DATE_SECOND: |
richardparker | 3:24fbf4dbd7e5 | 116 | if (box == _returnBox->hitBox()) |
richardparker | 3:24fbf4dbd7e5 | 117 | { |
richardparker | 4:f8f7f4f9c58d | 118 | set_time(mktime(_time)); |
richardparker | 3:24fbf4dbd7e5 | 119 | _drawPortal(); |
richardparker | 3:24fbf4dbd7e5 | 120 | nextState = EASettings::STATE_PORTAL; |
richardparker | 3:24fbf4dbd7e5 | 121 | } |
richardparker | 3:24fbf4dbd7e5 | 122 | else if (box == _nextBox->hitBox()) |
richardparker | 3:24fbf4dbd7e5 | 123 | { |
richardparker | 3:24fbf4dbd7e5 | 124 | nextState = _nextDate(); |
richardparker | 3:24fbf4dbd7e5 | 125 | } |
richardparker | 3:24fbf4dbd7e5 | 126 | else if (box == _prevBox->hitBox()) |
richardparker | 3:24fbf4dbd7e5 | 127 | { |
richardparker | 3:24fbf4dbd7e5 | 128 | nextState = _prevDate(); |
richardparker | 3:24fbf4dbd7e5 | 129 | } |
richardparker | 3:24fbf4dbd7e5 | 130 | else if (box == _incBox->hitBox()) |
richardparker | 3:24fbf4dbd7e5 | 131 | { |
richardparker | 3:24fbf4dbd7e5 | 132 | nextState = _incDate(); |
richardparker | 3:24fbf4dbd7e5 | 133 | } |
richardparker | 3:24fbf4dbd7e5 | 134 | else if (box == _decBox->hitBox()) |
richardparker | 3:24fbf4dbd7e5 | 135 | { |
richardparker | 3:24fbf4dbd7e5 | 136 | nextState = _decDate(); |
richardparker | 3:24fbf4dbd7e5 | 137 | } else { |
richardparker | 3:24fbf4dbd7e5 | 138 | _drawPortal(); |
richardparker | 3:24fbf4dbd7e5 | 139 | nextState = EASettings::STATE_PORTAL; |
richardparker | 3:24fbf4dbd7e5 | 140 | } |
richardparker | 3:24fbf4dbd7e5 | 141 | _enableDateButtons(); |
richardparker | 3:24fbf4dbd7e5 | 142 | break; |
richardparker | 3:24fbf4dbd7e5 | 143 | default: |
richardparker | 3:24fbf4dbd7e5 | 144 | nextState = EASettings::STATE_ENDED; |
richardparker | 3:24fbf4dbd7e5 | 145 | break; |
richardparker | 3:24fbf4dbd7e5 | 146 | } |
richardparker | 3:24fbf4dbd7e5 | 147 | |
richardparker | 3:24fbf4dbd7e5 | 148 | _state = nextState; |
richardparker | 3:24fbf4dbd7e5 | 149 | } |
richardparker | 3:24fbf4dbd7e5 | 150 | |
richardparker | 3:24fbf4dbd7e5 | 151 | void EASettings::_disableHitBoxs() |
richardparker | 3:24fbf4dbd7e5 | 152 | { |
richardparker | 3:24fbf4dbd7e5 | 153 | if (_launchBox != NULL) |
richardparker | 3:24fbf4dbd7e5 | 154 | { |
richardparker | 3:24fbf4dbd7e5 | 155 | _launchBox->setEnabled(false); |
richardparker | 3:24fbf4dbd7e5 | 156 | } |
richardparker | 3:24fbf4dbd7e5 | 157 | |
richardparker | 3:24fbf4dbd7e5 | 158 | if (_returnBox != NULL) |
richardparker | 3:24fbf4dbd7e5 | 159 | { |
richardparker | 3:24fbf4dbd7e5 | 160 | _returnBox->setEnabled(false); |
richardparker | 3:24fbf4dbd7e5 | 161 | } |
richardparker | 3:24fbf4dbd7e5 | 162 | |
richardparker | 3:24fbf4dbd7e5 | 163 | if (_touchBox != NULL) |
richardparker | 3:24fbf4dbd7e5 | 164 | { |
richardparker | 3:24fbf4dbd7e5 | 165 | _touchBox->setEnabled(false); |
richardparker | 3:24fbf4dbd7e5 | 166 | } |
richardparker | 3:24fbf4dbd7e5 | 167 | |
richardparker | 3:24fbf4dbd7e5 | 168 | if (_dateBox != NULL) |
richardparker | 3:24fbf4dbd7e5 | 169 | { |
richardparker | 3:24fbf4dbd7e5 | 170 | _dateBox->setEnabled(false); |
richardparker | 3:24fbf4dbd7e5 | 171 | } |
richardparker | 3:24fbf4dbd7e5 | 172 | |
richardparker | 3:24fbf4dbd7e5 | 173 | if (_compassBox != NULL) |
richardparker | 3:24fbf4dbd7e5 | 174 | { |
richardparker | 3:24fbf4dbd7e5 | 175 | _compassBox->setEnabled(false); |
richardparker | 3:24fbf4dbd7e5 | 176 | } |
richardparker | 3:24fbf4dbd7e5 | 177 | |
richardparker | 3:24fbf4dbd7e5 | 178 | if (_nextBox != NULL) |
richardparker | 3:24fbf4dbd7e5 | 179 | { |
richardparker | 3:24fbf4dbd7e5 | 180 | _nextBox->setEnabled(false); |
richardparker | 3:24fbf4dbd7e5 | 181 | } |
richardparker | 3:24fbf4dbd7e5 | 182 | |
richardparker | 3:24fbf4dbd7e5 | 183 | if (_prevBox != NULL) |
richardparker | 3:24fbf4dbd7e5 | 184 | { |
richardparker | 3:24fbf4dbd7e5 | 185 | _prevBox->setEnabled(false); |
richardparker | 3:24fbf4dbd7e5 | 186 | } |
richardparker | 3:24fbf4dbd7e5 | 187 | |
richardparker | 3:24fbf4dbd7e5 | 188 | if (_incBox != NULL) |
richardparker | 3:24fbf4dbd7e5 | 189 | { |
richardparker | 3:24fbf4dbd7e5 | 190 | _incBox->setEnabled(false); |
richardparker | 3:24fbf4dbd7e5 | 191 | } |
richardparker | 3:24fbf4dbd7e5 | 192 | |
richardparker | 3:24fbf4dbd7e5 | 193 | if (_decBox != NULL) |
richardparker | 3:24fbf4dbd7e5 | 194 | { |
richardparker | 3:24fbf4dbd7e5 | 195 | _decBox->setEnabled(false); |
richardparker | 3:24fbf4dbd7e5 | 196 | } |
richardparker | 3:24fbf4dbd7e5 | 197 | } |
richardparker | 3:24fbf4dbd7e5 | 198 | |
richardparker | 3:24fbf4dbd7e5 | 199 | void EASettings::_drawLaunchButton() |
richardparker | 3:24fbf4dbd7e5 | 200 | { |
richardparker | 3:24fbf4dbd7e5 | 201 | // Setup colours and clear screen to known background. |
richardparker | 3:24fbf4dbd7e5 | 202 | EAColor white = EAColor(0xFF, 0xFF, 0xFF); |
richardparker | 3:24fbf4dbd7e5 | 203 | EAColor black = EAColor(0x00, 0x00, 0x00); |
richardparker | 3:24fbf4dbd7e5 | 204 | |
richardparker | 4:f8f7f4f9c58d | 205 | EAFont font; |
richardparker | 3:24fbf4dbd7e5 | 206 | EABrush brush = _lcd.brush(); |
richardparker | 3:24fbf4dbd7e5 | 207 | EAPen pen = _lcd.pen(); |
richardparker | 3:24fbf4dbd7e5 | 208 | |
richardparker | 4:f8f7f4f9c58d | 209 | font.load("/local/large.fnt"); |
richardparker | 4:f8f7f4f9c58d | 210 | _lcd.setFont(font); |
richardparker | 4:f8f7f4f9c58d | 211 | |
richardparker | 3:24fbf4dbd7e5 | 212 | brush.setColor(black); |
richardparker | 3:24fbf4dbd7e5 | 213 | _lcd.setBrush(brush); |
richardparker | 3:24fbf4dbd7e5 | 214 | |
richardparker | 3:24fbf4dbd7e5 | 215 | pen.setColor(white); |
richardparker | 3:24fbf4dbd7e5 | 216 | _lcd.setPen(pen); |
richardparker | 3:24fbf4dbd7e5 | 217 | |
richardparker | 3:24fbf4dbd7e5 | 218 | // Create hit box if not already available. |
richardparker | 3:24fbf4dbd7e5 | 219 | if (_launchBox == NULL) |
richardparker | 3:24fbf4dbd7e5 | 220 | { |
richardparker | 4:f8f7f4f9c58d | 221 | _launchBox = new EAButton(_manager, _lcd.width()-60, _lcd.height()-60, 60, 60, "S", this); |
richardparker | 3:24fbf4dbd7e5 | 222 | } else { |
richardparker | 3:24fbf4dbd7e5 | 223 | _launchBox->setEnabled(true); |
richardparker | 3:24fbf4dbd7e5 | 224 | } |
richardparker | 3:24fbf4dbd7e5 | 225 | _launchBox->paint(_lcd); |
richardparker | 3:24fbf4dbd7e5 | 226 | } |
richardparker | 3:24fbf4dbd7e5 | 227 | |
richardparker | 3:24fbf4dbd7e5 | 228 | void EASettings::_drawPortal() |
richardparker | 3:24fbf4dbd7e5 | 229 | { |
richardparker | 3:24fbf4dbd7e5 | 230 | // Setup colours and clear screen to known background. |
richardparker | 3:24fbf4dbd7e5 | 231 | EAColor white = EAColor(0xFF, 0xFF, 0xFF); |
richardparker | 3:24fbf4dbd7e5 | 232 | EAColor black = EAColor(0x00, 0x00, 0x00); |
richardparker | 3:24fbf4dbd7e5 | 233 | |
richardparker | 3:24fbf4dbd7e5 | 234 | EAFont font; |
richardparker | 3:24fbf4dbd7e5 | 235 | EABrush brush = _lcd.brush(); |
richardparker | 3:24fbf4dbd7e5 | 236 | EAPen pen = _lcd.pen(); |
richardparker | 3:24fbf4dbd7e5 | 237 | |
richardparker | 3:24fbf4dbd7e5 | 238 | font.load("/local/large.fnt"); |
richardparker | 3:24fbf4dbd7e5 | 239 | _lcd.setFont(font); |
richardparker | 3:24fbf4dbd7e5 | 240 | |
richardparker | 3:24fbf4dbd7e5 | 241 | brush.setColor(black); |
richardparker | 3:24fbf4dbd7e5 | 242 | _lcd.setBrush(brush); |
richardparker | 3:24fbf4dbd7e5 | 243 | |
richardparker | 3:24fbf4dbd7e5 | 244 | pen.setColor(white); |
richardparker | 3:24fbf4dbd7e5 | 245 | _lcd.setPen(pen); |
richardparker | 3:24fbf4dbd7e5 | 246 | |
richardparker | 3:24fbf4dbd7e5 | 247 | // Clear the screen to draw the buttons on. |
richardparker | 3:24fbf4dbd7e5 | 248 | _lcd.clearScreen(); |
richardparker | 3:24fbf4dbd7e5 | 249 | |
richardparker | 3:24fbf4dbd7e5 | 250 | // Draw title. |
richardparker | 3:24fbf4dbd7e5 | 251 | _lcd.drawText((_lcd.width()/2)-(size()*2)+50, 10, "Settings"); |
richardparker | 3:24fbf4dbd7e5 | 252 | |
richardparker | 3:24fbf4dbd7e5 | 253 | // Create hit box if not already available. |
richardparker | 3:24fbf4dbd7e5 | 254 | if (_compassBox == NULL) |
richardparker | 3:24fbf4dbd7e5 | 255 | { |
richardparker | 3:24fbf4dbd7e5 | 256 | _compassBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*5), size()*4, size(), "Calibrate Compass", this); |
richardparker | 3:24fbf4dbd7e5 | 257 | } else { |
richardparker | 3:24fbf4dbd7e5 | 258 | _compassBox->setEnabled(true); |
richardparker | 3:24fbf4dbd7e5 | 259 | } |
richardparker | 3:24fbf4dbd7e5 | 260 | _compassBox->paint(_lcd); |
richardparker | 3:24fbf4dbd7e5 | 261 | |
richardparker | 3:24fbf4dbd7e5 | 262 | // Create hit box if not already available. |
richardparker | 3:24fbf4dbd7e5 | 263 | if (_dateBox == NULL) |
richardparker | 3:24fbf4dbd7e5 | 264 | { |
richardparker | 3:24fbf4dbd7e5 | 265 | _dateBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*4), size()*4, size(), "Set Date", this); |
richardparker | 3:24fbf4dbd7e5 | 266 | } else { |
richardparker | 3:24fbf4dbd7e5 | 267 | _dateBox->setEnabled(true); |
richardparker | 3:24fbf4dbd7e5 | 268 | } |
richardparker | 3:24fbf4dbd7e5 | 269 | _dateBox->paint(_lcd); |
richardparker | 3:24fbf4dbd7e5 | 270 | |
richardparker | 3:24fbf4dbd7e5 | 271 | // Create hit box if not already available. |
richardparker | 3:24fbf4dbd7e5 | 272 | if (_touchBox == NULL) |
richardparker | 3:24fbf4dbd7e5 | 273 | { |
richardparker | 3:24fbf4dbd7e5 | 274 | _touchBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*3), size()*4, size(), "Touch Calibration", this); |
richardparker | 3:24fbf4dbd7e5 | 275 | } else { |
richardparker | 3:24fbf4dbd7e5 | 276 | _touchBox->setEnabled(true); |
richardparker | 3:24fbf4dbd7e5 | 277 | } |
richardparker | 3:24fbf4dbd7e5 | 278 | _touchBox->paint(_lcd); |
richardparker | 3:24fbf4dbd7e5 | 279 | |
richardparker | 3:24fbf4dbd7e5 | 280 | // Create hit box if not already available. |
richardparker | 3:24fbf4dbd7e5 | 281 | if (_returnBox == NULL) |
richardparker | 3:24fbf4dbd7e5 | 282 | { |
richardparker | 3:24fbf4dbd7e5 | 283 | _returnBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*2), size()*4, size(), "Return...", this); |
richardparker | 3:24fbf4dbd7e5 | 284 | } else { |
richardparker | 3:24fbf4dbd7e5 | 285 | _returnBox->setEnabled(true); |
richardparker | 3:24fbf4dbd7e5 | 286 | } |
richardparker | 3:24fbf4dbd7e5 | 287 | _returnBox->paint(_lcd); |
richardparker | 3:24fbf4dbd7e5 | 288 | |
richardparker | 3:24fbf4dbd7e5 | 289 | } |
richardparker | 3:24fbf4dbd7e5 | 290 | |
richardparker | 4:f8f7f4f9c58d | 291 | void EASettings::_updateCompass() |
richardparker | 4:f8f7f4f9c58d | 292 | { |
richardparker | 4:f8f7f4f9c58d | 293 | float angle = _compass.getHeading(); |
richardparker | 4:f8f7f4f9c58d | 294 | angle = (angle * PI)/180; |
richardparker | 4:f8f7f4f9c58d | 295 | |
richardparker | 4:f8f7f4f9c58d | 296 | if (_compassCircle != NULL) |
richardparker | 4:f8f7f4f9c58d | 297 | { |
richardparker | 4:f8f7f4f9c58d | 298 | _compassCircle->update(_lcd, angle); |
richardparker | 4:f8f7f4f9c58d | 299 | } |
richardparker | 4:f8f7f4f9c58d | 300 | } |
richardparker | 4:f8f7f4f9c58d | 301 | |
richardparker | 4:f8f7f4f9c58d | 302 | void EASettings::_drawCompass() |
richardparker | 4:f8f7f4f9c58d | 303 | { |
richardparker | 4:f8f7f4f9c58d | 304 | // Setup colours and clear screen to known background. |
richardparker | 4:f8f7f4f9c58d | 305 | EAColor white = EAColor(0xFF, 0xFF, 0xFF); |
richardparker | 4:f8f7f4f9c58d | 306 | EAColor black = EAColor(0x00, 0x00, 0x00); |
richardparker | 4:f8f7f4f9c58d | 307 | |
richardparker | 4:f8f7f4f9c58d | 308 | EAFont font; |
richardparker | 4:f8f7f4f9c58d | 309 | EABrush brush = _lcd.brush(); |
richardparker | 4:f8f7f4f9c58d | 310 | EAPen pen = _lcd.pen(); |
richardparker | 4:f8f7f4f9c58d | 311 | |
richardparker | 4:f8f7f4f9c58d | 312 | font.load("/local/large.fnt"); |
richardparker | 4:f8f7f4f9c58d | 313 | _lcd.setFont(font); |
richardparker | 4:f8f7f4f9c58d | 314 | |
richardparker | 4:f8f7f4f9c58d | 315 | brush.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 316 | _lcd.setBrush(brush); |
richardparker | 4:f8f7f4f9c58d | 317 | |
richardparker | 4:f8f7f4f9c58d | 318 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 319 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 320 | |
richardparker | 4:f8f7f4f9c58d | 321 | // Clear the screen to draw the buttons on. |
richardparker | 4:f8f7f4f9c58d | 322 | _lcd.clearScreen(); |
richardparker | 4:f8f7f4f9c58d | 323 | |
richardparker | 4:f8f7f4f9c58d | 324 | // Draw title. |
richardparker | 4:f8f7f4f9c58d | 325 | _lcd.drawText((_lcd.width()/2)-(size()*2), 10, "Compass Calibration"); |
richardparker | 4:f8f7f4f9c58d | 326 | |
richardparker | 4:f8f7f4f9c58d | 327 | // Create compass if not already available. |
richardparker | 4:f8f7f4f9c58d | 328 | if (_compassCircle == NULL) |
richardparker | 4:f8f7f4f9c58d | 329 | { |
richardparker | 4:f8f7f4f9c58d | 330 | _compassCircle = new EACompass((_lcd.width()/2)-(size()*1.5), (_lcd.height()/2)-(size()*1.5)-25, size()*3, 0); |
richardparker | 4:f8f7f4f9c58d | 331 | } |
richardparker | 4:f8f7f4f9c58d | 332 | _compassCircle->paint(_lcd); |
richardparker | 4:f8f7f4f9c58d | 333 | |
richardparker | 4:f8f7f4f9c58d | 334 | // Create hit box if not already available. |
richardparker | 4:f8f7f4f9c58d | 335 | if (_returnBox == NULL) |
richardparker | 4:f8f7f4f9c58d | 336 | { |
richardparker | 4:f8f7f4f9c58d | 337 | _returnBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*2), size()*4, size(), "Return...", this); |
richardparker | 4:f8f7f4f9c58d | 338 | } else { |
richardparker | 4:f8f7f4f9c58d | 339 | _returnBox->setEnabled(true); |
richardparker | 4:f8f7f4f9c58d | 340 | } |
richardparker | 4:f8f7f4f9c58d | 341 | _returnBox->paint(_lcd); |
richardparker | 4:f8f7f4f9c58d | 342 | } |
richardparker | 4:f8f7f4f9c58d | 343 | |
richardparker | 3:24fbf4dbd7e5 | 344 | void EASettings::_drawDate() |
richardparker | 3:24fbf4dbd7e5 | 345 | { |
richardparker | 3:24fbf4dbd7e5 | 346 | // Setup colours and clear screen to known background. |
richardparker | 3:24fbf4dbd7e5 | 347 | EAColor white = EAColor(0xFF, 0xFF, 0xFF); |
richardparker | 3:24fbf4dbd7e5 | 348 | EAColor black = EAColor(0x00, 0x00, 0x00); |
richardparker | 3:24fbf4dbd7e5 | 349 | |
richardparker | 3:24fbf4dbd7e5 | 350 | EAFont font; |
richardparker | 3:24fbf4dbd7e5 | 351 | EABrush brush = _lcd.brush(); |
richardparker | 3:24fbf4dbd7e5 | 352 | EAPen pen = _lcd.pen(); |
richardparker | 3:24fbf4dbd7e5 | 353 | |
richardparker | 3:24fbf4dbd7e5 | 354 | font.load("/local/large.fnt"); |
richardparker | 3:24fbf4dbd7e5 | 355 | _lcd.setFont(font); |
richardparker | 3:24fbf4dbd7e5 | 356 | |
richardparker | 3:24fbf4dbd7e5 | 357 | brush.setColor(black); |
richardparker | 3:24fbf4dbd7e5 | 358 | _lcd.setBrush(brush); |
richardparker | 3:24fbf4dbd7e5 | 359 | |
richardparker | 3:24fbf4dbd7e5 | 360 | pen.setColor(white); |
richardparker | 3:24fbf4dbd7e5 | 361 | _lcd.setPen(pen); |
richardparker | 3:24fbf4dbd7e5 | 362 | |
richardparker | 3:24fbf4dbd7e5 | 363 | // Clear the screen to draw the buttons on. |
richardparker | 3:24fbf4dbd7e5 | 364 | _lcd.clearScreen(); |
richardparker | 3:24fbf4dbd7e5 | 365 | |
richardparker | 3:24fbf4dbd7e5 | 366 | // Draw title. |
richardparker | 3:24fbf4dbd7e5 | 367 | _lcd.drawText((_lcd.width()/2)-(size()*2)+50, 10, "Date/Time"); |
richardparker | 3:24fbf4dbd7e5 | 368 | |
richardparker | 3:24fbf4dbd7e5 | 369 | // Draw date. |
richardparker | 3:24fbf4dbd7e5 | 370 | char buffer[5]; |
richardparker | 3:24fbf4dbd7e5 | 371 | short y = 60; |
richardparker | 3:24fbf4dbd7e5 | 372 | short x = (_lcd.width()/2)-(size()*2)-25; |
richardparker | 3:24fbf4dbd7e5 | 373 | |
richardparker | 3:24fbf4dbd7e5 | 374 | // Update cached time. |
richardparker | 3:24fbf4dbd7e5 | 375 | time_t seconds = time(NULL); |
richardparker | 3:24fbf4dbd7e5 | 376 | _time = localtime(&seconds); |
richardparker | 3:24fbf4dbd7e5 | 377 | |
richardparker | 3:24fbf4dbd7e5 | 378 | // Put the day of the month into the buffer and display. |
richardparker | 3:24fbf4dbd7e5 | 379 | sprintf(buffer, "%02d", _time->tm_mday); |
richardparker | 3:24fbf4dbd7e5 | 380 | _lcd.drawText(x, y, buffer); |
richardparker | 3:24fbf4dbd7e5 | 381 | |
richardparker | 3:24fbf4dbd7e5 | 382 | // Display spacer. |
richardparker | 3:24fbf4dbd7e5 | 383 | _lcd.drawText(x+20, y, "/"); |
richardparker | 3:24fbf4dbd7e5 | 384 | |
richardparker | 3:24fbf4dbd7e5 | 385 | // Put the month into the buffer and display. |
richardparker | 3:24fbf4dbd7e5 | 386 | sprintf(buffer, "%02d", _time->tm_mon+1); |
richardparker | 3:24fbf4dbd7e5 | 387 | _lcd.drawText(x+30, y, buffer); |
richardparker | 3:24fbf4dbd7e5 | 388 | |
richardparker | 3:24fbf4dbd7e5 | 389 | // Display spacer. |
richardparker | 3:24fbf4dbd7e5 | 390 | _lcd.drawText(x+50, y, "/"); |
richardparker | 3:24fbf4dbd7e5 | 391 | |
richardparker | 3:24fbf4dbd7e5 | 392 | // Put the month into the buffer and display. |
richardparker | 3:24fbf4dbd7e5 | 393 | sprintf(buffer, "%04d", _time->tm_year+1900); |
richardparker | 3:24fbf4dbd7e5 | 394 | _lcd.drawText(x+60, y, buffer); |
richardparker | 3:24fbf4dbd7e5 | 395 | |
richardparker | 3:24fbf4dbd7e5 | 396 | // Put the hour into the buffer and display. |
richardparker | 3:24fbf4dbd7e5 | 397 | sprintf(buffer, "%02d", _time->tm_hour); |
richardparker | 3:24fbf4dbd7e5 | 398 | _lcd.drawText(x+120, y, buffer); |
richardparker | 3:24fbf4dbd7e5 | 399 | |
richardparker | 3:24fbf4dbd7e5 | 400 | // Display spacer. |
richardparker | 3:24fbf4dbd7e5 | 401 | _lcd.drawText(x+140, y, ":"); |
richardparker | 3:24fbf4dbd7e5 | 402 | |
richardparker | 3:24fbf4dbd7e5 | 403 | // Put the minute into the buffer and display. |
richardparker | 3:24fbf4dbd7e5 | 404 | sprintf(buffer, "%02d", _time->tm_min); |
richardparker | 3:24fbf4dbd7e5 | 405 | _lcd.drawText(x+150, y, buffer); |
richardparker | 3:24fbf4dbd7e5 | 406 | |
richardparker | 3:24fbf4dbd7e5 | 407 | // Display spacer. |
richardparker | 3:24fbf4dbd7e5 | 408 | _lcd.drawText(x+170, y, ":"); |
richardparker | 3:24fbf4dbd7e5 | 409 | |
richardparker | 3:24fbf4dbd7e5 | 410 | // Put the minute into the buffer and display. |
richardparker | 3:24fbf4dbd7e5 | 411 | sprintf(buffer, "%02d", _time->tm_sec); |
richardparker | 3:24fbf4dbd7e5 | 412 | _lcd.drawText(x+180, y, buffer); |
richardparker | 3:24fbf4dbd7e5 | 413 | |
richardparker | 3:24fbf4dbd7e5 | 414 | _enableDateButtons(); |
richardparker | 3:24fbf4dbd7e5 | 415 | _prevBox->paint(_lcd); |
richardparker | 3:24fbf4dbd7e5 | 416 | _nextBox->paint(_lcd); |
richardparker | 3:24fbf4dbd7e5 | 417 | _decBox->paint(_lcd); |
richardparker | 3:24fbf4dbd7e5 | 418 | _incBox->paint(_lcd); |
richardparker | 3:24fbf4dbd7e5 | 419 | _returnBox->paint(_lcd); |
richardparker | 3:24fbf4dbd7e5 | 420 | } |
richardparker | 3:24fbf4dbd7e5 | 421 | |
richardparker | 3:24fbf4dbd7e5 | 422 | void EASettings::_enableDateButtons() |
richardparker | 3:24fbf4dbd7e5 | 423 | { |
richardparker | 3:24fbf4dbd7e5 | 424 | // Create hit box if not already available. |
richardparker | 3:24fbf4dbd7e5 | 425 | if (_prevBox == NULL) |
richardparker | 3:24fbf4dbd7e5 | 426 | { |
richardparker | 3:24fbf4dbd7e5 | 427 | _prevBox = new EAButton(_manager, (_lcd.width()/2)-(size()*3), _lcd.height()-(size()*3.5), size(), size(), "<", this); |
richardparker | 3:24fbf4dbd7e5 | 428 | } else { |
richardparker | 3:24fbf4dbd7e5 | 429 | _prevBox->setEnabled(true); |
richardparker | 3:24fbf4dbd7e5 | 430 | } |
richardparker | 3:24fbf4dbd7e5 | 431 | |
richardparker | 3:24fbf4dbd7e5 | 432 | // Create hit box if not already available. |
richardparker | 3:24fbf4dbd7e5 | 433 | if (_nextBox == NULL) |
richardparker | 3:24fbf4dbd7e5 | 434 | { |
richardparker | 3:24fbf4dbd7e5 | 435 | _nextBox = new EAButton(_manager, (_lcd.width()/2)-(size()*1.5), _lcd.height()-(size()*3.5), size(), size(), ">", this); |
richardparker | 3:24fbf4dbd7e5 | 436 | } else { |
richardparker | 3:24fbf4dbd7e5 | 437 | _nextBox->setEnabled(true); |
richardparker | 3:24fbf4dbd7e5 | 438 | } |
richardparker | 3:24fbf4dbd7e5 | 439 | |
richardparker | 3:24fbf4dbd7e5 | 440 | // Create hit box if not already available. |
richardparker | 3:24fbf4dbd7e5 | 441 | if (_decBox == NULL) |
richardparker | 3:24fbf4dbd7e5 | 442 | { |
richardparker | 3:24fbf4dbd7e5 | 443 | _decBox = new EAButton(_manager, (_lcd.width()/2)+(size()*0.5), _lcd.height()-(size()*3.5), size(), size(), "-", this); |
richardparker | 3:24fbf4dbd7e5 | 444 | } else { |
richardparker | 3:24fbf4dbd7e5 | 445 | _decBox->setEnabled(true); |
richardparker | 3:24fbf4dbd7e5 | 446 | } |
richardparker | 3:24fbf4dbd7e5 | 447 | |
richardparker | 3:24fbf4dbd7e5 | 448 | // Create hit box if not already available. |
richardparker | 3:24fbf4dbd7e5 | 449 | if (_incBox == NULL) |
richardparker | 3:24fbf4dbd7e5 | 450 | { |
richardparker | 3:24fbf4dbd7e5 | 451 | _incBox = new EAButton(_manager, (_lcd.width()/2)+(size()*2), _lcd.height()-(size()*3.5), size(), size(), "+", this); |
richardparker | 3:24fbf4dbd7e5 | 452 | } else { |
richardparker | 3:24fbf4dbd7e5 | 453 | _incBox->setEnabled(true); |
richardparker | 3:24fbf4dbd7e5 | 454 | } |
richardparker | 3:24fbf4dbd7e5 | 455 | |
richardparker | 3:24fbf4dbd7e5 | 456 | // Create hit box if not already available. |
richardparker | 3:24fbf4dbd7e5 | 457 | if (_returnBox == NULL) |
richardparker | 3:24fbf4dbd7e5 | 458 | { |
richardparker | 3:24fbf4dbd7e5 | 459 | _returnBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*2), size()*4, size(), "Return...", this); |
richardparker | 3:24fbf4dbd7e5 | 460 | } else { |
richardparker | 3:24fbf4dbd7e5 | 461 | _returnBox->setEnabled(true); |
richardparker | 3:24fbf4dbd7e5 | 462 | } |
richardparker | 3:24fbf4dbd7e5 | 463 | } |
richardparker | 3:24fbf4dbd7e5 | 464 | |
richardparker | 3:24fbf4dbd7e5 | 465 | EASettings::State EASettings::_incDate() |
richardparker | 3:24fbf4dbd7e5 | 466 | { |
richardparker | 4:f8f7f4f9c58d | 467 | char buffer[5]; |
richardparker | 4:f8f7f4f9c58d | 468 | short y = 60; |
richardparker | 4:f8f7f4f9c58d | 469 | short x = (_lcd.width()/2)-(size()*2)-25; |
richardparker | 4:f8f7f4f9c58d | 470 | tm oldTime = *_time; |
richardparker | 4:f8f7f4f9c58d | 471 | |
richardparker | 4:f8f7f4f9c58d | 472 | // Setup colours and clear screen to known background. |
richardparker | 4:f8f7f4f9c58d | 473 | EAColor white = EAColor(0xFF, 0xFF, 0xFF); |
richardparker | 4:f8f7f4f9c58d | 474 | EAColor black = EAColor(0x00, 0x00, 0x00); |
richardparker | 4:f8f7f4f9c58d | 475 | |
richardparker | 4:f8f7f4f9c58d | 476 | EAFont font; |
richardparker | 4:f8f7f4f9c58d | 477 | EABrush brush = _lcd.brush(); |
richardparker | 4:f8f7f4f9c58d | 478 | EAPen pen = _lcd.pen(); |
richardparker | 4:f8f7f4f9c58d | 479 | |
richardparker | 4:f8f7f4f9c58d | 480 | font.load("/local/large.fnt"); |
richardparker | 4:f8f7f4f9c58d | 481 | _lcd.setFont(font); |
richardparker | 4:f8f7f4f9c58d | 482 | |
richardparker | 4:f8f7f4f9c58d | 483 | brush.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 484 | _lcd.setBrush(brush); |
richardparker | 4:f8f7f4f9c58d | 485 | |
richardparker | 4:f8f7f4f9c58d | 486 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 487 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 488 | |
richardparker | 4:f8f7f4f9c58d | 489 | // Now clear selection box. |
richardparker | 4:f8f7f4f9c58d | 490 | switch (state()) |
richardparker | 4:f8f7f4f9c58d | 491 | { |
richardparker | 4:f8f7f4f9c58d | 492 | default: |
richardparker | 4:f8f7f4f9c58d | 493 | case EASettings::STATE_DATE_DAY: |
richardparker | 4:f8f7f4f9c58d | 494 | _time->tm_mday = (int)(_time->tm_mday+1) % 32; |
richardparker | 4:f8f7f4f9c58d | 495 | if (_time->tm_mday == 0) _time->tm_mday = 1; |
richardparker | 4:f8f7f4f9c58d | 496 | break; |
richardparker | 4:f8f7f4f9c58d | 497 | case EASettings::STATE_DATE_MONTH: |
richardparker | 4:f8f7f4f9c58d | 498 | _time->tm_mon = (int)(_time->tm_mon+1) % 12; |
richardparker | 4:f8f7f4f9c58d | 499 | printf("Month: %d\r\n", _time->tm_mon); |
richardparker | 4:f8f7f4f9c58d | 500 | break; |
richardparker | 4:f8f7f4f9c58d | 501 | case EASettings::STATE_DATE_YEAR: |
richardparker | 4:f8f7f4f9c58d | 502 | _time->tm_year++; |
richardparker | 4:f8f7f4f9c58d | 503 | break; |
richardparker | 4:f8f7f4f9c58d | 504 | case EASettings::STATE_DATE_HOUR: |
richardparker | 4:f8f7f4f9c58d | 505 | _time->tm_hour = (int)(_time->tm_hour+1) % 60; |
richardparker | 4:f8f7f4f9c58d | 506 | break; |
richardparker | 4:f8f7f4f9c58d | 507 | case EASettings::STATE_DATE_MINUTE: |
richardparker | 4:f8f7f4f9c58d | 508 | _time->tm_min = (int)(_time->tm_min+1) % 60; |
richardparker | 4:f8f7f4f9c58d | 509 | break; |
richardparker | 4:f8f7f4f9c58d | 510 | case EASettings::STATE_DATE_SECOND: |
richardparker | 4:f8f7f4f9c58d | 511 | _time->tm_sec = (int)(_time->tm_sec+1) % 60; |
richardparker | 4:f8f7f4f9c58d | 512 | break; |
richardparker | 4:f8f7f4f9c58d | 513 | } |
richardparker | 4:f8f7f4f9c58d | 514 | |
richardparker | 4:f8f7f4f9c58d | 515 | // This converts to a valid value e.g. the value is too large for the month. |
richardparker | 4:f8f7f4f9c58d | 516 | time_t seconds = mktime(_time); |
richardparker | 4:f8f7f4f9c58d | 517 | printf("Time value is: %d\r\n", seconds); |
richardparker | 4:f8f7f4f9c58d | 518 | if (seconds == (time_t)-1) |
richardparker | 4:f8f7f4f9c58d | 519 | { |
richardparker | 4:f8f7f4f9c58d | 520 | printf("Bad time, not changing time...\r\n"); |
richardparker | 4:f8f7f4f9c58d | 521 | *_time = oldTime; |
richardparker | 4:f8f7f4f9c58d | 522 | } else { |
richardparker | 4:f8f7f4f9c58d | 523 | _time = localtime(&seconds); |
richardparker | 4:f8f7f4f9c58d | 524 | } |
richardparker | 4:f8f7f4f9c58d | 525 | |
richardparker | 4:f8f7f4f9c58d | 526 | if (oldTime.tm_mday != _time->tm_mday) |
richardparker | 4:f8f7f4f9c58d | 527 | { |
richardparker | 4:f8f7f4f9c58d | 528 | _lcd.drawFilledRect(x, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 529 | sprintf(buffer, "%02d", _time->tm_mday); |
richardparker | 4:f8f7f4f9c58d | 530 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 531 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 532 | _lcd.drawText(x, y, buffer); |
richardparker | 4:f8f7f4f9c58d | 533 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 534 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 535 | } |
richardparker | 4:f8f7f4f9c58d | 536 | if (oldTime.tm_mon != _time->tm_mon) |
richardparker | 4:f8f7f4f9c58d | 537 | { |
richardparker | 4:f8f7f4f9c58d | 538 | _lcd.drawFilledRect(x+30, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 539 | sprintf(buffer, "%02d", _time->tm_mon+1); |
richardparker | 4:f8f7f4f9c58d | 540 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 541 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 542 | _lcd.drawText(x+30, y, buffer); |
richardparker | 4:f8f7f4f9c58d | 543 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 544 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 545 | } |
richardparker | 4:f8f7f4f9c58d | 546 | if (oldTime.tm_year != _time->tm_year) |
richardparker | 4:f8f7f4f9c58d | 547 | { |
richardparker | 4:f8f7f4f9c58d | 548 | _lcd.drawFilledRect(x+60, y, 40, 20); |
richardparker | 4:f8f7f4f9c58d | 549 | sprintf(buffer, "%04d", _time->tm_year+1900); |
richardparker | 4:f8f7f4f9c58d | 550 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 551 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 552 | _lcd.drawText(x+60, y, buffer); |
richardparker | 4:f8f7f4f9c58d | 553 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 554 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 555 | } |
richardparker | 4:f8f7f4f9c58d | 556 | if (oldTime.tm_hour != _time->tm_hour) |
richardparker | 4:f8f7f4f9c58d | 557 | { |
richardparker | 4:f8f7f4f9c58d | 558 | _lcd.drawFilledRect(x+120, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 559 | sprintf(buffer, "%02d", _time->tm_hour); |
richardparker | 4:f8f7f4f9c58d | 560 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 561 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 562 | _lcd.drawText(x+120, y, buffer); |
richardparker | 4:f8f7f4f9c58d | 563 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 564 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 565 | } |
richardparker | 4:f8f7f4f9c58d | 566 | if (oldTime.tm_min != _time->tm_min) |
richardparker | 4:f8f7f4f9c58d | 567 | { |
richardparker | 4:f8f7f4f9c58d | 568 | _lcd.drawFilledRect(x+150, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 569 | sprintf(buffer, "%02d", _time->tm_min); |
richardparker | 4:f8f7f4f9c58d | 570 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 571 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 572 | _lcd.drawText(x+150, y, buffer); |
richardparker | 4:f8f7f4f9c58d | 573 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 574 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 575 | } |
richardparker | 4:f8f7f4f9c58d | 576 | if (oldTime.tm_sec != _time->tm_sec) |
richardparker | 4:f8f7f4f9c58d | 577 | { |
richardparker | 4:f8f7f4f9c58d | 578 | _lcd.drawFilledRect(x+180, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 579 | sprintf(buffer, "%02d", _time->tm_sec); |
richardparker | 4:f8f7f4f9c58d | 580 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 581 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 582 | _lcd.drawText(x+180, y, buffer); |
richardparker | 4:f8f7f4f9c58d | 583 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 584 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 585 | } |
richardparker | 4:f8f7f4f9c58d | 586 | |
richardparker | 4:f8f7f4f9c58d | 587 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 588 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 589 | |
richardparker | 4:f8f7f4f9c58d | 590 | // Now redraw selection box. |
richardparker | 4:f8f7f4f9c58d | 591 | switch (state()) |
richardparker | 4:f8f7f4f9c58d | 592 | { |
richardparker | 4:f8f7f4f9c58d | 593 | default: |
richardparker | 4:f8f7f4f9c58d | 594 | case EASettings::STATE_DATE_DAY: |
richardparker | 4:f8f7f4f9c58d | 595 | _lcd.drawRect(x, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 596 | break; |
richardparker | 4:f8f7f4f9c58d | 597 | case EASettings::STATE_DATE_MONTH: |
richardparker | 4:f8f7f4f9c58d | 598 | _lcd.drawRect(x+30, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 599 | break; |
richardparker | 4:f8f7f4f9c58d | 600 | case EASettings::STATE_DATE_YEAR: |
richardparker | 4:f8f7f4f9c58d | 601 | _lcd.drawRect(x+60, y, 40, 20); |
richardparker | 4:f8f7f4f9c58d | 602 | break; |
richardparker | 4:f8f7f4f9c58d | 603 | case EASettings::STATE_DATE_HOUR: |
richardparker | 4:f8f7f4f9c58d | 604 | _lcd.drawRect(x+120, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 605 | break; |
richardparker | 4:f8f7f4f9c58d | 606 | case EASettings::STATE_DATE_MINUTE: |
richardparker | 4:f8f7f4f9c58d | 607 | _lcd.drawRect(x+150, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 608 | break; |
richardparker | 4:f8f7f4f9c58d | 609 | case EASettings::STATE_DATE_SECOND: |
richardparker | 4:f8f7f4f9c58d | 610 | _lcd.drawRect(x+180, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 611 | break; |
richardparker | 4:f8f7f4f9c58d | 612 | } |
richardparker | 4:f8f7f4f9c58d | 613 | |
richardparker | 3:24fbf4dbd7e5 | 614 | return state(); |
richardparker | 3:24fbf4dbd7e5 | 615 | } |
richardparker | 3:24fbf4dbd7e5 | 616 | |
richardparker | 3:24fbf4dbd7e5 | 617 | EASettings::State EASettings::_decDate() |
richardparker | 3:24fbf4dbd7e5 | 618 | { |
richardparker | 4:f8f7f4f9c58d | 619 | char buffer[5]; |
richardparker | 4:f8f7f4f9c58d | 620 | short y = 60; |
richardparker | 4:f8f7f4f9c58d | 621 | short x = (_lcd.width()/2)-(size()*2)-25; |
richardparker | 4:f8f7f4f9c58d | 622 | tm oldTime = *_time; |
richardparker | 4:f8f7f4f9c58d | 623 | |
richardparker | 4:f8f7f4f9c58d | 624 | // Setup colours and clear screen to known background. |
richardparker | 4:f8f7f4f9c58d | 625 | EAColor white = EAColor(0xFF, 0xFF, 0xFF); |
richardparker | 4:f8f7f4f9c58d | 626 | EAColor black = EAColor(0x00, 0x00, 0x00); |
richardparker | 4:f8f7f4f9c58d | 627 | |
richardparker | 4:f8f7f4f9c58d | 628 | EAFont font; |
richardparker | 4:f8f7f4f9c58d | 629 | EABrush brush = _lcd.brush(); |
richardparker | 4:f8f7f4f9c58d | 630 | EAPen pen = _lcd.pen(); |
richardparker | 4:f8f7f4f9c58d | 631 | |
richardparker | 4:f8f7f4f9c58d | 632 | font.load("/local/large.fnt"); |
richardparker | 4:f8f7f4f9c58d | 633 | _lcd.setFont(font); |
richardparker | 4:f8f7f4f9c58d | 634 | |
richardparker | 4:f8f7f4f9c58d | 635 | brush.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 636 | _lcd.setBrush(brush); |
richardparker | 4:f8f7f4f9c58d | 637 | |
richardparker | 4:f8f7f4f9c58d | 638 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 639 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 640 | |
richardparker | 4:f8f7f4f9c58d | 641 | switch (state()) |
richardparker | 4:f8f7f4f9c58d | 642 | { |
richardparker | 4:f8f7f4f9c58d | 643 | default: |
richardparker | 4:f8f7f4f9c58d | 644 | case EASettings::STATE_DATE_DAY: |
richardparker | 4:f8f7f4f9c58d | 645 | _time->tm_mday = (int)(_time->tm_mday-1) % 32; |
richardparker | 4:f8f7f4f9c58d | 646 | if (_time->tm_mday == 0) _time->tm_mday = 31; |
richardparker | 4:f8f7f4f9c58d | 647 | break; |
richardparker | 4:f8f7f4f9c58d | 648 | case EASettings::STATE_DATE_MONTH: |
richardparker | 4:f8f7f4f9c58d | 649 | _time->tm_mon = (int)(_time->tm_mon-1) % 12; |
richardparker | 4:f8f7f4f9c58d | 650 | break; |
richardparker | 4:f8f7f4f9c58d | 651 | case EASettings::STATE_DATE_YEAR: |
richardparker | 4:f8f7f4f9c58d | 652 | if (_time->tm_year > 70) |
richardparker | 4:f8f7f4f9c58d | 653 | { |
richardparker | 4:f8f7f4f9c58d | 654 | _time->tm_year--; |
richardparker | 4:f8f7f4f9c58d | 655 | } |
richardparker | 4:f8f7f4f9c58d | 656 | break; |
richardparker | 4:f8f7f4f9c58d | 657 | case EASettings::STATE_DATE_HOUR: |
richardparker | 4:f8f7f4f9c58d | 658 | _time->tm_hour = (int)(_time->tm_hour-1) % 60; |
richardparker | 4:f8f7f4f9c58d | 659 | break; |
richardparker | 4:f8f7f4f9c58d | 660 | case EASettings::STATE_DATE_MINUTE: |
richardparker | 4:f8f7f4f9c58d | 661 | _time->tm_min = (int)(_time->tm_min-1) % 60; |
richardparker | 4:f8f7f4f9c58d | 662 | break; |
richardparker | 4:f8f7f4f9c58d | 663 | case EASettings::STATE_DATE_SECOND: |
richardparker | 4:f8f7f4f9c58d | 664 | _time->tm_sec = (int)(_time->tm_sec-1) % 60; |
richardparker | 4:f8f7f4f9c58d | 665 | break; |
richardparker | 4:f8f7f4f9c58d | 666 | } |
richardparker | 4:f8f7f4f9c58d | 667 | |
richardparker | 4:f8f7f4f9c58d | 668 | // This converts to a valid value e.g. the value is too large for the month. |
richardparker | 4:f8f7f4f9c58d | 669 | time_t seconds = mktime(_time); |
richardparker | 4:f8f7f4f9c58d | 670 | printf("Time value is: %d\r\n", seconds); |
richardparker | 4:f8f7f4f9c58d | 671 | if (seconds == (time_t)-1) |
richardparker | 4:f8f7f4f9c58d | 672 | { |
richardparker | 4:f8f7f4f9c58d | 673 | printf("Bad time, not changing time...\r\n"); |
richardparker | 4:f8f7f4f9c58d | 674 | *_time = oldTime; |
richardparker | 4:f8f7f4f9c58d | 675 | } else { |
richardparker | 4:f8f7f4f9c58d | 676 | _time = localtime(&seconds); |
richardparker | 4:f8f7f4f9c58d | 677 | } |
richardparker | 4:f8f7f4f9c58d | 678 | |
richardparker | 4:f8f7f4f9c58d | 679 | if (oldTime.tm_mday != _time->tm_mday) |
richardparker | 4:f8f7f4f9c58d | 680 | { |
richardparker | 4:f8f7f4f9c58d | 681 | _lcd.drawFilledRect(x, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 682 | sprintf(buffer, "%02d", _time->tm_mday); |
richardparker | 4:f8f7f4f9c58d | 683 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 684 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 685 | _lcd.drawText(x, y, buffer); |
richardparker | 4:f8f7f4f9c58d | 686 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 687 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 688 | } |
richardparker | 4:f8f7f4f9c58d | 689 | if (oldTime.tm_mon != _time->tm_mon) |
richardparker | 4:f8f7f4f9c58d | 690 | { |
richardparker | 4:f8f7f4f9c58d | 691 | _lcd.drawFilledRect(x+30, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 692 | sprintf(buffer, "%02d", _time->tm_mon+1); |
richardparker | 4:f8f7f4f9c58d | 693 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 694 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 695 | _lcd.drawText(x+30, y, buffer); |
richardparker | 4:f8f7f4f9c58d | 696 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 697 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 698 | } |
richardparker | 4:f8f7f4f9c58d | 699 | if (oldTime.tm_year != _time->tm_year) |
richardparker | 4:f8f7f4f9c58d | 700 | { |
richardparker | 4:f8f7f4f9c58d | 701 | _lcd.drawFilledRect(x+60, y, 40, 20); |
richardparker | 4:f8f7f4f9c58d | 702 | sprintf(buffer, "%04d", _time->tm_year+1900); |
richardparker | 4:f8f7f4f9c58d | 703 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 704 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 705 | _lcd.drawText(x+60, y, buffer); |
richardparker | 4:f8f7f4f9c58d | 706 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 707 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 708 | } |
richardparker | 4:f8f7f4f9c58d | 709 | if (oldTime.tm_hour != _time->tm_hour) |
richardparker | 4:f8f7f4f9c58d | 710 | { |
richardparker | 4:f8f7f4f9c58d | 711 | _lcd.drawFilledRect(x+120, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 712 | sprintf(buffer, "%02d", _time->tm_hour); |
richardparker | 4:f8f7f4f9c58d | 713 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 714 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 715 | _lcd.drawText(x+120, y, buffer); |
richardparker | 4:f8f7f4f9c58d | 716 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 717 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 718 | } |
richardparker | 4:f8f7f4f9c58d | 719 | if (oldTime.tm_min != _time->tm_min) |
richardparker | 4:f8f7f4f9c58d | 720 | { |
richardparker | 4:f8f7f4f9c58d | 721 | _lcd.drawFilledRect(x+150, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 722 | sprintf(buffer, "%02d", _time->tm_min); |
richardparker | 4:f8f7f4f9c58d | 723 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 724 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 725 | _lcd.drawText(x+150, y, buffer); |
richardparker | 4:f8f7f4f9c58d | 726 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 727 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 728 | } |
richardparker | 4:f8f7f4f9c58d | 729 | if (oldTime.tm_sec != _time->tm_sec) |
richardparker | 4:f8f7f4f9c58d | 730 | { |
richardparker | 4:f8f7f4f9c58d | 731 | _lcd.drawFilledRect(x+180, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 732 | sprintf(buffer, "%02d", _time->tm_sec); |
richardparker | 4:f8f7f4f9c58d | 733 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 734 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 735 | _lcd.drawText(x+180, y, buffer); |
richardparker | 4:f8f7f4f9c58d | 736 | pen.setColor(black); |
richardparker | 4:f8f7f4f9c58d | 737 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 738 | } |
richardparker | 4:f8f7f4f9c58d | 739 | |
richardparker | 4:f8f7f4f9c58d | 740 | pen.setColor(white); |
richardparker | 4:f8f7f4f9c58d | 741 | _lcd.setPen(pen); |
richardparker | 4:f8f7f4f9c58d | 742 | |
richardparker | 4:f8f7f4f9c58d | 743 | // Now redraw selection box. |
richardparker | 4:f8f7f4f9c58d | 744 | switch (state()) |
richardparker | 4:f8f7f4f9c58d | 745 | { |
richardparker | 4:f8f7f4f9c58d | 746 | default: |
richardparker | 4:f8f7f4f9c58d | 747 | case EASettings::STATE_DATE_DAY: |
richardparker | 4:f8f7f4f9c58d | 748 | _lcd.drawRect(x, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 749 | break; |
richardparker | 4:f8f7f4f9c58d | 750 | case EASettings::STATE_DATE_MONTH: |
richardparker | 4:f8f7f4f9c58d | 751 | _lcd.drawRect(x+30, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 752 | break; |
richardparker | 4:f8f7f4f9c58d | 753 | case EASettings::STATE_DATE_YEAR: |
richardparker | 4:f8f7f4f9c58d | 754 | _lcd.drawRect(x+60, y, 40, 20); |
richardparker | 4:f8f7f4f9c58d | 755 | break; |
richardparker | 4:f8f7f4f9c58d | 756 | case EASettings::STATE_DATE_HOUR: |
richardparker | 4:f8f7f4f9c58d | 757 | _lcd.drawRect(x+120, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 758 | break; |
richardparker | 4:f8f7f4f9c58d | 759 | case EASettings::STATE_DATE_MINUTE: |
richardparker | 4:f8f7f4f9c58d | 760 | _lcd.drawRect(x+150, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 761 | break; |
richardparker | 4:f8f7f4f9c58d | 762 | case EASettings::STATE_DATE_SECOND: |
richardparker | 4:f8f7f4f9c58d | 763 | _lcd.drawRect(x+180, y, 20, 20); |
richardparker | 4:f8f7f4f9c58d | 764 | break; |
richardparker | 4:f8f7f4f9c58d | 765 | } |
richardparker | 3:24fbf4dbd7e5 | 766 | |
richardparker | 3:24fbf4dbd7e5 | 767 | return state(); |
richardparker | 3:24fbf4dbd7e5 | 768 | } |
richardparker | 3:24fbf4dbd7e5 | 769 | |
richardparker | 3:24fbf4dbd7e5 | 770 | EASettings::State EASettings::_nextDate() |
richardparker | 3:24fbf4dbd7e5 | 771 | { |
richardparker | 3:24fbf4dbd7e5 | 772 | short y = 60; |
richardparker | 3:24fbf4dbd7e5 | 773 | short x = (_lcd.width()/2)-(size()*2)-25; |
richardparker | 3:24fbf4dbd7e5 | 774 | |
richardparker | 3:24fbf4dbd7e5 | 775 | EASettings::State nextState = EASettings::STATE_IDLE; |
richardparker | 3:24fbf4dbd7e5 | 776 | |
richardparker | 3:24fbf4dbd7e5 | 777 | // Setup colours and clear screen to known background. |
richardparker | 3:24fbf4dbd7e5 | 778 | EAColor white = EAColor(0xFF, 0xFF, 0xFF); |
richardparker | 3:24fbf4dbd7e5 | 779 | EAColor black = EAColor(0x00, 0x00, 0x00); |
richardparker | 3:24fbf4dbd7e5 | 780 | |
richardparker | 3:24fbf4dbd7e5 | 781 | EABrush brush = _lcd.brush(); |
richardparker | 3:24fbf4dbd7e5 | 782 | EAPen pen = _lcd.pen(); |
richardparker | 3:24fbf4dbd7e5 | 783 | |
richardparker | 3:24fbf4dbd7e5 | 784 | brush.setColor(white); |
richardparker | 3:24fbf4dbd7e5 | 785 | _lcd.setBrush(brush); |
richardparker | 3:24fbf4dbd7e5 | 786 | |
richardparker | 3:24fbf4dbd7e5 | 787 | pen.setColor(black); |
richardparker | 3:24fbf4dbd7e5 | 788 | _lcd.setPen(pen); |
richardparker | 3:24fbf4dbd7e5 | 789 | |
richardparker | 3:24fbf4dbd7e5 | 790 | // Now clear selection box. |
richardparker | 3:24fbf4dbd7e5 | 791 | switch (state()) |
richardparker | 3:24fbf4dbd7e5 | 792 | { |
richardparker | 3:24fbf4dbd7e5 | 793 | default: |
richardparker | 3:24fbf4dbd7e5 | 794 | case EASettings::STATE_DATE_DAY: |
richardparker | 3:24fbf4dbd7e5 | 795 | _lcd.drawRect(x, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 796 | break; |
richardparker | 3:24fbf4dbd7e5 | 797 | case EASettings::STATE_DATE_MONTH: |
richardparker | 3:24fbf4dbd7e5 | 798 | _lcd.drawRect(x+30, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 799 | break; |
richardparker | 3:24fbf4dbd7e5 | 800 | case EASettings::STATE_DATE_YEAR: |
richardparker | 3:24fbf4dbd7e5 | 801 | _lcd.drawRect(x+60, y, 40, 20); |
richardparker | 3:24fbf4dbd7e5 | 802 | break; |
richardparker | 3:24fbf4dbd7e5 | 803 | case EASettings::STATE_DATE_HOUR: |
richardparker | 3:24fbf4dbd7e5 | 804 | _lcd.drawRect(x+120, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 805 | break; |
richardparker | 3:24fbf4dbd7e5 | 806 | case EASettings::STATE_DATE_MINUTE: |
richardparker | 3:24fbf4dbd7e5 | 807 | _lcd.drawRect(x+150, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 808 | break; |
richardparker | 3:24fbf4dbd7e5 | 809 | case EASettings::STATE_DATE_SECOND: |
richardparker | 3:24fbf4dbd7e5 | 810 | _lcd.drawRect(x+180, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 811 | break; |
richardparker | 3:24fbf4dbd7e5 | 812 | } |
richardparker | 3:24fbf4dbd7e5 | 813 | |
richardparker | 3:24fbf4dbd7e5 | 814 | brush.setColor(black); |
richardparker | 3:24fbf4dbd7e5 | 815 | _lcd.setBrush(brush); |
richardparker | 3:24fbf4dbd7e5 | 816 | |
richardparker | 3:24fbf4dbd7e5 | 817 | pen.setColor(white); |
richardparker | 3:24fbf4dbd7e5 | 818 | _lcd.setPen(pen); |
richardparker | 3:24fbf4dbd7e5 | 819 | |
richardparker | 3:24fbf4dbd7e5 | 820 | // Now draw selection box. |
richardparker | 3:24fbf4dbd7e5 | 821 | switch (state()) |
richardparker | 3:24fbf4dbd7e5 | 822 | { |
richardparker | 3:24fbf4dbd7e5 | 823 | default: |
richardparker | 3:24fbf4dbd7e5 | 824 | case EASettings::STATE_DATE_DAY: |
richardparker | 3:24fbf4dbd7e5 | 825 | nextState = EASettings::STATE_DATE_MONTH; |
richardparker | 3:24fbf4dbd7e5 | 826 | _lcd.drawRect(x+30, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 827 | break; |
richardparker | 3:24fbf4dbd7e5 | 828 | case EASettings::STATE_DATE_MONTH: |
richardparker | 3:24fbf4dbd7e5 | 829 | nextState = EASettings::STATE_DATE_YEAR; |
richardparker | 3:24fbf4dbd7e5 | 830 | _lcd.drawRect(x+60, y, 40, 20); |
richardparker | 3:24fbf4dbd7e5 | 831 | break; |
richardparker | 3:24fbf4dbd7e5 | 832 | case EASettings::STATE_DATE_YEAR: |
richardparker | 3:24fbf4dbd7e5 | 833 | nextState = EASettings::STATE_DATE_HOUR; |
richardparker | 3:24fbf4dbd7e5 | 834 | _lcd.drawRect(x+120, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 835 | break; |
richardparker | 3:24fbf4dbd7e5 | 836 | case EASettings::STATE_DATE_HOUR: |
richardparker | 3:24fbf4dbd7e5 | 837 | nextState = EASettings::STATE_DATE_MINUTE; |
richardparker | 3:24fbf4dbd7e5 | 838 | _lcd.drawRect(x+150, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 839 | break; |
richardparker | 3:24fbf4dbd7e5 | 840 | case EASettings::STATE_DATE_MINUTE: |
richardparker | 3:24fbf4dbd7e5 | 841 | nextState = EASettings::STATE_DATE_SECOND; |
richardparker | 3:24fbf4dbd7e5 | 842 | _lcd.drawRect(x+180, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 843 | break; |
richardparker | 3:24fbf4dbd7e5 | 844 | case EASettings::STATE_DATE_SECOND: |
richardparker | 3:24fbf4dbd7e5 | 845 | nextState = EASettings::STATE_DATE_DAY; |
richardparker | 3:24fbf4dbd7e5 | 846 | _lcd.drawRect(x, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 847 | break; |
richardparker | 3:24fbf4dbd7e5 | 848 | } |
richardparker | 3:24fbf4dbd7e5 | 849 | |
richardparker | 3:24fbf4dbd7e5 | 850 | return nextState; |
richardparker | 3:24fbf4dbd7e5 | 851 | } |
richardparker | 3:24fbf4dbd7e5 | 852 | |
richardparker | 3:24fbf4dbd7e5 | 853 | EASettings::State EASettings::_prevDate() |
richardparker | 3:24fbf4dbd7e5 | 854 | { |
richardparker | 3:24fbf4dbd7e5 | 855 | short y = 60; |
richardparker | 3:24fbf4dbd7e5 | 856 | short x = (_lcd.width()/2)-(size()*2)-25; |
richardparker | 3:24fbf4dbd7e5 | 857 | |
richardparker | 3:24fbf4dbd7e5 | 858 | EASettings::State prevState = EASettings::STATE_IDLE; |
richardparker | 3:24fbf4dbd7e5 | 859 | |
richardparker | 3:24fbf4dbd7e5 | 860 | // Setup colours and clear screen to known background. |
richardparker | 3:24fbf4dbd7e5 | 861 | EAColor white = EAColor(0xFF, 0xFF, 0xFF); |
richardparker | 3:24fbf4dbd7e5 | 862 | EAColor black = EAColor(0x00, 0x00, 0x00); |
richardparker | 3:24fbf4dbd7e5 | 863 | |
richardparker | 3:24fbf4dbd7e5 | 864 | EABrush brush = _lcd.brush(); |
richardparker | 3:24fbf4dbd7e5 | 865 | EAPen pen = _lcd.pen(); |
richardparker | 3:24fbf4dbd7e5 | 866 | |
richardparker | 3:24fbf4dbd7e5 | 867 | brush.setColor(white); |
richardparker | 3:24fbf4dbd7e5 | 868 | _lcd.setBrush(brush); |
richardparker | 3:24fbf4dbd7e5 | 869 | |
richardparker | 3:24fbf4dbd7e5 | 870 | pen.setColor(black); |
richardparker | 3:24fbf4dbd7e5 | 871 | _lcd.setPen(pen); |
richardparker | 3:24fbf4dbd7e5 | 872 | |
richardparker | 3:24fbf4dbd7e5 | 873 | // Now clear selection box. |
richardparker | 3:24fbf4dbd7e5 | 874 | switch (state()) |
richardparker | 3:24fbf4dbd7e5 | 875 | { |
richardparker | 3:24fbf4dbd7e5 | 876 | default: |
richardparker | 3:24fbf4dbd7e5 | 877 | case EASettings::STATE_DATE_DAY: |
richardparker | 3:24fbf4dbd7e5 | 878 | _lcd.drawRect(x, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 879 | break; |
richardparker | 3:24fbf4dbd7e5 | 880 | case EASettings::STATE_DATE_MONTH: |
richardparker | 3:24fbf4dbd7e5 | 881 | _lcd.drawRect(x+30, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 882 | break; |
richardparker | 3:24fbf4dbd7e5 | 883 | case EASettings::STATE_DATE_YEAR: |
richardparker | 3:24fbf4dbd7e5 | 884 | _lcd.drawRect(x+60, y, 40, 20); |
richardparker | 3:24fbf4dbd7e5 | 885 | break; |
richardparker | 3:24fbf4dbd7e5 | 886 | case EASettings::STATE_DATE_HOUR: |
richardparker | 3:24fbf4dbd7e5 | 887 | _lcd.drawRect(x+120, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 888 | break; |
richardparker | 3:24fbf4dbd7e5 | 889 | case EASettings::STATE_DATE_MINUTE: |
richardparker | 3:24fbf4dbd7e5 | 890 | _lcd.drawRect(x+150, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 891 | break; |
richardparker | 3:24fbf4dbd7e5 | 892 | case EASettings::STATE_DATE_SECOND: |
richardparker | 3:24fbf4dbd7e5 | 893 | _lcd.drawRect(x+180, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 894 | break; |
richardparker | 3:24fbf4dbd7e5 | 895 | } |
richardparker | 3:24fbf4dbd7e5 | 896 | |
richardparker | 3:24fbf4dbd7e5 | 897 | brush.setColor(black); |
richardparker | 3:24fbf4dbd7e5 | 898 | _lcd.setBrush(brush); |
richardparker | 3:24fbf4dbd7e5 | 899 | |
richardparker | 3:24fbf4dbd7e5 | 900 | pen.setColor(white); |
richardparker | 3:24fbf4dbd7e5 | 901 | _lcd.setPen(pen); |
richardparker | 3:24fbf4dbd7e5 | 902 | |
richardparker | 3:24fbf4dbd7e5 | 903 | // Now draw selection box. |
richardparker | 3:24fbf4dbd7e5 | 904 | switch (state()) |
richardparker | 3:24fbf4dbd7e5 | 905 | { |
richardparker | 3:24fbf4dbd7e5 | 906 | default: |
richardparker | 3:24fbf4dbd7e5 | 907 | case EASettings::STATE_DATE_DAY: |
richardparker | 3:24fbf4dbd7e5 | 908 | prevState = EASettings::STATE_DATE_SECOND; |
richardparker | 3:24fbf4dbd7e5 | 909 | _lcd.drawRect(x+180, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 910 | break; |
richardparker | 3:24fbf4dbd7e5 | 911 | case EASettings::STATE_DATE_MONTH: |
richardparker | 3:24fbf4dbd7e5 | 912 | prevState = EASettings::STATE_DATE_DAY; |
richardparker | 3:24fbf4dbd7e5 | 913 | _lcd.drawRect(x, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 914 | break; |
richardparker | 3:24fbf4dbd7e5 | 915 | case EASettings::STATE_DATE_YEAR: |
richardparker | 3:24fbf4dbd7e5 | 916 | prevState = EASettings::STATE_DATE_MONTH; |
richardparker | 3:24fbf4dbd7e5 | 917 | _lcd.drawRect(x+30, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 918 | break; |
richardparker | 3:24fbf4dbd7e5 | 919 | case EASettings::STATE_DATE_HOUR: |
richardparker | 3:24fbf4dbd7e5 | 920 | prevState = EASettings::STATE_DATE_YEAR; |
richardparker | 3:24fbf4dbd7e5 | 921 | _lcd.drawRect(x+60, y, 40, 20); |
richardparker | 3:24fbf4dbd7e5 | 922 | break; |
richardparker | 3:24fbf4dbd7e5 | 923 | case EASettings::STATE_DATE_MINUTE: |
richardparker | 3:24fbf4dbd7e5 | 924 | prevState = EASettings::STATE_DATE_HOUR; |
richardparker | 3:24fbf4dbd7e5 | 925 | _lcd.drawRect(x+120, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 926 | break; |
richardparker | 3:24fbf4dbd7e5 | 927 | case EASettings::STATE_DATE_SECOND: |
richardparker | 3:24fbf4dbd7e5 | 928 | prevState = EASettings::STATE_DATE_MINUTE; |
richardparker | 3:24fbf4dbd7e5 | 929 | _lcd.drawRect(x+150, y, 20, 20); |
richardparker | 3:24fbf4dbd7e5 | 930 | break; |
richardparker | 3:24fbf4dbd7e5 | 931 | } |
richardparker | 3:24fbf4dbd7e5 | 932 | |
richardparker | 3:24fbf4dbd7e5 | 933 | return prevState; |
richardparker | 3:24fbf4dbd7e5 | 934 | } |
richardparker | 3:24fbf4dbd7e5 | 935 |