Richard Parker / EALCD
Committer:
richardparker
Date:
Wed Mar 31 22:22:21 2010 +0000
Revision:
3:24fbf4dbd7e5
Child:
4:f8f7f4f9c58d

        

Who changed what in which revision?

UserRevisionLine numberNew 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 3:24fbf4dbd7e5 11
richardparker 3:24fbf4dbd7e5 12 EASettings::EASettings(EALCD& lcd, EATouch& touch, EATouchManager& manager)
richardparker 3:24fbf4dbd7e5 13 : _lcd(lcd),
richardparker 3:24fbf4dbd7e5 14 _touch(touch),
richardparker 3:24fbf4dbd7e5 15 _manager(manager),
richardparker 3:24fbf4dbd7e5 16 _time(NULL),
richardparker 3:24fbf4dbd7e5 17 _launchBox(NULL),
richardparker 3:24fbf4dbd7e5 18 _returnBox(NULL),
richardparker 3:24fbf4dbd7e5 19 _touchBox(NULL),
richardparker 3:24fbf4dbd7e5 20 _dateBox(NULL),
richardparker 3:24fbf4dbd7e5 21 _compassBox(NULL),
richardparker 3:24fbf4dbd7e5 22 _nextBox(NULL),
richardparker 3:24fbf4dbd7e5 23 _prevBox(NULL),
richardparker 3:24fbf4dbd7e5 24 _incBox(NULL),
richardparker 3:24fbf4dbd7e5 25 _decBox(NULL),
richardparker 3:24fbf4dbd7e5 26 _state(EASettings::STATE_ENDED)
richardparker 3:24fbf4dbd7e5 27 {
richardparker 3:24fbf4dbd7e5 28 // Actually start the RTC without this call RTC is not running.
richardparker 3:24fbf4dbd7e5 29 set_time(0);
richardparker 3:24fbf4dbd7e5 30 time_t seconds = time(NULL);
richardparker 3:24fbf4dbd7e5 31 _time = localtime(&seconds);
richardparker 3:24fbf4dbd7e5 32 }
richardparker 3:24fbf4dbd7e5 33
richardparker 3:24fbf4dbd7e5 34 EASettings::~EASettings()
richardparker 3:24fbf4dbd7e5 35 {
richardparker 3:24fbf4dbd7e5 36 }
richardparker 3:24fbf4dbd7e5 37
richardparker 3:24fbf4dbd7e5 38 void EASettings::start()
richardparker 3:24fbf4dbd7e5 39 {
richardparker 3:24fbf4dbd7e5 40 _state = EASettings::STATE_IDLE;
richardparker 3:24fbf4dbd7e5 41 _drawLaunchButton();
richardparker 3:24fbf4dbd7e5 42 }
richardparker 3:24fbf4dbd7e5 43
richardparker 3:24fbf4dbd7e5 44 void EASettings::actionHandler(EAHitBox* box, short x, short y)
richardparker 3:24fbf4dbd7e5 45 {
richardparker 3:24fbf4dbd7e5 46 State nextState = EASettings::STATE_IDLE;
richardparker 3:24fbf4dbd7e5 47
richardparker 3:24fbf4dbd7e5 48 // DEBUG
richardparker 3:24fbf4dbd7e5 49 Serial pc(USBTX, USBRX);
richardparker 3:24fbf4dbd7e5 50 pc.printf("Hello yessd!!!\r\n");
richardparker 3:24fbf4dbd7e5 51
richardparker 3:24fbf4dbd7e5 52 // Disable hit boxs from previous screens.
richardparker 3:24fbf4dbd7e5 53 _disableHitBoxs();
richardparker 3:24fbf4dbd7e5 54
richardparker 3:24fbf4dbd7e5 55 // Do action depending on the state that in.
richardparker 3:24fbf4dbd7e5 56 switch(state())
richardparker 3:24fbf4dbd7e5 57 {
richardparker 3:24fbf4dbd7e5 58 case EASettings::STATE_IDLE:
richardparker 3:24fbf4dbd7e5 59 _drawPortal();
richardparker 3:24fbf4dbd7e5 60 nextState = EASettings::STATE_PORTAL;
richardparker 3:24fbf4dbd7e5 61 break;
richardparker 3:24fbf4dbd7e5 62 case EASettings::STATE_PORTAL:
richardparker 3:24fbf4dbd7e5 63 if (box == _returnBox->hitBox())
richardparker 3:24fbf4dbd7e5 64 {
richardparker 3:24fbf4dbd7e5 65 nextState = EASettings::STATE_ENDED;
richardparker 3:24fbf4dbd7e5 66 }
richardparker 3:24fbf4dbd7e5 67 else if (box == _touchBox->hitBox())
richardparker 3:24fbf4dbd7e5 68 {
richardparker 3:24fbf4dbd7e5 69 _touch.calibrate();
richardparker 3:24fbf4dbd7e5 70 _drawPortal();
richardparker 3:24fbf4dbd7e5 71 nextState = EASettings::STATE_PORTAL;
richardparker 3:24fbf4dbd7e5 72 }
richardparker 3:24fbf4dbd7e5 73 else if (box == _dateBox->hitBox())
richardparker 3:24fbf4dbd7e5 74 {
richardparker 3:24fbf4dbd7e5 75 _drawDate();
richardparker 3:24fbf4dbd7e5 76 _state = EASettings::STATE_DATE_SECOND;
richardparker 3:24fbf4dbd7e5 77 nextState = _nextDate();
richardparker 3:24fbf4dbd7e5 78 } else {
richardparker 3:24fbf4dbd7e5 79 _drawPortal();
richardparker 3:24fbf4dbd7e5 80 nextState = EASettings::STATE_PORTAL;
richardparker 3:24fbf4dbd7e5 81 }
richardparker 3:24fbf4dbd7e5 82 break;
richardparker 3:24fbf4dbd7e5 83 case EASettings::STATE_DATE_DAY:
richardparker 3:24fbf4dbd7e5 84 case EASettings::STATE_DATE_MONTH:
richardparker 3:24fbf4dbd7e5 85 case EASettings::STATE_DATE_YEAR:
richardparker 3:24fbf4dbd7e5 86 case EASettings::STATE_DATE_HOUR:
richardparker 3:24fbf4dbd7e5 87 case EASettings::STATE_DATE_MINUTE:
richardparker 3:24fbf4dbd7e5 88 case EASettings::STATE_DATE_SECOND:
richardparker 3:24fbf4dbd7e5 89 if (box == _returnBox->hitBox())
richardparker 3:24fbf4dbd7e5 90 {
richardparker 3:24fbf4dbd7e5 91 _drawPortal();
richardparker 3:24fbf4dbd7e5 92 nextState = EASettings::STATE_PORTAL;
richardparker 3:24fbf4dbd7e5 93 }
richardparker 3:24fbf4dbd7e5 94 else if (box == _nextBox->hitBox())
richardparker 3:24fbf4dbd7e5 95 {
richardparker 3:24fbf4dbd7e5 96 nextState = _nextDate();
richardparker 3:24fbf4dbd7e5 97 }
richardparker 3:24fbf4dbd7e5 98 else if (box == _prevBox->hitBox())
richardparker 3:24fbf4dbd7e5 99 {
richardparker 3:24fbf4dbd7e5 100 nextState = _prevDate();
richardparker 3:24fbf4dbd7e5 101 }
richardparker 3:24fbf4dbd7e5 102 else if (box == _incBox->hitBox())
richardparker 3:24fbf4dbd7e5 103 {
richardparker 3:24fbf4dbd7e5 104 nextState = _incDate();
richardparker 3:24fbf4dbd7e5 105 }
richardparker 3:24fbf4dbd7e5 106 else if (box == _decBox->hitBox())
richardparker 3:24fbf4dbd7e5 107 {
richardparker 3:24fbf4dbd7e5 108 nextState = _decDate();
richardparker 3:24fbf4dbd7e5 109 } else {
richardparker 3:24fbf4dbd7e5 110 _drawPortal();
richardparker 3:24fbf4dbd7e5 111 nextState = EASettings::STATE_PORTAL;
richardparker 3:24fbf4dbd7e5 112 }
richardparker 3:24fbf4dbd7e5 113 _enableDateButtons();
richardparker 3:24fbf4dbd7e5 114 break;
richardparker 3:24fbf4dbd7e5 115 default:
richardparker 3:24fbf4dbd7e5 116 nextState = EASettings::STATE_ENDED;
richardparker 3:24fbf4dbd7e5 117 break;
richardparker 3:24fbf4dbd7e5 118 }
richardparker 3:24fbf4dbd7e5 119
richardparker 3:24fbf4dbd7e5 120 _state = nextState;
richardparker 3:24fbf4dbd7e5 121 }
richardparker 3:24fbf4dbd7e5 122
richardparker 3:24fbf4dbd7e5 123 void EASettings::_disableHitBoxs()
richardparker 3:24fbf4dbd7e5 124 {
richardparker 3:24fbf4dbd7e5 125 if (_launchBox != NULL)
richardparker 3:24fbf4dbd7e5 126 {
richardparker 3:24fbf4dbd7e5 127 _launchBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 128 }
richardparker 3:24fbf4dbd7e5 129
richardparker 3:24fbf4dbd7e5 130 if (_returnBox != NULL)
richardparker 3:24fbf4dbd7e5 131 {
richardparker 3:24fbf4dbd7e5 132 _returnBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 133 }
richardparker 3:24fbf4dbd7e5 134
richardparker 3:24fbf4dbd7e5 135 if (_touchBox != NULL)
richardparker 3:24fbf4dbd7e5 136 {
richardparker 3:24fbf4dbd7e5 137 _touchBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 138 }
richardparker 3:24fbf4dbd7e5 139
richardparker 3:24fbf4dbd7e5 140 if (_dateBox != NULL)
richardparker 3:24fbf4dbd7e5 141 {
richardparker 3:24fbf4dbd7e5 142 _dateBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 143 }
richardparker 3:24fbf4dbd7e5 144
richardparker 3:24fbf4dbd7e5 145 if (_compassBox != NULL)
richardparker 3:24fbf4dbd7e5 146 {
richardparker 3:24fbf4dbd7e5 147 _compassBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 148 }
richardparker 3:24fbf4dbd7e5 149
richardparker 3:24fbf4dbd7e5 150 if (_nextBox != NULL)
richardparker 3:24fbf4dbd7e5 151 {
richardparker 3:24fbf4dbd7e5 152 _nextBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 153 }
richardparker 3:24fbf4dbd7e5 154
richardparker 3:24fbf4dbd7e5 155 if (_prevBox != NULL)
richardparker 3:24fbf4dbd7e5 156 {
richardparker 3:24fbf4dbd7e5 157 _prevBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 158 }
richardparker 3:24fbf4dbd7e5 159
richardparker 3:24fbf4dbd7e5 160 if (_incBox != NULL)
richardparker 3:24fbf4dbd7e5 161 {
richardparker 3:24fbf4dbd7e5 162 _incBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 163 }
richardparker 3:24fbf4dbd7e5 164
richardparker 3:24fbf4dbd7e5 165 if (_decBox != NULL)
richardparker 3:24fbf4dbd7e5 166 {
richardparker 3:24fbf4dbd7e5 167 _decBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 168 }
richardparker 3:24fbf4dbd7e5 169 }
richardparker 3:24fbf4dbd7e5 170
richardparker 3:24fbf4dbd7e5 171 void EASettings::_drawLaunchButton()
richardparker 3:24fbf4dbd7e5 172 {
richardparker 3:24fbf4dbd7e5 173 // Setup colours and clear screen to known background.
richardparker 3:24fbf4dbd7e5 174 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 3:24fbf4dbd7e5 175 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 3:24fbf4dbd7e5 176
richardparker 3:24fbf4dbd7e5 177 EABrush brush = _lcd.brush();
richardparker 3:24fbf4dbd7e5 178 EAPen pen = _lcd.pen();
richardparker 3:24fbf4dbd7e5 179
richardparker 3:24fbf4dbd7e5 180 brush.setColor(black);
richardparker 3:24fbf4dbd7e5 181 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 182
richardparker 3:24fbf4dbd7e5 183 pen.setColor(white);
richardparker 3:24fbf4dbd7e5 184 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 185
richardparker 3:24fbf4dbd7e5 186 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 187 if (_launchBox == NULL)
richardparker 3:24fbf4dbd7e5 188 {
richardparker 3:24fbf4dbd7e5 189 _launchBox = new EAButton(_manager, _lcd.width()-size(), _lcd.height()-size(), size(), size(), "S", this);
richardparker 3:24fbf4dbd7e5 190 } else {
richardparker 3:24fbf4dbd7e5 191 _launchBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 192 }
richardparker 3:24fbf4dbd7e5 193 _launchBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 194 }
richardparker 3:24fbf4dbd7e5 195
richardparker 3:24fbf4dbd7e5 196 void EASettings::_drawPortal()
richardparker 3:24fbf4dbd7e5 197 {
richardparker 3:24fbf4dbd7e5 198 // Setup colours and clear screen to known background.
richardparker 3:24fbf4dbd7e5 199 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 3:24fbf4dbd7e5 200 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 3:24fbf4dbd7e5 201
richardparker 3:24fbf4dbd7e5 202 EAFont font;
richardparker 3:24fbf4dbd7e5 203 EABrush brush = _lcd.brush();
richardparker 3:24fbf4dbd7e5 204 EAPen pen = _lcd.pen();
richardparker 3:24fbf4dbd7e5 205
richardparker 3:24fbf4dbd7e5 206 font.load("/local/large.fnt");
richardparker 3:24fbf4dbd7e5 207 _lcd.setFont(font);
richardparker 3:24fbf4dbd7e5 208
richardparker 3:24fbf4dbd7e5 209 brush.setColor(black);
richardparker 3:24fbf4dbd7e5 210 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 211
richardparker 3:24fbf4dbd7e5 212 pen.setColor(white);
richardparker 3:24fbf4dbd7e5 213 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 214
richardparker 3:24fbf4dbd7e5 215 // Clear the screen to draw the buttons on.
richardparker 3:24fbf4dbd7e5 216 _lcd.clearScreen();
richardparker 3:24fbf4dbd7e5 217
richardparker 3:24fbf4dbd7e5 218 // Draw title.
richardparker 3:24fbf4dbd7e5 219 _lcd.drawText((_lcd.width()/2)-(size()*2)+50, 10, "Settings");
richardparker 3:24fbf4dbd7e5 220
richardparker 3:24fbf4dbd7e5 221 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 222 if (_compassBox == NULL)
richardparker 3:24fbf4dbd7e5 223 {
richardparker 3:24fbf4dbd7e5 224 _compassBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*5), size()*4, size(), "Calibrate Compass", this);
richardparker 3:24fbf4dbd7e5 225 } else {
richardparker 3:24fbf4dbd7e5 226 _compassBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 227 }
richardparker 3:24fbf4dbd7e5 228 _compassBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 229
richardparker 3:24fbf4dbd7e5 230 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 231 if (_dateBox == NULL)
richardparker 3:24fbf4dbd7e5 232 {
richardparker 3:24fbf4dbd7e5 233 _dateBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*4), size()*4, size(), "Set Date", this);
richardparker 3:24fbf4dbd7e5 234 } else {
richardparker 3:24fbf4dbd7e5 235 _dateBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 236 }
richardparker 3:24fbf4dbd7e5 237 _dateBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 238
richardparker 3:24fbf4dbd7e5 239 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 240 if (_touchBox == NULL)
richardparker 3:24fbf4dbd7e5 241 {
richardparker 3:24fbf4dbd7e5 242 _touchBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*3), size()*4, size(), "Touch Calibration", this);
richardparker 3:24fbf4dbd7e5 243 } else {
richardparker 3:24fbf4dbd7e5 244 _touchBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 245 }
richardparker 3:24fbf4dbd7e5 246 _touchBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 247
richardparker 3:24fbf4dbd7e5 248 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 249 if (_returnBox == NULL)
richardparker 3:24fbf4dbd7e5 250 {
richardparker 3:24fbf4dbd7e5 251 _returnBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*2), size()*4, size(), "Return...", this);
richardparker 3:24fbf4dbd7e5 252 } else {
richardparker 3:24fbf4dbd7e5 253 _returnBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 254 }
richardparker 3:24fbf4dbd7e5 255 _returnBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 256
richardparker 3:24fbf4dbd7e5 257 }
richardparker 3:24fbf4dbd7e5 258
richardparker 3:24fbf4dbd7e5 259 void EASettings::_drawDate()
richardparker 3:24fbf4dbd7e5 260 {
richardparker 3:24fbf4dbd7e5 261 // Setup colours and clear screen to known background.
richardparker 3:24fbf4dbd7e5 262 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 3:24fbf4dbd7e5 263 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 3:24fbf4dbd7e5 264
richardparker 3:24fbf4dbd7e5 265 EAFont font;
richardparker 3:24fbf4dbd7e5 266 EABrush brush = _lcd.brush();
richardparker 3:24fbf4dbd7e5 267 EAPen pen = _lcd.pen();
richardparker 3:24fbf4dbd7e5 268
richardparker 3:24fbf4dbd7e5 269 font.load("/local/large.fnt");
richardparker 3:24fbf4dbd7e5 270 _lcd.setFont(font);
richardparker 3:24fbf4dbd7e5 271
richardparker 3:24fbf4dbd7e5 272 brush.setColor(black);
richardparker 3:24fbf4dbd7e5 273 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 274
richardparker 3:24fbf4dbd7e5 275 pen.setColor(white);
richardparker 3:24fbf4dbd7e5 276 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 277
richardparker 3:24fbf4dbd7e5 278 // Clear the screen to draw the buttons on.
richardparker 3:24fbf4dbd7e5 279 _lcd.clearScreen();
richardparker 3:24fbf4dbd7e5 280
richardparker 3:24fbf4dbd7e5 281 // Draw title.
richardparker 3:24fbf4dbd7e5 282 _lcd.drawText((_lcd.width()/2)-(size()*2)+50, 10, "Date/Time");
richardparker 3:24fbf4dbd7e5 283
richardparker 3:24fbf4dbd7e5 284 // Draw date.
richardparker 3:24fbf4dbd7e5 285 char buffer[5];
richardparker 3:24fbf4dbd7e5 286 short y = 60;
richardparker 3:24fbf4dbd7e5 287 short x = (_lcd.width()/2)-(size()*2)-25;
richardparker 3:24fbf4dbd7e5 288
richardparker 3:24fbf4dbd7e5 289 // Update cached time.
richardparker 3:24fbf4dbd7e5 290 time_t seconds = time(NULL);
richardparker 3:24fbf4dbd7e5 291 _time = localtime(&seconds);
richardparker 3:24fbf4dbd7e5 292
richardparker 3:24fbf4dbd7e5 293 // Put the day of the month into the buffer and display.
richardparker 3:24fbf4dbd7e5 294 sprintf(buffer, "%02d", _time->tm_mday);
richardparker 3:24fbf4dbd7e5 295 _lcd.drawText(x, y, buffer);
richardparker 3:24fbf4dbd7e5 296
richardparker 3:24fbf4dbd7e5 297 // Display spacer.
richardparker 3:24fbf4dbd7e5 298 _lcd.drawText(x+20, y, "/");
richardparker 3:24fbf4dbd7e5 299
richardparker 3:24fbf4dbd7e5 300 // Put the month into the buffer and display.
richardparker 3:24fbf4dbd7e5 301 sprintf(buffer, "%02d", _time->tm_mon+1);
richardparker 3:24fbf4dbd7e5 302 _lcd.drawText(x+30, y, buffer);
richardparker 3:24fbf4dbd7e5 303
richardparker 3:24fbf4dbd7e5 304 // Display spacer.
richardparker 3:24fbf4dbd7e5 305 _lcd.drawText(x+50, y, "/");
richardparker 3:24fbf4dbd7e5 306
richardparker 3:24fbf4dbd7e5 307 // Put the month into the buffer and display.
richardparker 3:24fbf4dbd7e5 308 sprintf(buffer, "%04d", _time->tm_year+1900);
richardparker 3:24fbf4dbd7e5 309 _lcd.drawText(x+60, y, buffer);
richardparker 3:24fbf4dbd7e5 310
richardparker 3:24fbf4dbd7e5 311 // Put the hour into the buffer and display.
richardparker 3:24fbf4dbd7e5 312 sprintf(buffer, "%02d", _time->tm_hour);
richardparker 3:24fbf4dbd7e5 313 _lcd.drawText(x+120, y, buffer);
richardparker 3:24fbf4dbd7e5 314
richardparker 3:24fbf4dbd7e5 315 // Display spacer.
richardparker 3:24fbf4dbd7e5 316 _lcd.drawText(x+140, y, ":");
richardparker 3:24fbf4dbd7e5 317
richardparker 3:24fbf4dbd7e5 318 // Put the minute into the buffer and display.
richardparker 3:24fbf4dbd7e5 319 sprintf(buffer, "%02d", _time->tm_min);
richardparker 3:24fbf4dbd7e5 320 _lcd.drawText(x+150, y, buffer);
richardparker 3:24fbf4dbd7e5 321
richardparker 3:24fbf4dbd7e5 322 // Display spacer.
richardparker 3:24fbf4dbd7e5 323 _lcd.drawText(x+170, y, ":");
richardparker 3:24fbf4dbd7e5 324
richardparker 3:24fbf4dbd7e5 325 // Put the minute into the buffer and display.
richardparker 3:24fbf4dbd7e5 326 sprintf(buffer, "%02d", _time->tm_sec);
richardparker 3:24fbf4dbd7e5 327 _lcd.drawText(x+180, y, buffer);
richardparker 3:24fbf4dbd7e5 328
richardparker 3:24fbf4dbd7e5 329 _enableDateButtons();
richardparker 3:24fbf4dbd7e5 330 _prevBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 331 _nextBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 332 _decBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 333 _incBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 334 _returnBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 335 }
richardparker 3:24fbf4dbd7e5 336
richardparker 3:24fbf4dbd7e5 337 void EASettings::_enableDateButtons()
richardparker 3:24fbf4dbd7e5 338 {
richardparker 3:24fbf4dbd7e5 339 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 340 if (_prevBox == NULL)
richardparker 3:24fbf4dbd7e5 341 {
richardparker 3:24fbf4dbd7e5 342 _prevBox = new EAButton(_manager, (_lcd.width()/2)-(size()*3), _lcd.height()-(size()*3.5), size(), size(), "<", this);
richardparker 3:24fbf4dbd7e5 343 } else {
richardparker 3:24fbf4dbd7e5 344 _prevBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 345 }
richardparker 3:24fbf4dbd7e5 346
richardparker 3:24fbf4dbd7e5 347 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 348 if (_nextBox == NULL)
richardparker 3:24fbf4dbd7e5 349 {
richardparker 3:24fbf4dbd7e5 350 _nextBox = new EAButton(_manager, (_lcd.width()/2)-(size()*1.5), _lcd.height()-(size()*3.5), size(), size(), ">", this);
richardparker 3:24fbf4dbd7e5 351 } else {
richardparker 3:24fbf4dbd7e5 352 _nextBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 353 }
richardparker 3:24fbf4dbd7e5 354
richardparker 3:24fbf4dbd7e5 355 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 356 if (_decBox == NULL)
richardparker 3:24fbf4dbd7e5 357 {
richardparker 3:24fbf4dbd7e5 358 _decBox = new EAButton(_manager, (_lcd.width()/2)+(size()*0.5), _lcd.height()-(size()*3.5), size(), size(), "-", this);
richardparker 3:24fbf4dbd7e5 359 } else {
richardparker 3:24fbf4dbd7e5 360 _decBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 361 }
richardparker 3:24fbf4dbd7e5 362
richardparker 3:24fbf4dbd7e5 363 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 364 if (_incBox == NULL)
richardparker 3:24fbf4dbd7e5 365 {
richardparker 3:24fbf4dbd7e5 366 _incBox = new EAButton(_manager, (_lcd.width()/2)+(size()*2), _lcd.height()-(size()*3.5), size(), size(), "+", this);
richardparker 3:24fbf4dbd7e5 367 } else {
richardparker 3:24fbf4dbd7e5 368 _incBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 369 }
richardparker 3:24fbf4dbd7e5 370
richardparker 3:24fbf4dbd7e5 371 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 372 if (_returnBox == NULL)
richardparker 3:24fbf4dbd7e5 373 {
richardparker 3:24fbf4dbd7e5 374 _returnBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*2), size()*4, size(), "Return...", this);
richardparker 3:24fbf4dbd7e5 375 } else {
richardparker 3:24fbf4dbd7e5 376 _returnBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 377 }
richardparker 3:24fbf4dbd7e5 378 }
richardparker 3:24fbf4dbd7e5 379
richardparker 3:24fbf4dbd7e5 380 EASettings::State EASettings::_incDate()
richardparker 3:24fbf4dbd7e5 381 {
richardparker 3:24fbf4dbd7e5 382 return state();
richardparker 3:24fbf4dbd7e5 383 }
richardparker 3:24fbf4dbd7e5 384
richardparker 3:24fbf4dbd7e5 385 EASettings::State EASettings::_decDate()
richardparker 3:24fbf4dbd7e5 386 {
richardparker 3:24fbf4dbd7e5 387
richardparker 3:24fbf4dbd7e5 388 return state();
richardparker 3:24fbf4dbd7e5 389 }
richardparker 3:24fbf4dbd7e5 390
richardparker 3:24fbf4dbd7e5 391 EASettings::State EASettings::_nextDate()
richardparker 3:24fbf4dbd7e5 392 {
richardparker 3:24fbf4dbd7e5 393 short y = 60;
richardparker 3:24fbf4dbd7e5 394 short x = (_lcd.width()/2)-(size()*2)-25;
richardparker 3:24fbf4dbd7e5 395
richardparker 3:24fbf4dbd7e5 396 EASettings::State nextState = EASettings::STATE_IDLE;
richardparker 3:24fbf4dbd7e5 397
richardparker 3:24fbf4dbd7e5 398 // Setup colours and clear screen to known background.
richardparker 3:24fbf4dbd7e5 399 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 3:24fbf4dbd7e5 400 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 3:24fbf4dbd7e5 401
richardparker 3:24fbf4dbd7e5 402 EABrush brush = _lcd.brush();
richardparker 3:24fbf4dbd7e5 403 EAPen pen = _lcd.pen();
richardparker 3:24fbf4dbd7e5 404
richardparker 3:24fbf4dbd7e5 405 brush.setColor(white);
richardparker 3:24fbf4dbd7e5 406 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 407
richardparker 3:24fbf4dbd7e5 408 pen.setColor(black);
richardparker 3:24fbf4dbd7e5 409 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 410
richardparker 3:24fbf4dbd7e5 411 // Now clear selection box.
richardparker 3:24fbf4dbd7e5 412 switch (state())
richardparker 3:24fbf4dbd7e5 413 {
richardparker 3:24fbf4dbd7e5 414 default:
richardparker 3:24fbf4dbd7e5 415 case EASettings::STATE_DATE_DAY:
richardparker 3:24fbf4dbd7e5 416 _lcd.drawRect(x, y, 20, 20);
richardparker 3:24fbf4dbd7e5 417 break;
richardparker 3:24fbf4dbd7e5 418 case EASettings::STATE_DATE_MONTH:
richardparker 3:24fbf4dbd7e5 419 _lcd.drawRect(x+30, y, 20, 20);
richardparker 3:24fbf4dbd7e5 420 break;
richardparker 3:24fbf4dbd7e5 421 case EASettings::STATE_DATE_YEAR:
richardparker 3:24fbf4dbd7e5 422 _lcd.drawRect(x+60, y, 40, 20);
richardparker 3:24fbf4dbd7e5 423 break;
richardparker 3:24fbf4dbd7e5 424 case EASettings::STATE_DATE_HOUR:
richardparker 3:24fbf4dbd7e5 425 _lcd.drawRect(x+120, y, 20, 20);
richardparker 3:24fbf4dbd7e5 426 break;
richardparker 3:24fbf4dbd7e5 427 case EASettings::STATE_DATE_MINUTE:
richardparker 3:24fbf4dbd7e5 428 _lcd.drawRect(x+150, y, 20, 20);
richardparker 3:24fbf4dbd7e5 429 break;
richardparker 3:24fbf4dbd7e5 430 case EASettings::STATE_DATE_SECOND:
richardparker 3:24fbf4dbd7e5 431 _lcd.drawRect(x+180, y, 20, 20);
richardparker 3:24fbf4dbd7e5 432 break;
richardparker 3:24fbf4dbd7e5 433 }
richardparker 3:24fbf4dbd7e5 434
richardparker 3:24fbf4dbd7e5 435 brush.setColor(black);
richardparker 3:24fbf4dbd7e5 436 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 437
richardparker 3:24fbf4dbd7e5 438 pen.setColor(white);
richardparker 3:24fbf4dbd7e5 439 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 440
richardparker 3:24fbf4dbd7e5 441 // Now draw selection box.
richardparker 3:24fbf4dbd7e5 442 switch (state())
richardparker 3:24fbf4dbd7e5 443 {
richardparker 3:24fbf4dbd7e5 444 default:
richardparker 3:24fbf4dbd7e5 445 case EASettings::STATE_DATE_DAY:
richardparker 3:24fbf4dbd7e5 446 nextState = EASettings::STATE_DATE_MONTH;
richardparker 3:24fbf4dbd7e5 447 _lcd.drawRect(x+30, y, 20, 20);
richardparker 3:24fbf4dbd7e5 448 break;
richardparker 3:24fbf4dbd7e5 449 case EASettings::STATE_DATE_MONTH:
richardparker 3:24fbf4dbd7e5 450 nextState = EASettings::STATE_DATE_YEAR;
richardparker 3:24fbf4dbd7e5 451 _lcd.drawRect(x+60, y, 40, 20);
richardparker 3:24fbf4dbd7e5 452 break;
richardparker 3:24fbf4dbd7e5 453 case EASettings::STATE_DATE_YEAR:
richardparker 3:24fbf4dbd7e5 454 nextState = EASettings::STATE_DATE_HOUR;
richardparker 3:24fbf4dbd7e5 455 _lcd.drawRect(x+120, y, 20, 20);
richardparker 3:24fbf4dbd7e5 456 break;
richardparker 3:24fbf4dbd7e5 457 case EASettings::STATE_DATE_HOUR:
richardparker 3:24fbf4dbd7e5 458 nextState = EASettings::STATE_DATE_MINUTE;
richardparker 3:24fbf4dbd7e5 459 _lcd.drawRect(x+150, y, 20, 20);
richardparker 3:24fbf4dbd7e5 460 break;
richardparker 3:24fbf4dbd7e5 461 case EASettings::STATE_DATE_MINUTE:
richardparker 3:24fbf4dbd7e5 462 nextState = EASettings::STATE_DATE_SECOND;
richardparker 3:24fbf4dbd7e5 463 _lcd.drawRect(x+180, y, 20, 20);
richardparker 3:24fbf4dbd7e5 464 break;
richardparker 3:24fbf4dbd7e5 465 case EASettings::STATE_DATE_SECOND:
richardparker 3:24fbf4dbd7e5 466 nextState = EASettings::STATE_DATE_DAY;
richardparker 3:24fbf4dbd7e5 467 _lcd.drawRect(x, y, 20, 20);
richardparker 3:24fbf4dbd7e5 468 break;
richardparker 3:24fbf4dbd7e5 469 }
richardparker 3:24fbf4dbd7e5 470
richardparker 3:24fbf4dbd7e5 471 return nextState;
richardparker 3:24fbf4dbd7e5 472 }
richardparker 3:24fbf4dbd7e5 473
richardparker 3:24fbf4dbd7e5 474 EASettings::State EASettings::_prevDate()
richardparker 3:24fbf4dbd7e5 475 {
richardparker 3:24fbf4dbd7e5 476 short y = 60;
richardparker 3:24fbf4dbd7e5 477 short x = (_lcd.width()/2)-(size()*2)-25;
richardparker 3:24fbf4dbd7e5 478
richardparker 3:24fbf4dbd7e5 479 EASettings::State prevState = EASettings::STATE_IDLE;
richardparker 3:24fbf4dbd7e5 480
richardparker 3:24fbf4dbd7e5 481 // Setup colours and clear screen to known background.
richardparker 3:24fbf4dbd7e5 482 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 3:24fbf4dbd7e5 483 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 3:24fbf4dbd7e5 484
richardparker 3:24fbf4dbd7e5 485 EABrush brush = _lcd.brush();
richardparker 3:24fbf4dbd7e5 486 EAPen pen = _lcd.pen();
richardparker 3:24fbf4dbd7e5 487
richardparker 3:24fbf4dbd7e5 488 brush.setColor(white);
richardparker 3:24fbf4dbd7e5 489 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 490
richardparker 3:24fbf4dbd7e5 491 pen.setColor(black);
richardparker 3:24fbf4dbd7e5 492 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 493
richardparker 3:24fbf4dbd7e5 494 // Now clear selection box.
richardparker 3:24fbf4dbd7e5 495 switch (state())
richardparker 3:24fbf4dbd7e5 496 {
richardparker 3:24fbf4dbd7e5 497 default:
richardparker 3:24fbf4dbd7e5 498 case EASettings::STATE_DATE_DAY:
richardparker 3:24fbf4dbd7e5 499 _lcd.drawRect(x, y, 20, 20);
richardparker 3:24fbf4dbd7e5 500 break;
richardparker 3:24fbf4dbd7e5 501 case EASettings::STATE_DATE_MONTH:
richardparker 3:24fbf4dbd7e5 502 _lcd.drawRect(x+30, y, 20, 20);
richardparker 3:24fbf4dbd7e5 503 break;
richardparker 3:24fbf4dbd7e5 504 case EASettings::STATE_DATE_YEAR:
richardparker 3:24fbf4dbd7e5 505 _lcd.drawRect(x+60, y, 40, 20);
richardparker 3:24fbf4dbd7e5 506 break;
richardparker 3:24fbf4dbd7e5 507 case EASettings::STATE_DATE_HOUR:
richardparker 3:24fbf4dbd7e5 508 _lcd.drawRect(x+120, y, 20, 20);
richardparker 3:24fbf4dbd7e5 509 break;
richardparker 3:24fbf4dbd7e5 510 case EASettings::STATE_DATE_MINUTE:
richardparker 3:24fbf4dbd7e5 511 _lcd.drawRect(x+150, y, 20, 20);
richardparker 3:24fbf4dbd7e5 512 break;
richardparker 3:24fbf4dbd7e5 513 case EASettings::STATE_DATE_SECOND:
richardparker 3:24fbf4dbd7e5 514 _lcd.drawRect(x+180, y, 20, 20);
richardparker 3:24fbf4dbd7e5 515 break;
richardparker 3:24fbf4dbd7e5 516 }
richardparker 3:24fbf4dbd7e5 517
richardparker 3:24fbf4dbd7e5 518 brush.setColor(black);
richardparker 3:24fbf4dbd7e5 519 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 520
richardparker 3:24fbf4dbd7e5 521 pen.setColor(white);
richardparker 3:24fbf4dbd7e5 522 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 523
richardparker 3:24fbf4dbd7e5 524 // Now draw selection box.
richardparker 3:24fbf4dbd7e5 525 switch (state())
richardparker 3:24fbf4dbd7e5 526 {
richardparker 3:24fbf4dbd7e5 527 default:
richardparker 3:24fbf4dbd7e5 528 case EASettings::STATE_DATE_DAY:
richardparker 3:24fbf4dbd7e5 529 prevState = EASettings::STATE_DATE_SECOND;
richardparker 3:24fbf4dbd7e5 530 _lcd.drawRect(x+180, y, 20, 20);
richardparker 3:24fbf4dbd7e5 531 break;
richardparker 3:24fbf4dbd7e5 532 case EASettings::STATE_DATE_MONTH:
richardparker 3:24fbf4dbd7e5 533 prevState = EASettings::STATE_DATE_DAY;
richardparker 3:24fbf4dbd7e5 534 _lcd.drawRect(x, y, 20, 20);
richardparker 3:24fbf4dbd7e5 535 break;
richardparker 3:24fbf4dbd7e5 536 case EASettings::STATE_DATE_YEAR:
richardparker 3:24fbf4dbd7e5 537 prevState = EASettings::STATE_DATE_MONTH;
richardparker 3:24fbf4dbd7e5 538 _lcd.drawRect(x+30, y, 20, 20);
richardparker 3:24fbf4dbd7e5 539 break;
richardparker 3:24fbf4dbd7e5 540 case EASettings::STATE_DATE_HOUR:
richardparker 3:24fbf4dbd7e5 541 prevState = EASettings::STATE_DATE_YEAR;
richardparker 3:24fbf4dbd7e5 542 _lcd.drawRect(x+60, y, 40, 20);
richardparker 3:24fbf4dbd7e5 543 break;
richardparker 3:24fbf4dbd7e5 544 case EASettings::STATE_DATE_MINUTE:
richardparker 3:24fbf4dbd7e5 545 prevState = EASettings::STATE_DATE_HOUR;
richardparker 3:24fbf4dbd7e5 546 _lcd.drawRect(x+120, y, 20, 20);
richardparker 3:24fbf4dbd7e5 547 break;
richardparker 3:24fbf4dbd7e5 548 case EASettings::STATE_DATE_SECOND:
richardparker 3:24fbf4dbd7e5 549 prevState = EASettings::STATE_DATE_MINUTE;
richardparker 3:24fbf4dbd7e5 550 _lcd.drawRect(x+150, y, 20, 20);
richardparker 3:24fbf4dbd7e5 551 break;
richardparker 3:24fbf4dbd7e5 552 }
richardparker 3:24fbf4dbd7e5 553
richardparker 3:24fbf4dbd7e5 554 return prevState;
richardparker 3:24fbf4dbd7e5 555 }
richardparker 3:24fbf4dbd7e5 556