ELEC2645 (2018/19) / Mbed 2 deprecated el17ajf

Dependencies:   mbed

Fork of el17ajf by Angus Findlay

Revision:
17:cc448ab7266f
Parent:
16:3f84f2d7b910
Child:
18:24ce897024d0
--- a/Menus/UI/UI.cpp	Tue Mar 26 10:18:17 2019 +0000
+++ b/Menus/UI/UI.cpp	Wed Apr 03 13:37:56 2019 +0000
@@ -1,10 +1,70 @@
-    void clear();
+#include "UI.h"
+#include "Graphics.h"
+
+UI::UI() {
+    reset();
+}
+
+void UI::reset() {
+    buttonCurrentlySelected = 0; 
+}
+
+UI::~UI() {
     
-    void drawTitle(const char * text);
-    void drawLabel(const char * text);
-    bool drawAndCheckButton(const char * text);
+}
+
+void UI::clear() {
+    buttonPressedFrame = false;
+    nextYPos = PADDING_Y;
+    buttonCurrentlyDrawing = -1;
+}
+
+void UI::drawTitle(const char * text) {
+    drawLabel(text);
+}
+
+void UI::drawLabel(const char * text) {
+    Graphics::UI::drawText(PADDING_X, nextY(), text);
+}
+
+void UI::newLine() {
+    nextY();
+}
 
-    void selectNextButton();
-    void selectPreviousButton();
-    void pressButton();
-};
+bool UI::drawAndCheckButton(const char * text) {
+    buttonCurrentlyDrawing++;
+    
+    int y = nextY();
+    
+    Graphics::UI::drawText(PADDING_X, y, text);
+    
+    bool selected = buttonCurrentlyDrawing == buttonCurrentlySelected;
+    
+    if (selected) {
+        Graphics::UI::drawBorder(PADDING_X - 2, y - 2, PADDING_X + 50, y + Graphics::UI::CHAR_HEIGHT + 2);
+    }
+
+    return buttonPressedFrame && selected;
+}
+
+void UI::selectNextButton() {
+    if (buttonCurrentlySelected < buttonCurrentlyDrawing) {
+        buttonCurrentlySelected++;
+    }
+}
+
+void UI::selectPreviousButton() {
+    if (buttonCurrentlySelected > 0) {
+        buttonCurrentlySelected--;
+    }
+}
+
+void UI::pressButton() {
+    buttonPressedFrame = true;
+}
+
+int UI::nextY() {
+    int currentYPos = nextYPos;
+    nextYPos += Graphics::UI::CHAR_HEIGHT + LINE_PADDING;
+    return currentYPos;
+}
\ No newline at end of file