ELEC2645 (2018/19) / Mbed 2 deprecated el17ajf

Dependencies:   mbed

Fork of el17ajf by Angus Findlay

Menus/UI/UI.cpp

Committer:
el17ajf
Date:
2019-04-03
Revision:
21:62d2b5b73160
Parent:
19:370d83a8dc33
Child:
26:baa7077449e7

File content as of revision 21:62d2b5b73160:

#include "UI.h"
#include "Graphics.h"
namespace Menus {
    UI::UI() {
        reset();
    }
    
    void UI::reset() {
        buttonCurrentlySelected = 0; 
    }
    
    UI::~UI() {
        
    }
    
    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();
    }
    
    bool UI::drawAndCheckButton(const char * text) {
        buttonCurrentlyDrawing++;
        
        int y = nextY();
        
        Graphics::UI::drawText(PADDING_X, y, text);
        
        bool selected = buttonCurrentlyDrawing == buttonCurrentlySelected;
        
        int wordWidth = strlen(text) * (Graphics::UI::CHAR_WIDTH + Graphics::UI::CHAR_SPACE) - 1;
        
        if (selected) {
            Graphics::UI::drawBorder(
                PADDING_X - 2,
                y - 2,
                PADDING_X + wordWidth + 2,
                y + Graphics::UI::CHAR_HEIGHT + 1
            );
        }
    
        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;
    }
};