Same as original

button_group.cpp

Committer:
MikamiUitOpen
Date:
2015-12-23
Revision:
9:0573d8a9bbcd
Parent:
8:479ed9f0ba20
Child:
11:204bc17f59cc

File content as of revision 9:0573d8a9bbcd:

//-----------------------------------------------------------
//  Button group class
//
//  2015/12/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, const 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_;   
    }

    // Check touch detected for specified button and redraw
    bool ButtonGroup::Touched(int num, uint32_t color,
                              uint32_t textColor)
    {
        if (buttons_[num]->Touched(color, textColor))
        {
            for (int n=0; n<numberOfButtons_; n++)
                if (n != num) buttons_[n]->Redraw();
            return true;
        }
        else
            return false;
    }

    // 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]->Redraw();
            return true;
        }
        else
            return false;
    }
}