Same as original

button_group.cpp

Committer:
MikamiUitOpen
Date:
2015-11-23
Revision:
1:57fe493e8db2
Parent:
0:d3038879fed6
Child:
2:682475aae171

File content as of revision 1:57fe493e8db2:

//-----------------------------------------------------------
//  Button group class -- Header
//
//  2015/11/23, Copyright (c) 2015 MIKAMI, Naoki
//-----------------------------------------------------------

#include "button_group.hpp"

namespace Mikami
{
    // Constructor
    ButtonGroup::ButtonGroup(LCD_DISCO_F746NG &lcd, TS_DISCO_F746NG &ts,
                             uint16_t x0, uint16_t y0,
                             uint16_t width, uint16_t height,
                             uint32_t color, uint32_t backColor,
                             uint16_t number, string str[],
                             uint16_t spaceX, uint16_t spaceY,
                             uint16_t column,
                             sFONT &fonts, uint32_t textColor)
                            : numberOfButtons_(number)
    {
        buttons_ = new Button *[number];
        for (int n=0; n<number; n++)
        {
            div_t u1 = div(n, column);
            uint16_t x = x0 + u1.rem*(width + spaceX);
            uint16_t y = y0 + u1.quot*(height + spaceY);
            buttons_[n] = new Button(lcd, ts, x, y, width, height,
                                     color, backColor,
                                     str[n], fonts, textColor);
        }
    }
    
    // Destructor
    ButtonGroup::~ButtonGroup()
    {
        for (int n=0; n<numberOfButtons_; n++) delete buttons_[n];
        delete[] *buttons_;   
    }
    
    // Get touched number
    bool ButtonGroup::GetTouchedNumber(int &num)
    {
        for (int n=0; n<numberOfButtons_; n++)
            if (buttons_[n]->Touched())
            {
                num = n;
                return true;
            }
        return false;
    }

    // Get touched number and redraw button if touched
    bool ButtonGroup::GetTouchedNumber(int &num, uint32_t color)
    {
        if (GetTouchedNumber(num))
        {
            for (int n=0; n<numberOfButtons_; n++)
                if (n == num)
                    buttons_[n]->Draw(color);
                else
                    buttons_[n]->Draw(buttons_[n]->GetColor());
            return true;
        }
        else
            return false;
    }
}