ELEC2645 (2018/19) / Mbed 2 deprecated el17ajf

Dependencies:   mbed

Fork of el17ajf by Angus Findlay

Committer:
el17ajf
Date:
Wed Apr 03 20:33:27 2019 +0000
Revision:
21:62d2b5b73160
Parent:
19:370d83a8dc33
Child:
26:baa7077449e7
Moved Menus to Class based system

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el17ajf 17:cc448ab7266f 1 #include "UI.h"
el17ajf 17:cc448ab7266f 2 #include "Graphics.h"
el17ajf 21:62d2b5b73160 3 namespace Menus {
el17ajf 21:62d2b5b73160 4 UI::UI() {
el17ajf 21:62d2b5b73160 5 reset();
el17ajf 21:62d2b5b73160 6 }
el17ajf 21:62d2b5b73160 7
el17ajf 21:62d2b5b73160 8 void UI::reset() {
el17ajf 21:62d2b5b73160 9 buttonCurrentlySelected = 0;
el17ajf 21:62d2b5b73160 10 }
el17ajf 21:62d2b5b73160 11
el17ajf 21:62d2b5b73160 12 UI::~UI() {
el17ajf 21:62d2b5b73160 13
el17ajf 21:62d2b5b73160 14 }
el17ajf 16:3f84f2d7b910 15
el17ajf 21:62d2b5b73160 16 void UI::clear() {
el17ajf 21:62d2b5b73160 17 buttonPressedFrame = false;
el17ajf 21:62d2b5b73160 18 nextYPos = PADDING_Y;
el17ajf 21:62d2b5b73160 19 buttonCurrentlyDrawing = -1;
el17ajf 21:62d2b5b73160 20 }
el17ajf 17:cc448ab7266f 21
el17ajf 21:62d2b5b73160 22 void UI::drawTitle(const char * text) {
el17ajf 21:62d2b5b73160 23 drawLabel(text);
el17ajf 21:62d2b5b73160 24 }
el17ajf 17:cc448ab7266f 25
el17ajf 21:62d2b5b73160 26 void UI::drawLabel(const char * text) {
el17ajf 21:62d2b5b73160 27 Graphics::UI::drawText(PADDING_X, nextY(), text);
el17ajf 21:62d2b5b73160 28 }
el17ajf 21:62d2b5b73160 29
el17ajf 21:62d2b5b73160 30 void UI::newLine() {
el17ajf 21:62d2b5b73160 31 nextY();
el17ajf 21:62d2b5b73160 32 }
el17ajf 17:cc448ab7266f 33
el17ajf 21:62d2b5b73160 34 bool UI::drawAndCheckButton(const char * text) {
el17ajf 21:62d2b5b73160 35 buttonCurrentlyDrawing++;
el17ajf 21:62d2b5b73160 36
el17ajf 21:62d2b5b73160 37 int y = nextY();
el17ajf 21:62d2b5b73160 38
el17ajf 21:62d2b5b73160 39 Graphics::UI::drawText(PADDING_X, y, text);
el17ajf 21:62d2b5b73160 40
el17ajf 21:62d2b5b73160 41 bool selected = buttonCurrentlyDrawing == buttonCurrentlySelected;
el17ajf 21:62d2b5b73160 42
el17ajf 21:62d2b5b73160 43 int wordWidth = strlen(text) * (Graphics::UI::CHAR_WIDTH + Graphics::UI::CHAR_SPACE) - 1;
el17ajf 21:62d2b5b73160 44
el17ajf 21:62d2b5b73160 45 if (selected) {
el17ajf 21:62d2b5b73160 46 Graphics::UI::drawBorder(
el17ajf 21:62d2b5b73160 47 PADDING_X - 2,
el17ajf 21:62d2b5b73160 48 y - 2,
el17ajf 21:62d2b5b73160 49 PADDING_X + wordWidth + 2,
el17ajf 21:62d2b5b73160 50 y + Graphics::UI::CHAR_HEIGHT + 1
el17ajf 21:62d2b5b73160 51 );
el17ajf 21:62d2b5b73160 52 }
el17ajf 18:24ce897024d0 53
el17ajf 21:62d2b5b73160 54 return buttonPressedFrame && selected;
el17ajf 17:cc448ab7266f 55 }
el17ajf 21:62d2b5b73160 56
el17ajf 21:62d2b5b73160 57 void UI::selectNextButton() {
el17ajf 21:62d2b5b73160 58 if (buttonCurrentlySelected < buttonCurrentlyDrawing) {
el17ajf 21:62d2b5b73160 59 buttonCurrentlySelected++;
el17ajf 21:62d2b5b73160 60 }
el17ajf 21:62d2b5b73160 61 }
el17ajf 21:62d2b5b73160 62
el17ajf 21:62d2b5b73160 63 void UI::selectPreviousButton() {
el17ajf 21:62d2b5b73160 64 if (buttonCurrentlySelected > 0) {
el17ajf 21:62d2b5b73160 65 buttonCurrentlySelected--;
el17ajf 21:62d2b5b73160 66 }
el17ajf 17:cc448ab7266f 67 }
el17ajf 21:62d2b5b73160 68
el17ajf 21:62d2b5b73160 69 void UI::pressButton() {
el17ajf 21:62d2b5b73160 70 buttonPressedFrame = true;
el17ajf 17:cc448ab7266f 71 }
el17ajf 21:62d2b5b73160 72
el17ajf 21:62d2b5b73160 73 int UI::nextY() {
el17ajf 21:62d2b5b73160 74 int currentYPos = nextYPos;
el17ajf 21:62d2b5b73160 75 nextYPos += Graphics::UI::CHAR_HEIGHT + LINE_PADDING;
el17ajf 21:62d2b5b73160 76 return currentYPos;
el17ajf 21:62d2b5b73160 77 }
el17ajf 21:62d2b5b73160 78 };