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

Dependents:   F746_SD_GraphicEqualizer_ren0620

Fork of F746_GUI by 不韋 呂

Committer:
edamame22
Date:
Wed Jun 22 03:49:51 2016 +0000
Revision:
14:95544440b46c
Parent:
3:fe6ff954824a
push area extended.

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 3:fe6ff954824a 4 // 2016/04/07, Copyright (c) 2016 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,
edamame22 14:95544440b46c 18 bool expended,
MikamiUitOpen 0:a2686ef737c2 19 sFONT &fonts,
MikamiUitOpen 0:a2686ef737c2 20 uint32_t textColor, uint32_t backColor,
MikamiUitOpen 0:a2686ef737c2 21 uint32_t createdColor, uint32_t touchedColor,
MikamiUitOpen 0:a2686ef737c2 22 uint32_t inactiveColor, uint32_t inactiveTextColor)
MikamiUitOpen 0:a2686ef737c2 23 : GuiBase(x0, y0, fonts, textColor, backColor,
MikamiUitOpen 0:a2686ef737c2 24 createdColor, touchedColor,
MikamiUitOpen 0:a2686ef737c2 25 inactiveColor, inactiveTextColor),
MikamiUitOpen 0:a2686ef737c2 26 numberOfButtons_(number), prevNum_(touched)
MikamiUitOpen 0:a2686ef737c2 27 {
MikamiUitOpen 0:a2686ef737c2 28 buttons_ = new Button *[number];
MikamiUitOpen 0:a2686ef737c2 29 for (int n=0; n<number; n++)
MikamiUitOpen 0:a2686ef737c2 30 {
MikamiUitOpen 0:a2686ef737c2 31 div_t u1 = div(n, column);
MikamiUitOpen 0:a2686ef737c2 32 uint16_t x = x0 + u1.rem*(width + spaceX);
MikamiUitOpen 0:a2686ef737c2 33 uint16_t y = y0 + u1.quot*(height + spaceY);
edamame22 14:95544440b46c 34 uint16_t xpend_detectArea = (expended? width*6 : 0);
MikamiUitOpen 0:a2686ef737c2 35 buttons_[n] =
edamame22 14:95544440b46c 36 new Button(x, y, width, height, xpend_detectArea, str[n], fonts,
MikamiUitOpen 0:a2686ef737c2 37 TEXT_COLOR_, BACK_COLOR_,
MikamiUitOpen 0:a2686ef737c2 38 CREATED_COLOR_, TOUCHED_COLOR_,
MikamiUitOpen 0:a2686ef737c2 39 INACTIVE_COLOR_, INACTIVE_TEXT_COLOR_);
MikamiUitOpen 0:a2686ef737c2 40 }
MikamiUitOpen 3:fe6ff954824a 41 // On created, set touched color as needed
MikamiUitOpen 3:fe6ff954824a 42 if (touched >= 0) TouchedColor(touched);
MikamiUitOpen 0:a2686ef737c2 43 }
MikamiUitOpen 0:a2686ef737c2 44
MikamiUitOpen 0:a2686ef737c2 45 // Destructor
MikamiUitOpen 0:a2686ef737c2 46 ButtonGroup::~ButtonGroup()
MikamiUitOpen 0:a2686ef737c2 47 {
MikamiUitOpen 0:a2686ef737c2 48 for (int n=0; n<numberOfButtons_; n++) delete buttons_[n];
MikamiUitOpen 0:a2686ef737c2 49 delete[] *buttons_;
MikamiUitOpen 0:a2686ef737c2 50 }
MikamiUitOpen 0:a2686ef737c2 51
MikamiUitOpen 0:a2686ef737c2 52 // Draw button
MikamiUitOpen 0:a2686ef737c2 53 bool ButtonGroup::Draw(int num, uint32_t color, uint32_t textColor)
MikamiUitOpen 0:a2686ef737c2 54 {
MikamiUitOpen 0:a2686ef737c2 55 if (!Range(num)) return false;
MikamiUitOpen 0:a2686ef737c2 56 buttons_[num]->Draw(color, textColor);
MikamiUitOpen 0:a2686ef737c2 57 return true;
MikamiUitOpen 0:a2686ef737c2 58 }
MikamiUitOpen 0:a2686ef737c2 59
MikamiUitOpen 3:fe6ff954824a 60 // Change to touched color
MikamiUitOpen 3:fe6ff954824a 61 bool ButtonGroup::TouchedColor(int num)
MikamiUitOpen 3:fe6ff954824a 62 {
MikamiUitOpen 3:fe6ff954824a 63 if (prevNum_ != num) prevNum_ = num;
MikamiUitOpen 3:fe6ff954824a 64 return Draw(num, TOUCHED_COLOR_, TEXT_COLOR_);
MikamiUitOpen 3:fe6ff954824a 65 }
MikamiUitOpen 3:fe6ff954824a 66
MikamiUitOpen 2:d2f882d98f0a 67 // Erase button
MikamiUitOpen 0:a2686ef737c2 68 bool ButtonGroup::Erase(int num)
MikamiUitOpen 0:a2686ef737c2 69 {
MikamiUitOpen 0:a2686ef737c2 70 if (!Range(num)) return false;
MikamiUitOpen 0:a2686ef737c2 71 buttons_[num]->Erase();
MikamiUitOpen 0:a2686ef737c2 72 return true;
MikamiUitOpen 0:a2686ef737c2 73 }
MikamiUitOpen 0:a2686ef737c2 74
MikamiUitOpen 0:a2686ef737c2 75 // Check touch detected for specified button
MikamiUitOpen 0:a2686ef737c2 76 bool ButtonGroup::Touched(int num)
MikamiUitOpen 0:a2686ef737c2 77 {
MikamiUitOpen 0:a2686ef737c2 78 if (!Range(num)) return false;
MikamiUitOpen 0:a2686ef737c2 79 if (!buttons_[num]->IsActive()) return false;
MikamiUitOpen 0:a2686ef737c2 80 int touched;
MikamiUitOpen 0:a2686ef737c2 81 if (!GetTouchedNumber(touched)) return false;
MikamiUitOpen 0:a2686ef737c2 82 bool rtn = (touched == num) ? true : false;
MikamiUitOpen 0:a2686ef737c2 83 return rtn;
MikamiUitOpen 0:a2686ef737c2 84 }
MikamiUitOpen 0:a2686ef737c2 85
MikamiUitOpen 0:a2686ef737c2 86 // Get touched number
MikamiUitOpen 0:a2686ef737c2 87 bool ButtonGroup::GetTouchedNumber(int &num)
MikamiUitOpen 0:a2686ef737c2 88 {
MikamiUitOpen 0:a2686ef737c2 89 bool rtn = false;
MikamiUitOpen 0:a2686ef737c2 90 if (PanelTouched())
MikamiUitOpen 0:a2686ef737c2 91 {
MikamiUitOpen 0:a2686ef737c2 92 for (int n=0; n<numberOfButtons_; n++)
MikamiUitOpen 0:a2686ef737c2 93 if (buttons_[n]->IsOnButton() &&
MikamiUitOpen 0:a2686ef737c2 94 buttons_[n]->IsActive())
MikamiUitOpen 0:a2686ef737c2 95 {
MikamiUitOpen 0:a2686ef737c2 96 num = n;
MikamiUitOpen 0:a2686ef737c2 97 rtn = true;
MikamiUitOpen 0:a2686ef737c2 98 }
MikamiUitOpen 0:a2686ef737c2 99
MikamiUitOpen 0:a2686ef737c2 100 if (!rtn) return false;
MikamiUitOpen 0:a2686ef737c2 101 }
MikamiUitOpen 0:a2686ef737c2 102 else
MikamiUitOpen 0:a2686ef737c2 103 return false;
MikamiUitOpen 0:a2686ef737c2 104
MikamiUitOpen 0:a2686ef737c2 105 buttons_[num]->Draw(TOUCHED_COLOR_);
MikamiUitOpen 0:a2686ef737c2 106 if ((prevNum_ >= 0) && (prevNum_ != num))
MikamiUitOpen 0:a2686ef737c2 107 buttons_[prevNum_]->Draw();
MikamiUitOpen 0:a2686ef737c2 108 if (prevNum_ != num) prevNum_ = num;
MikamiUitOpen 0:a2686ef737c2 109 return true;
MikamiUitOpen 0:a2686ef737c2 110 }
MikamiUitOpen 0:a2686ef737c2 111
MikamiUitOpen 0:a2686ef737c2 112 // Activate and inactivate
MikamiUitOpen 0:a2686ef737c2 113 bool ButtonGroup::Activate(int num)
MikamiUitOpen 0:a2686ef737c2 114 {
MikamiUitOpen 0:a2686ef737c2 115 if (!Range(num)) return false;
MikamiUitOpen 0:a2686ef737c2 116 buttons_[num]->Activate();
MikamiUitOpen 0:a2686ef737c2 117 return true;
MikamiUitOpen 0:a2686ef737c2 118 }
MikamiUitOpen 0:a2686ef737c2 119 bool ButtonGroup::Inactivate(int num)
MikamiUitOpen 0:a2686ef737c2 120 {
MikamiUitOpen 0:a2686ef737c2 121 if (!Range(num)) return false;
MikamiUitOpen 0:a2686ef737c2 122 buttons_[num]->Inactivate();
MikamiUitOpen 0:a2686ef737c2 123 return true;
MikamiUitOpen 0:a2686ef737c2 124 }
MikamiUitOpen 0:a2686ef737c2 125 }