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.
Dependencies: mbed
Fork of el17ajf by
Menus/UI/UI.cpp@21:62d2b5b73160, 2019-04-03 (annotated)
- 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?
User | Revision | Line number | New 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 | }; |