button

Dependents:   Temperature_Sensor_to_LCD

Committer:
mcollini
Date:
Thu Aug 16 07:53:40 2018 +0000
Revision:
15:4c7334ade811
Parent:
14:f1df5510ea4b
Child:
16:742da8cc7e07
tolto "asterisco" nel distruttore

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:d3038879fed6 1 //-----------------------------------------------------------
MikamiUitOpen 5:2cc388e91bde 2 // Button group class
MikamiUitOpen 0:d3038879fed6 3 //
MikamiUitOpen 13:af578b53ff0e 4 // 2016/02/22, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:d3038879fed6 5 //-----------------------------------------------------------
MikamiUitOpen 0:d3038879fed6 6
MikamiUitOpen 0:d3038879fed6 7 #include "button_group.hpp"
MikamiUitOpen 0:d3038879fed6 8
MikamiUitOpen 0:d3038879fed6 9 namespace Mikami
MikamiUitOpen 0:d3038879fed6 10 {
MikamiUitOpen 0:d3038879fed6 11 // Constructor
MikamiUitOpen 0:d3038879fed6 12 ButtonGroup::ButtonGroup(LCD_DISCO_F746NG &lcd, TS_DISCO_F746NG &ts,
MikamiUitOpen 0:d3038879fed6 13 uint16_t x0, uint16_t y0,
MikamiUitOpen 0:d3038879fed6 14 uint16_t width, uint16_t height,
MikamiUitOpen 0:d3038879fed6 15 uint32_t color, uint32_t backColor,
MikamiUitOpen 3:d99d9c0324b7 16 uint16_t number, const string str[],
MikamiUitOpen 0:d3038879fed6 17 uint16_t spaceX, uint16_t spaceY,
MikamiUitOpen 0:d3038879fed6 18 uint16_t column,
MikamiUitOpen 0:d3038879fed6 19 sFONT &fonts, uint32_t textColor)
MikamiUitOpen 13:af578b53ff0e 20 : numberOfButtons_(number), touchedNum_(-1)
MikamiUitOpen 0:d3038879fed6 21 {
MikamiUitOpen 0:d3038879fed6 22 buttons_ = new Button *[number];
MikamiUitOpen 0:d3038879fed6 23 for (int n=0; n<number; n++)
MikamiUitOpen 0:d3038879fed6 24 {
MikamiUitOpen 0:d3038879fed6 25 div_t u1 = div(n, column);
MikamiUitOpen 0:d3038879fed6 26 uint16_t x = x0 + u1.rem*(width + spaceX);
MikamiUitOpen 0:d3038879fed6 27 uint16_t y = y0 + u1.quot*(height + spaceY);
MikamiUitOpen 0:d3038879fed6 28 buttons_[n] = new Button(lcd, ts, x, y, width, height,
MikamiUitOpen 0:d3038879fed6 29 color, backColor,
MikamiUitOpen 0:d3038879fed6 30 str[n], fonts, textColor);
MikamiUitOpen 0:d3038879fed6 31 }
gscuttari 14:f1df5510ea4b 32
MikamiUitOpen 0:d3038879fed6 33 }
MikamiUitOpen 0:d3038879fed6 34
MikamiUitOpen 0:d3038879fed6 35 // Destructor
MikamiUitOpen 0:d3038879fed6 36 ButtonGroup::~ButtonGroup()
MikamiUitOpen 0:d3038879fed6 37 {
mcollini 15:4c7334ade811 38 for (int n=0; n<numberOfButtons_; n++){
mcollini 15:4c7334ade811 39 delete buttons_[n];
mcollini 15:4c7334ade811 40 }
mcollini 15:4c7334ade811 41 delete[] buttons_;
MikamiUitOpen 0:d3038879fed6 42 }
MikamiUitOpen 0:d3038879fed6 43
MikamiUitOpen 13:af578b53ff0e 44 // Draw button
MikamiUitOpen 13:af578b53ff0e 45 bool ButtonGroup::Draw(int num, uint32_t color, uint32_t textColor)
MikamiUitOpen 13:af578b53ff0e 46 {
MikamiUitOpen 13:af578b53ff0e 47 if (!Range(num)) return false;
MikamiUitOpen 13:af578b53ff0e 48 buttons_[num]->Draw(color, textColor);
MikamiUitOpen 13:af578b53ff0e 49 touchedNum_ = num;
MikamiUitOpen 13:af578b53ff0e 50 return true;
MikamiUitOpen 13:af578b53ff0e 51 }
MikamiUitOpen 13:af578b53ff0e 52
MikamiUitOpen 11:204bc17f59cc 53 // Redraw button with original color
MikamiUitOpen 11:204bc17f59cc 54 bool ButtonGroup::Redraw(int num, uint32_t textColor)
MikamiUitOpen 11:204bc17f59cc 55 {
MikamiUitOpen 11:204bc17f59cc 56 if (!Range(num)) return false;
MikamiUitOpen 11:204bc17f59cc 57 buttons_[num]->Redraw(textColor);
MikamiUitOpen 11:204bc17f59cc 58 return true;
MikamiUitOpen 11:204bc17f59cc 59 }
MikamiUitOpen 11:204bc17f59cc 60
MikamiUitOpen 11:204bc17f59cc 61 // Erase button with selected color
MikamiUitOpen 11:204bc17f59cc 62 bool ButtonGroup::Erase(int num, uint32_t color)
MikamiUitOpen 11:204bc17f59cc 63 {
MikamiUitOpen 11:204bc17f59cc 64 if (!Range(num)) return false;
MikamiUitOpen 11:204bc17f59cc 65 buttons_[num]->Draw(color, color);
MikamiUitOpen 11:204bc17f59cc 66 return true;
MikamiUitOpen 11:204bc17f59cc 67 }
MikamiUitOpen 11:204bc17f59cc 68
MikamiUitOpen 11:204bc17f59cc 69 // Check touch detected for specified button
MikamiUitOpen 11:204bc17f59cc 70 bool ButtonGroup::Touched(int num)
MikamiUitOpen 11:204bc17f59cc 71 {
MikamiUitOpen 11:204bc17f59cc 72 if (!Range(num)) return false;
MikamiUitOpen 13:af578b53ff0e 73 bool touched = buttons_[num]->Touched();
MikamiUitOpen 13:af578b53ff0e 74 if (touched) touchedNum_ = num;
MikamiUitOpen 13:af578b53ff0e 75 return touched;
MikamiUitOpen 11:204bc17f59cc 76 }
MikamiUitOpen 11:204bc17f59cc 77
MikamiUitOpen 6:d268555e2f50 78 // Check touch detected for specified button and redraw
MikamiUitOpen 6:d268555e2f50 79 bool ButtonGroup::Touched(int num, uint32_t color,
MikamiUitOpen 6:d268555e2f50 80 uint32_t textColor)
MikamiUitOpen 6:d268555e2f50 81 {
MikamiUitOpen 11:204bc17f59cc 82 if (!Range(num)) return false;
MikamiUitOpen 13:af578b53ff0e 83 bool touched = buttons_[num]->Touched(color, textColor);
MikamiUitOpen 13:af578b53ff0e 84 if (touched)
MikamiUitOpen 6:d268555e2f50 85 {
MikamiUitOpen 13:af578b53ff0e 86 if (Range(touchedNum_) && (num != touchedNum_))
MikamiUitOpen 13:af578b53ff0e 87 buttons_[touchedNum_]->Redraw();
MikamiUitOpen 13:af578b53ff0e 88 touchedNum_ = num;
MikamiUitOpen 6:d268555e2f50 89 }
MikamiUitOpen 13:af578b53ff0e 90 return touched;
MikamiUitOpen 6:d268555e2f50 91 }
MikamiUitOpen 6:d268555e2f50 92
MikamiUitOpen 7:6913aebb3905 93 // Get touched number
MikamiUitOpen 7:6913aebb3905 94 bool ButtonGroup::GetTouchedNumber(int &num)
MikamiUitOpen 7:6913aebb3905 95 {
MikamiUitOpen 13:af578b53ff0e 96 if (buttons_[0]->PanelTouched())
MikamiUitOpen 13:af578b53ff0e 97 {
MikamiUitOpen 13:af578b53ff0e 98 for (int n=0; n<numberOfButtons_; n++)
MikamiUitOpen 13:af578b53ff0e 99 if (buttons_[n]->IsOnButton())
MikamiUitOpen 13:af578b53ff0e 100 {
MikamiUitOpen 13:af578b53ff0e 101 num = n;
MikamiUitOpen 13:af578b53ff0e 102 return true;
MikamiUitOpen 13:af578b53ff0e 103 }
MikamiUitOpen 13:af578b53ff0e 104 return false;
MikamiUitOpen 13:af578b53ff0e 105 }
MikamiUitOpen 13:af578b53ff0e 106 else
MikamiUitOpen 13:af578b53ff0e 107 return false;
MikamiUitOpen 7:6913aebb3905 108 }
gscuttari 14:f1df5510ea4b 109
gscuttari 14:f1df5510ea4b 110
MikamiUitOpen 0:d3038879fed6 111 // Get touched number and redraw button if touched
MikamiUitOpen 1:57fe493e8db2 112 bool ButtonGroup::GetTouchedNumber(int &num, uint32_t color)
MikamiUitOpen 0:d3038879fed6 113 {
MikamiUitOpen 0:d3038879fed6 114 if (GetTouchedNumber(num))
MikamiUitOpen 0:d3038879fed6 115 {
MikamiUitOpen 13:af578b53ff0e 116 buttons_[num]->Draw(color);
MikamiUitOpen 13:af578b53ff0e 117 if (Range(touchedNum_) && (num != touchedNum_))
MikamiUitOpen 13:af578b53ff0e 118 buttons_[touchedNum_]->Redraw();
MikamiUitOpen 13:af578b53ff0e 119 touchedNum_ = num;
MikamiUitOpen 13:af578b53ff0e 120 return true;
MikamiUitOpen 0:d3038879fed6 121 }
MikamiUitOpen 0:d3038879fed6 122 else
MikamiUitOpen 0:d3038879fed6 123 return false;
MikamiUitOpen 0:d3038879fed6 124 }
MikamiUitOpen 0:d3038879fed6 125 }