Same as original
button_group.cpp
- Committer:
- MaxScorda
- Date:
- 2020-12-20
- Revision:
- 14:3076e383e6b0
- Parent:
- 13:af578b53ff0e
File content as of revision 14:3076e383e6b0:
//----------------------------------------------------------- // Button group class // // 2016/02/22, Copyright (c) 2016 MIKAMI, Naoki //----------------------------------------------------------- #include "button_group.hpp" namespace ButGrp { // 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), touchedNum_(-1) { 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_; } // Draw button bool ButtonGroup::Draw(int num, uint32_t color, uint32_t textColor) { if (!Range(num)) return false; buttons_[num]->Draw(color, textColor); touchedNum_ = num; return true; } // Redraw button with original color bool ButtonGroup::Redraw(int num, uint32_t textColor) { if (!Range(num)) return false; buttons_[num]->Redraw(textColor); return true; } // Erase button with selected color bool ButtonGroup::Erase(int num, uint32_t color) { if (!Range(num)) return false; buttons_[num]->Draw(color, color); return true; } // Check touch detected for specified button bool ButtonGroup::Touched(int num) { if (!Range(num)) return false; bool touched = buttons_[num]->Touched(); if (touched) touchedNum_ = num; return touched; } // Check touch detected for specified button and redraw bool ButtonGroup::Touched(int num, uint32_t color, uint32_t textColor) { if (!Range(num)) return false; bool touched = buttons_[num]->Touched(color, textColor); if (touched) { if (Range(touchedNum_) && (num != touchedNum_)) buttons_[touchedNum_]->Redraw(); touchedNum_ = num; } return touched; } // Get touched number bool ButtonGroup::GetTouchedNumber(int &num) { if (buttons_[0]->PanelTouched()) { for (int n=0; n<numberOfButtons_; n++) if (buttons_[n]->IsOnButton()) { num = n; return true; } return false; } else return false; } // Get touched number and redraw button if touched bool ButtonGroup::GetTouchedNumber(int &num, uint32_t color) { if (GetTouchedNumber(num)) { buttons_[num]->Draw(color); if (Range(touchedNum_) && (num != touchedNum_)) buttons_[touchedNum_]->Redraw(); touchedNum_ = num; return true; } else return false; } }