Class library: Button class and ButtonGroup class for DISCO-F746NG. クラスライブラリ: DISCO-F746NG 用の,Button クラス,ButtonGroup クラス.

Dependents:   F746_SpectralAnalysis_NoPhoto F746_Fourier_series_of_square_wave_01 F746_ButtonGroup_Demo F746_Mandelbrot ... more

Committer:
MikamiUitOpen
Date:
Wed Feb 17 06:27:45 2016 +0000
Revision:
11:204bc17f59cc
Parent:
9:0573d8a9bbcd
Child:
13:af578b53ff0e
12

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 11:204bc17f59cc 4 // 2016/02/17, 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 0:d3038879fed6 20 : numberOfButtons_(number)
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 }
MikamiUitOpen 0:d3038879fed6 32 }
MikamiUitOpen 0:d3038879fed6 33
MikamiUitOpen 0:d3038879fed6 34 // Destructor
MikamiUitOpen 0:d3038879fed6 35 ButtonGroup::~ButtonGroup()
MikamiUitOpen 0:d3038879fed6 36 {
MikamiUitOpen 0:d3038879fed6 37 for (int n=0; n<numberOfButtons_; n++) delete buttons_[n];
MikamiUitOpen 0:d3038879fed6 38 delete[] *buttons_;
MikamiUitOpen 0:d3038879fed6 39 }
MikamiUitOpen 0:d3038879fed6 40
MikamiUitOpen 11:204bc17f59cc 41 // Redraw button with original color
MikamiUitOpen 11:204bc17f59cc 42 bool ButtonGroup::Redraw(int num, uint32_t textColor)
MikamiUitOpen 11:204bc17f59cc 43 {
MikamiUitOpen 11:204bc17f59cc 44 if (!Range(num)) return false;
MikamiUitOpen 11:204bc17f59cc 45 buttons_[num]->Redraw(textColor);
MikamiUitOpen 11:204bc17f59cc 46 return true;
MikamiUitOpen 11:204bc17f59cc 47 }
MikamiUitOpen 11:204bc17f59cc 48
MikamiUitOpen 11:204bc17f59cc 49 // Erase button with selected color
MikamiUitOpen 11:204bc17f59cc 50 bool ButtonGroup::Erase(int num, uint32_t color)
MikamiUitOpen 11:204bc17f59cc 51 {
MikamiUitOpen 11:204bc17f59cc 52 if (!Range(num)) return false;
MikamiUitOpen 11:204bc17f59cc 53 buttons_[num]->Draw(color, color);
MikamiUitOpen 11:204bc17f59cc 54 return true;
MikamiUitOpen 11:204bc17f59cc 55 }
MikamiUitOpen 11:204bc17f59cc 56
MikamiUitOpen 11:204bc17f59cc 57 // Check touch detected for specified button
MikamiUitOpen 11:204bc17f59cc 58 bool ButtonGroup::Touched(int num)
MikamiUitOpen 11:204bc17f59cc 59 {
MikamiUitOpen 11:204bc17f59cc 60 if (!Range(num)) return false;
MikamiUitOpen 11:204bc17f59cc 61 return buttons_[num]->Touched();
MikamiUitOpen 11:204bc17f59cc 62 }
MikamiUitOpen 11:204bc17f59cc 63
MikamiUitOpen 6:d268555e2f50 64 // Check touch detected for specified button and redraw
MikamiUitOpen 6:d268555e2f50 65 bool ButtonGroup::Touched(int num, uint32_t color,
MikamiUitOpen 6:d268555e2f50 66 uint32_t textColor)
MikamiUitOpen 6:d268555e2f50 67 {
MikamiUitOpen 11:204bc17f59cc 68 if (!Range(num)) return false;
MikamiUitOpen 6:d268555e2f50 69 if (buttons_[num]->Touched(color, textColor))
MikamiUitOpen 6:d268555e2f50 70 {
MikamiUitOpen 6:d268555e2f50 71 for (int n=0; n<numberOfButtons_; n++)
MikamiUitOpen 6:d268555e2f50 72 if (n != num) buttons_[n]->Redraw();
MikamiUitOpen 6:d268555e2f50 73 return true;
MikamiUitOpen 6:d268555e2f50 74 }
MikamiUitOpen 6:d268555e2f50 75 else
MikamiUitOpen 6:d268555e2f50 76 return false;
MikamiUitOpen 6:d268555e2f50 77 }
MikamiUitOpen 6:d268555e2f50 78
MikamiUitOpen 7:6913aebb3905 79 // Get touched number
MikamiUitOpen 7:6913aebb3905 80 bool ButtonGroup::GetTouchedNumber(int &num)
MikamiUitOpen 7:6913aebb3905 81 {
MikamiUitOpen 7:6913aebb3905 82 for (int n=0; n<numberOfButtons_; n++)
MikamiUitOpen 7:6913aebb3905 83 if (buttons_[n]->Touched())
MikamiUitOpen 7:6913aebb3905 84 {
MikamiUitOpen 7:6913aebb3905 85 num = n;
MikamiUitOpen 7:6913aebb3905 86 return true;
MikamiUitOpen 7:6913aebb3905 87 }
MikamiUitOpen 7:6913aebb3905 88 return false;
MikamiUitOpen 7:6913aebb3905 89 }
MikamiUitOpen 7:6913aebb3905 90
MikamiUitOpen 0:d3038879fed6 91 // Get touched number and redraw button if touched
MikamiUitOpen 1:57fe493e8db2 92 bool ButtonGroup::GetTouchedNumber(int &num, uint32_t color)
MikamiUitOpen 0:d3038879fed6 93 {
MikamiUitOpen 0:d3038879fed6 94 if (GetTouchedNumber(num))
MikamiUitOpen 0:d3038879fed6 95 {
MikamiUitOpen 9:0573d8a9bbcd 96 for (int n=0; n<numberOfButtons_; n++)
MikamiUitOpen 9:0573d8a9bbcd 97 if (n == num)
MikamiUitOpen 9:0573d8a9bbcd 98 buttons_[n]->Draw(color);
MikamiUitOpen 9:0573d8a9bbcd 99 else
MikamiUitOpen 9:0573d8a9bbcd 100 buttons_[n]->Redraw();
MikamiUitOpen 0:d3038879fed6 101 return true;
MikamiUitOpen 0:d3038879fed6 102 }
MikamiUitOpen 0:d3038879fed6 103 else
MikamiUitOpen 0:d3038879fed6 104 return false;
MikamiUitOpen 0:d3038879fed6 105 }
MikamiUitOpen 11:204bc17f59cc 106
MikamiUitOpen 11:204bc17f59cc 107 // Check range of argument
MikamiUitOpen 11:204bc17f59cc 108 bool ButtonGroup::Range(int n)
MikamiUitOpen 11:204bc17f59cc 109 {
MikamiUitOpen 11:204bc17f59cc 110 if ( (n >= 0) && (n < numberOfButtons_) )
MikamiUitOpen 11:204bc17f59cc 111 return true;
MikamiUitOpen 11:204bc17f59cc 112 else
MikamiUitOpen 11:204bc17f59cc 113 return false;
MikamiUitOpen 11:204bc17f59cc 114 }
MikamiUitOpen 0:d3038879fed6 115 }