GUI parts for DISCO-F746NG. GuiBase, Button, ButtonGroup, ResetButton, Label, BlinkLabel, NumericLabel, SeekBar, SeekbarGroup, NumericUpDown

Dependencies:   Array_Matrix BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG

Dependents:   F746_AudioOutQSPI F746_AudioPlayerSD DISCO-F746NG_test001 F746_SD_WavPlayer ... more

Committer:
MikamiUitOpen
Date:
Wed Jan 25 13:56:02 2017 +0000
Revision:
28:e2b7ea78b7a0
Parent:
26:a9cf68d24f40
22

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:a2686ef737c2 1 //-----------------------------------------------------------
MikamiUitOpen 0:a2686ef737c2 2 // ButtonGroup class
MikamiUitOpen 0:a2686ef737c2 3 //
MikamiUitOpen 28:e2b7ea78b7a0 4 // 2017/01/25, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 0:a2686ef737c2 5 //-----------------------------------------------------------
MikamiUitOpen 0:a2686ef737c2 6
MikamiUitOpen 0:a2686ef737c2 7 #include "ButtonGroup.hpp"
MikamiUitOpen 0:a2686ef737c2 8
MikamiUitOpen 0:a2686ef737c2 9 namespace Mikami
MikamiUitOpen 0:a2686ef737c2 10 {
MikamiUitOpen 0:a2686ef737c2 11 // Constructor
MikamiUitOpen 0:a2686ef737c2 12 ButtonGroup::ButtonGroup(
MikamiUitOpen 0:a2686ef737c2 13 uint16_t x0, uint16_t y0,
MikamiUitOpen 0:a2686ef737c2 14 uint16_t width, uint16_t height,
MikamiUitOpen 0:a2686ef737c2 15 uint16_t number, const string str[],
MikamiUitOpen 0:a2686ef737c2 16 uint16_t spaceX, uint16_t spaceY,
MikamiUitOpen 0:a2686ef737c2 17 uint16_t column, int touched,
MikamiUitOpen 0:a2686ef737c2 18 sFONT &fonts,
MikamiUitOpen 0:a2686ef737c2 19 uint32_t textColor, uint32_t backColor,
MikamiUitOpen 0:a2686ef737c2 20 uint32_t createdColor, uint32_t touchedColor,
MikamiUitOpen 0:a2686ef737c2 21 uint32_t inactiveColor, uint32_t inactiveTextColor)
MikamiUitOpen 28:e2b7ea78b7a0 22 : TEXT_COLOR_(textColor), CREATED_COLOR_(createdColor),
MikamiUitOpen 28:e2b7ea78b7a0 23 TOUCHED_COLOR_(touchedColor),
MikamiUitOpen 28:e2b7ea78b7a0 24 NUMBER_(number), prevNum_(touched)
MikamiUitOpen 0:a2686ef737c2 25 {
MikamiUitOpen 28:e2b7ea78b7a0 26 buttons_.SetSize(number);
MikamiUitOpen 0:a2686ef737c2 27 for (int n=0; n<number; n++)
MikamiUitOpen 0:a2686ef737c2 28 {
MikamiUitOpen 0:a2686ef737c2 29 div_t u1 = div(n, column);
MikamiUitOpen 0:a2686ef737c2 30 uint16_t x = x0 + u1.rem*(width + spaceX);
MikamiUitOpen 0:a2686ef737c2 31 uint16_t y = y0 + u1.quot*(height + spaceY);
MikamiUitOpen 0:a2686ef737c2 32 buttons_[n] =
MikamiUitOpen 0:a2686ef737c2 33 new Button(x, y, width, height, str[n], fonts,
MikamiUitOpen 28:e2b7ea78b7a0 34 textColor, backColor,
MikamiUitOpen 28:e2b7ea78b7a0 35 createdColor, touchedColor,
MikamiUitOpen 28:e2b7ea78b7a0 36 inactiveColor, inactiveTextColor);
MikamiUitOpen 0:a2686ef737c2 37 }
MikamiUitOpen 3:fe6ff954824a 38 // On created, set touched color as needed
MikamiUitOpen 3:fe6ff954824a 39 if (touched >= 0) TouchedColor(touched);
MikamiUitOpen 0:a2686ef737c2 40 }
MikamiUitOpen 0:a2686ef737c2 41
MikamiUitOpen 0:a2686ef737c2 42 // Draw button
MikamiUitOpen 0:a2686ef737c2 43 bool ButtonGroup::Draw(int num, uint32_t color, uint32_t textColor)
MikamiUitOpen 0:a2686ef737c2 44 {
MikamiUitOpen 0:a2686ef737c2 45 if (!Range(num)) return false;
MikamiUitOpen 0:a2686ef737c2 46 buttons_[num]->Draw(color, textColor);
MikamiUitOpen 0:a2686ef737c2 47 return true;
MikamiUitOpen 0:a2686ef737c2 48 }
MikamiUitOpen 0:a2686ef737c2 49
MikamiUitOpen 3:fe6ff954824a 50 // Change to touched color
MikamiUitOpen 3:fe6ff954824a 51 bool ButtonGroup::TouchedColor(int num)
MikamiUitOpen 3:fe6ff954824a 52 {
MikamiUitOpen 3:fe6ff954824a 53 if (prevNum_ != num) prevNum_ = num;
MikamiUitOpen 3:fe6ff954824a 54 return Draw(num, TOUCHED_COLOR_, TEXT_COLOR_);
MikamiUitOpen 3:fe6ff954824a 55 }
MikamiUitOpen 3:fe6ff954824a 56
MikamiUitOpen 2:d2f882d98f0a 57 // Erase button
MikamiUitOpen 0:a2686ef737c2 58 bool ButtonGroup::Erase(int num)
MikamiUitOpen 0:a2686ef737c2 59 {
MikamiUitOpen 0:a2686ef737c2 60 if (!Range(num)) return false;
MikamiUitOpen 0:a2686ef737c2 61 buttons_[num]->Erase();
MikamiUitOpen 0:a2686ef737c2 62 return true;
MikamiUitOpen 0:a2686ef737c2 63 }
MikamiUitOpen 0:a2686ef737c2 64
MikamiUitOpen 0:a2686ef737c2 65 // Check touch detected for specified button
MikamiUitOpen 0:a2686ef737c2 66 bool ButtonGroup::Touched(int num)
MikamiUitOpen 0:a2686ef737c2 67 {
MikamiUitOpen 0:a2686ef737c2 68 if (!Range(num)) return false;
MikamiUitOpen 0:a2686ef737c2 69 if (!buttons_[num]->IsActive()) return false;
MikamiUitOpen 0:a2686ef737c2 70 int touched;
MikamiUitOpen 0:a2686ef737c2 71 if (!GetTouchedNumber(touched)) return false;
MikamiUitOpen 0:a2686ef737c2 72 bool rtn = (touched == num) ? true : false;
MikamiUitOpen 0:a2686ef737c2 73 return rtn;
MikamiUitOpen 0:a2686ef737c2 74 }
MikamiUitOpen 0:a2686ef737c2 75
MikamiUitOpen 26:a9cf68d24f40 76 // Get touched number, return value: true or false
MikamiUitOpen 0:a2686ef737c2 77 bool ButtonGroup::GetTouchedNumber(int &num)
MikamiUitOpen 0:a2686ef737c2 78 {
MikamiUitOpen 0:a2686ef737c2 79 bool rtn = false;
MikamiUitOpen 28:e2b7ea78b7a0 80 if (GuiBase::PanelTouched())
MikamiUitOpen 0:a2686ef737c2 81 {
MikamiUitOpen 28:e2b7ea78b7a0 82 for (int n=0; n<NUMBER_; n++)
MikamiUitOpen 0:a2686ef737c2 83 if (buttons_[n]->IsOnButton() &&
MikamiUitOpen 0:a2686ef737c2 84 buttons_[n]->IsActive())
MikamiUitOpen 0:a2686ef737c2 85 {
MikamiUitOpen 0:a2686ef737c2 86 num = n;
MikamiUitOpen 0:a2686ef737c2 87 rtn = true;
MikamiUitOpen 0:a2686ef737c2 88 }
MikamiUitOpen 0:a2686ef737c2 89
MikamiUitOpen 0:a2686ef737c2 90 if (!rtn) return false;
MikamiUitOpen 0:a2686ef737c2 91 }
MikamiUitOpen 0:a2686ef737c2 92 else
MikamiUitOpen 0:a2686ef737c2 93 return false;
MikamiUitOpen 0:a2686ef737c2 94
MikamiUitOpen 0:a2686ef737c2 95 buttons_[num]->Draw(TOUCHED_COLOR_);
MikamiUitOpen 0:a2686ef737c2 96 if ((prevNum_ >= 0) && (prevNum_ != num))
MikamiUitOpen 0:a2686ef737c2 97 buttons_[prevNum_]->Draw();
MikamiUitOpen 0:a2686ef737c2 98 if (prevNum_ != num) prevNum_ = num;
MikamiUitOpen 0:a2686ef737c2 99 return true;
MikamiUitOpen 0:a2686ef737c2 100 }
MikamiUitOpen 0:a2686ef737c2 101
MikamiUitOpen 26:a9cf68d24f40 102 // Get touched number, return value: touched number
MikamiUitOpen 26:a9cf68d24f40 103 int ButtonGroup::GetTouchedNumber()
MikamiUitOpen 26:a9cf68d24f40 104 {
MikamiUitOpen 26:a9cf68d24f40 105 int num;
MikamiUitOpen 26:a9cf68d24f40 106 if (GetTouchedNumber(num))
MikamiUitOpen 26:a9cf68d24f40 107 return num;
MikamiUitOpen 26:a9cf68d24f40 108 else
MikamiUitOpen 26:a9cf68d24f40 109 return -1;
MikamiUitOpen 26:a9cf68d24f40 110 }
MikamiUitOpen 26:a9cf68d24f40 111
MikamiUitOpen 26:a9cf68d24f40 112 // Wait until touched and get touched number
MikamiUitOpen 26:a9cf68d24f40 113 int ButtonGroup::WaitTouchedAndGet()
MikamiUitOpen 26:a9cf68d24f40 114 {
MikamiUitOpen 26:a9cf68d24f40 115 int num;
MikamiUitOpen 26:a9cf68d24f40 116 while (!GetTouchedNumber(num)) {}
MikamiUitOpen 26:a9cf68d24f40 117 return num;
MikamiUitOpen 26:a9cf68d24f40 118 }
MikamiUitOpen 26:a9cf68d24f40 119
MikamiUitOpen 14:b977160de2f3 120 // Activate and inactivate button(s)
MikamiUitOpen 0:a2686ef737c2 121 bool ButtonGroup::Activate(int num)
MikamiUitOpen 0:a2686ef737c2 122 {
MikamiUitOpen 0:a2686ef737c2 123 if (!Range(num)) return false;
MikamiUitOpen 0:a2686ef737c2 124 buttons_[num]->Activate();
MikamiUitOpen 0:a2686ef737c2 125 return true;
MikamiUitOpen 0:a2686ef737c2 126 }
MikamiUitOpen 0:a2686ef737c2 127 bool ButtonGroup::Inactivate(int num)
MikamiUitOpen 0:a2686ef737c2 128 {
MikamiUitOpen 0:a2686ef737c2 129 if (!Range(num)) return false;
MikamiUitOpen 0:a2686ef737c2 130 buttons_[num]->Inactivate();
MikamiUitOpen 0:a2686ef737c2 131 return true;
MikamiUitOpen 0:a2686ef737c2 132 }
MikamiUitOpen 0:a2686ef737c2 133 }
MikamiUitOpen 28:e2b7ea78b7a0 134