can't push chnages :(

Fork of FBRDash by Michael Allan

Committer:
intrinseca
Date:
Mon Jun 25 21:01:02 2012 +0000
Revision:
1:b3907b8d9f65
Child:
2:825f572902c6
Prototype before adding full CAN comms

Who changed what in which revision?

UserRevisionLine numberNew contents of line
intrinseca 1:b3907b8d9f65 1 #include "Menu.h"
intrinseca 1:b3907b8d9f65 2 #include "mbed.h"
intrinseca 1:b3907b8d9f65 3 #include <string>
intrinseca 1:b3907b8d9f65 4
intrinseca 1:b3907b8d9f65 5 Menu::Menu(TextLCD* _screen, PinName ok, PinName left, PinName right)
intrinseca 1:b3907b8d9f65 6 {
intrinseca 1:b3907b8d9f65 7 screen = _screen;
intrinseca 1:b3907b8d9f65 8
intrinseca 1:b3907b8d9f65 9 entryCount = 0;
intrinseca 1:b3907b8d9f65 10
intrinseca 1:b3907b8d9f65 11 position = 0;
intrinseca 1:b3907b8d9f65 12
intrinseca 1:b3907b8d9f65 13 btnOK = new PinDetect(ok, PullUp);
intrinseca 1:b3907b8d9f65 14 btnLeft = new PinDetect(left, PullUp);
intrinseca 1:b3907b8d9f65 15 btnRight = new PinDetect(right, PullUp);
intrinseca 1:b3907b8d9f65 16
intrinseca 1:b3907b8d9f65 17 btnOK->attach_deasserted(this, &Menu::enter);
intrinseca 1:b3907b8d9f65 18 btnOK->attach_asserted_held(this, &Menu::done);
intrinseca 1:b3907b8d9f65 19
intrinseca 1:b3907b8d9f65 20 btnLeft->attach_asserted(this, &Menu::left);
intrinseca 1:b3907b8d9f65 21 btnLeft->attach_asserted_held(this, &Menu::leftHeld);
intrinseca 1:b3907b8d9f65 22 btnLeft->attach_deasserted(this, &Menu::cancelLeftHeld);
intrinseca 1:b3907b8d9f65 23
intrinseca 1:b3907b8d9f65 24 btnRight->attach_asserted(this, &Menu::right);
intrinseca 1:b3907b8d9f65 25 btnRight->attach_asserted_held(this, &Menu::rightHeld);
intrinseca 1:b3907b8d9f65 26 btnRight->attach_deasserted(this, &Menu::cancelRightHeld);
intrinseca 1:b3907b8d9f65 27
intrinseca 1:b3907b8d9f65 28 btnOK->setAssertValue(0);
intrinseca 1:b3907b8d9f65 29 btnLeft->setAssertValue(0);
intrinseca 1:b3907b8d9f65 30 btnRight->setAssertValue(0);
intrinseca 1:b3907b8d9f65 31
intrinseca 1:b3907b8d9f65 32 btnOK->setSampleFrequency();
intrinseca 1:b3907b8d9f65 33 btnLeft->setSampleFrequency();
intrinseca 1:b3907b8d9f65 34 btnRight->setSampleFrequency();
intrinseca 1:b3907b8d9f65 35
intrinseca 1:b3907b8d9f65 36 ignoreNextEnter = false;
intrinseca 1:b3907b8d9f65 37 }
intrinseca 1:b3907b8d9f65 38
intrinseca 1:b3907b8d9f65 39 void Menu::refresh()
intrinseca 1:b3907b8d9f65 40 {
intrinseca 1:b3907b8d9f65 41 char labelLeft = (!edit & position > 0)?leftArrow:' ';
intrinseca 1:b3907b8d9f65 42 char labelRight = (!edit & position < entryCount)?rightArrow:' ';
intrinseca 1:b3907b8d9f65 43 char editIndic = (entries[position]->editable)?'*':' ';
intrinseca 1:b3907b8d9f65 44
intrinseca 1:b3907b8d9f65 45 screen->locate(0, 0);
intrinseca 1:b3907b8d9f65 46
intrinseca 1:b3907b8d9f65 47 if(position <= entryCount - 1)
intrinseca 1:b3907b8d9f65 48 {
intrinseca 1:b3907b8d9f65 49 screen->printf("%c%-14s%c", labelLeft, (entries[position])->label.c_str(), labelRight);
intrinseca 1:b3907b8d9f65 50
intrinseca 1:b3907b8d9f65 51 char editLeft = (edit)?'-':editIndic;
intrinseca 1:b3907b8d9f65 52 char editRight = (edit)?'+':' ';
intrinseca 1:b3907b8d9f65 53
intrinseca 1:b3907b8d9f65 54 screen->putc(editLeft);
intrinseca 1:b3907b8d9f65 55 screen->printf(entries[position]->getFormatted().c_str());
intrinseca 1:b3907b8d9f65 56 screen->locate(15, 1);
intrinseca 1:b3907b8d9f65 57 screen->putc(editRight);
intrinseca 1:b3907b8d9f65 58 }
intrinseca 1:b3907b8d9f65 59 else
intrinseca 1:b3907b8d9f65 60 {
intrinseca 1:b3907b8d9f65 61 screen->printf("%cReturn ", leftArrow);
intrinseca 1:b3907b8d9f65 62 }
intrinseca 1:b3907b8d9f65 63 }
intrinseca 1:b3907b8d9f65 64
intrinseca 1:b3907b8d9f65 65 void Menu::enter()
intrinseca 1:b3907b8d9f65 66 {
intrinseca 1:b3907b8d9f65 67 if(!display && !ignoreNextEnter)
intrinseca 1:b3907b8d9f65 68 {
intrinseca 1:b3907b8d9f65 69 display = true;
intrinseca 1:b3907b8d9f65 70 edit = false;
intrinseca 1:b3907b8d9f65 71 }
intrinseca 1:b3907b8d9f65 72 else
intrinseca 1:b3907b8d9f65 73 {
intrinseca 1:b3907b8d9f65 74 if(position <= entryCount - 1)
intrinseca 1:b3907b8d9f65 75 {
intrinseca 1:b3907b8d9f65 76 if(entries[position]->editable)
intrinseca 1:b3907b8d9f65 77 edit = !edit;
intrinseca 1:b3907b8d9f65 78 }
intrinseca 1:b3907b8d9f65 79 else
intrinseca 1:b3907b8d9f65 80 {
intrinseca 1:b3907b8d9f65 81 position = 0;
intrinseca 1:b3907b8d9f65 82 done();
intrinseca 1:b3907b8d9f65 83 }
intrinseca 1:b3907b8d9f65 84 }
intrinseca 1:b3907b8d9f65 85
intrinseca 1:b3907b8d9f65 86 ignoreNextEnter = false;
intrinseca 1:b3907b8d9f65 87 }
intrinseca 1:b3907b8d9f65 88
intrinseca 1:b3907b8d9f65 89 void Menu::done()
intrinseca 1:b3907b8d9f65 90 {
intrinseca 1:b3907b8d9f65 91 display = false;
intrinseca 1:b3907b8d9f65 92 ignoreNextEnter = true;
intrinseca 1:b3907b8d9f65 93 }
intrinseca 1:b3907b8d9f65 94
intrinseca 1:b3907b8d9f65 95 void Menu::left()
intrinseca 1:b3907b8d9f65 96 {
intrinseca 1:b3907b8d9f65 97 if(!edit && display && position > 0)
intrinseca 1:b3907b8d9f65 98 position--;
intrinseca 1:b3907b8d9f65 99 else if(edit)
intrinseca 1:b3907b8d9f65 100 entries[position]->decrement();
intrinseca 1:b3907b8d9f65 101 }
intrinseca 1:b3907b8d9f65 102
intrinseca 1:b3907b8d9f65 103 void Menu::leftHeld()
intrinseca 1:b3907b8d9f65 104 {
intrinseca 1:b3907b8d9f65 105 left();
intrinseca 1:b3907b8d9f65 106 leftHeldTimeout.attach(this, &Menu::leftHeld, holdRepeatTime);
intrinseca 1:b3907b8d9f65 107 }
intrinseca 1:b3907b8d9f65 108
intrinseca 1:b3907b8d9f65 109 void Menu::cancelLeftHeld()
intrinseca 1:b3907b8d9f65 110 {
intrinseca 1:b3907b8d9f65 111 leftHeldTimeout.detach();
intrinseca 1:b3907b8d9f65 112 }
intrinseca 1:b3907b8d9f65 113
intrinseca 1:b3907b8d9f65 114 void Menu::right()
intrinseca 1:b3907b8d9f65 115 {
intrinseca 1:b3907b8d9f65 116 if(!edit && display && position < entryCount)
intrinseca 1:b3907b8d9f65 117 position++;
intrinseca 1:b3907b8d9f65 118 else if(edit)
intrinseca 1:b3907b8d9f65 119 entries[position]->increment();
intrinseca 1:b3907b8d9f65 120 }
intrinseca 1:b3907b8d9f65 121
intrinseca 1:b3907b8d9f65 122 void Menu::rightHeld()
intrinseca 1:b3907b8d9f65 123 {
intrinseca 1:b3907b8d9f65 124 right();
intrinseca 1:b3907b8d9f65 125 rightHeldTimeout.attach(this, &Menu::rightHeld, holdRepeatTime);
intrinseca 1:b3907b8d9f65 126 }
intrinseca 1:b3907b8d9f65 127
intrinseca 1:b3907b8d9f65 128 void Menu::cancelRightHeld()
intrinseca 1:b3907b8d9f65 129 {
intrinseca 1:b3907b8d9f65 130 rightHeldTimeout.detach();
intrinseca 1:b3907b8d9f65 131 }