mirror of
https://github.com/Lemonochrme/clover.git
synced 2025-06-08 08:40:50 +02:00
More generic Approach for TextBox, same for Components that will be containg Boxes
This commit is contained in:
parent
f7d7bd7688
commit
629bae5fd5
4 changed files with 67 additions and 77 deletions
|
@ -15,30 +15,21 @@ Screen::Screen()
|
||||||
}
|
}
|
||||||
|
|
||||||
Screen::~Screen()
|
Screen::~Screen()
|
||||||
{
|
{}
|
||||||
}
|
|
||||||
|
|
||||||
void Screen::Setup(uint8_t *font)
|
void Screen::Setup(uint8_t *font)
|
||||||
{
|
{
|
||||||
_font = font;
|
_font = font;
|
||||||
_screen->setFont(_font);
|
_screen->setFont(_font);
|
||||||
|
|
||||||
|
headerSetup = TextBox("Clover Setup", StyleWidth::LEFT, StyleHeight::TOP, U8G2_BTN_INV);
|
||||||
// Static Components
|
// Static Components
|
||||||
connectingWindow.Add(TextBox("connect", StyleWidth::CENTERED, U8G2_BTN_BW0));
|
connectingWindow.Add({headerSetup, TextBox("connect", StyleWidth::CENTERED, StyleHeight::CENTERED, U8G2_BTN_BW0)});
|
||||||
connectedWindow.Add({TextBox("Connected to Wi-Fi !", StyleWidth::LEFT, U8G2_BTN_BW0),
|
connectedWindow.Add({headerSetup,
|
||||||
TextBox("IP address: ", StyleWidth::LEFT, U8G2_BTN_BW0),
|
TextBox("Connected to Wi-Fi !", StyleWidth::LEFT, StyleHeight::CENTERED, U8G2_BTN_BW0),
|
||||||
TextBox("addr", StyleWidth::CENTERED, U8G2_BTN_BW0)});
|
TextBox("IP address: ", StyleWidth::LEFT, StyleHeight::CENTERED, U8G2_BTN_BW0),
|
||||||
loopWindow.Add(TextBox("Hello, Plant!", StyleWidth::CENTERED, U8G2_BTN_BW1));
|
TextBox("addr", StyleWidth::CENTERED, StyleHeight::CENTERED, U8G2_BTN_BW0)});
|
||||||
}
|
loopWindow.Add(TextBox("Hello, Plant!", StyleWidth::CENTERED, StyleHeight::CENTERED, U8G2_BTN_BW1));
|
||||||
|
|
||||||
uint16_t Screen::setupHeader(const uint16_t w_padding, const uint16_t h_padding)
|
|
||||||
{
|
|
||||||
_screen->setFont(u8g2_font_helvB08_tr);
|
|
||||||
// calculating y position
|
|
||||||
const uint16_t y = FONT_SIZE + ((w_padding + 1) * 2);
|
|
||||||
_screen->drawButtonUTF8(w_padding, y, U8G2_BTN_INV, _screen->getDisplayWidth(), h_padding, w_padding, "Clover Setup");
|
|
||||||
_screen->setFont(_font);
|
|
||||||
return y;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen::connecting(uint8_t state)
|
void Screen::connecting(uint8_t state)
|
||||||
|
@ -49,7 +40,6 @@ void Screen::connecting(uint8_t state)
|
||||||
// Connecting dot dot dot (depending on state)
|
// Connecting dot dot dot (depending on state)
|
||||||
strncpy(connectText, "Connecting", connectSize);
|
strncpy(connectText, "Connecting", connectSize);
|
||||||
size_t currentLength = strlen(connectText);
|
size_t currentLength = strlen(connectText);
|
||||||
|
|
||||||
for (uint8_t i = 0; i < state; i++)
|
for (uint8_t i = 0; i < state; i++)
|
||||||
{
|
{
|
||||||
// Checking space
|
// Checking space
|
||||||
|
@ -60,35 +50,28 @@ void Screen::connecting(uint8_t state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Displaying connecting text and setup bar.
|
|
||||||
_screen->clearBuffer();
|
_screen->clearBuffer();
|
||||||
const auto setupPadding = setupHeader();
|
// Component
|
||||||
|
connectingWindow.Update(1, connectText);
|
||||||
// Reactive Component
|
connectingWindow.Display();
|
||||||
connectingWindow.Update(0, connectText);
|
|
||||||
// Displaying
|
// Displaying
|
||||||
connectingWindow.Display(StyleHeight::CENTERED, setupPadding);
|
|
||||||
_screen->sendBuffer();
|
_screen->sendBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen::connected(const char *ipaddress, uint8_t timing)
|
void Screen::connected(const char *ipaddress, uint8_t timing)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Displaying connecting text and setup bar.
|
|
||||||
_screen->clearBuffer();
|
_screen->clearBuffer();
|
||||||
const auto setupPadding = setupHeader();
|
// Component
|
||||||
|
connectedWindow.Update(3, ipaddress);
|
||||||
|
|
||||||
// Reactive Component
|
|
||||||
connectedWindow.Update(2, ipaddress);
|
|
||||||
// Displaying
|
// Displaying
|
||||||
connectedWindow.Display(StyleHeight::CENTERED, setupPadding, 4);
|
connectedWindow.Display();
|
||||||
|
// Creating loading bar
|
||||||
// Creating loading timing
|
if (timing != 0)
|
||||||
if(timing !=0)
|
|
||||||
{
|
{
|
||||||
_screen->setFont(u8g2_font_3x3basic_tr);
|
_screen->setFont(u8g2_font_3x3basic_tr);
|
||||||
_loading.concat(" ");
|
_loading.concat(" ");
|
||||||
_screen->drawButtonUTF8(0, _screen->getDisplayHeight()-5, U8G2_BTN_INV, _screen->getStrWidth(_loading.c_str()), 0, 0, _loading.c_str());
|
_screen->drawButtonUTF8(0, _screen->getDisplayHeight() - 5, U8G2_BTN_INV, _screen->getStrWidth(_loading.c_str()), 0, 0, _loading.c_str());
|
||||||
_screen->setFont(_font);
|
_screen->setFont(_font);
|
||||||
}
|
}
|
||||||
_screen->sendBuffer();
|
_screen->sendBuffer();
|
||||||
|
@ -97,10 +80,9 @@ void Screen::connected(const char *ipaddress, uint8_t timing)
|
||||||
void Screen::loop()
|
void Screen::loop()
|
||||||
{
|
{
|
||||||
_screen->clearBuffer();
|
_screen->clearBuffer();
|
||||||
_screen->setFont(_font);
|
// Component
|
||||||
|
loopWindow.Display();
|
||||||
loopWindow.Display(StyleHeight::CENTERED);
|
// Displaying
|
||||||
|
|
||||||
_screen->sendBuffer();
|
_screen->sendBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,9 +34,6 @@ namespace Display
|
||||||
~Screen();
|
~Screen();
|
||||||
Screen(const Screen &) = delete;
|
Screen(const Screen &) = delete;
|
||||||
Screen &operator=(const Screen &) = delete;
|
Screen &operator=(const Screen &) = delete;
|
||||||
|
|
||||||
// Fonctions
|
|
||||||
uint16_t setupHeader(const uint16_t w_padding = 2, const uint16_t h_padding = 5);
|
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
U8G2_SSD1306_128X64_NONAME_F_HW_I2C *_screen;
|
U8G2_SSD1306_128X64_NONAME_F_HW_I2C *_screen;
|
||||||
|
@ -46,6 +43,7 @@ namespace Display
|
||||||
String _loading;
|
String _loading;
|
||||||
|
|
||||||
// Static Components
|
// Static Components
|
||||||
|
TextBox headerSetup;
|
||||||
Components connectingWindow;
|
Components connectingWindow;
|
||||||
Components connectedWindow;
|
Components connectedWindow;
|
||||||
Components loopWindow;
|
Components loopWindow;
|
||||||
|
|
|
@ -23,37 +23,38 @@ void Components::Add(std::vector<TextBox> boxes)
|
||||||
|
|
||||||
void Components::Update(size_t index, String text)
|
void Components::Update(size_t index, String text)
|
||||||
{
|
{
|
||||||
_boxes[index].updateString(text);
|
_boxes[index].Update(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Components::Display(StyleHeight sh, uint16_t offset, uint16_t padding)
|
void Components::Display()
|
||||||
{
|
{
|
||||||
const auto totalTextSize = _boxes.size() * FONT_SIZE;
|
const auto size_boxes = _boxes.size();
|
||||||
const auto centeredOffset = (Screen::GetInstance().getHeight() - totalTextSize) - offset;
|
size_t i(0);
|
||||||
for (size_t i = 0; i < _boxes.size(); i++)
|
for(auto it = _boxes.begin() ; it!= _boxes.end() ;it++)
|
||||||
{
|
{
|
||||||
const auto x = (_boxes[i].getStyleWidth() == StyleWidth::CENTERED) ? _boxes[i].getX() : _boxes[i].getX()+padding*i;
|
it->Display(size_boxes,i);
|
||||||
switch (sh)
|
if (it+1 != _boxes.end() && ((it+1)->getStyleHeight() == it->getStyleHeight()))
|
||||||
{
|
i++;
|
||||||
case StyleHeight::TOP:
|
else
|
||||||
Screen::GetInstance().getScreen().drawButtonUTF8(x, (i * FONT_SIZE)+offset+padding*i, _boxes[i].getStyle(), _boxes[i].getTextWidth(), padding, padding, _boxes[i].getString());
|
i=0;
|
||||||
break;
|
|
||||||
case StyleHeight::CENTERED:
|
|
||||||
Screen::GetInstance().getScreen().drawButtonUTF8(x, ((centeredOffset / 2)+i*FONT_SIZE)+offset+padding*i, _boxes[i].getStyle(), _boxes[i].getTextWidth(), padding, padding, _boxes[i].getString());
|
|
||||||
break;
|
|
||||||
case StyleHeight::BOTTOM:
|
|
||||||
Screen::GetInstance().getScreen().drawButtonUTF8(x, (centeredOffset + i * FONT_SIZE)+offset+padding*i, _boxes[i].getStyle(), _boxes[i].getTextWidth(), padding, padding, _boxes[i].getString());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TextBox::TextBox(String str, StyleWidth sw, u8g2_uint_t style)
|
TextBox::TextBox()
|
||||||
: _text(str), _style(style), _styleWidth(sw)
|
{}
|
||||||
|
|
||||||
|
TextBox::TextBox(String str, StyleWidth sw, StyleHeight sh, u8g2_uint_t style)
|
||||||
|
: _text(str), _style(style), _styleWidth(sw), _styleHeight(sh)
|
||||||
{
|
{
|
||||||
Calculate();
|
Calculate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TextBox::Update(String str)
|
||||||
|
{
|
||||||
|
_text = str;
|
||||||
|
Calculate();
|
||||||
|
}
|
||||||
|
|
||||||
void TextBox::Calculate()
|
void TextBox::Calculate()
|
||||||
{
|
{
|
||||||
const auto width = Screen::GetInstance().getWidth();
|
const auto width = Screen::GetInstance().getWidth();
|
||||||
|
@ -72,13 +73,23 @@ void TextBox::Calculate()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t TextBox::getX() { return _x; }
|
void TextBox::Display(size_t size, size_t position)
|
||||||
const char *TextBox::getString() { return _text.c_str(); }
|
|
||||||
void TextBox::updateString(String str)
|
|
||||||
{
|
{
|
||||||
_text = str;
|
const auto centeredOffset = (Screen::GetInstance().getHeight() - (size * FONT_SIZE));
|
||||||
Calculate();
|
// Later will be used with padding/margin
|
||||||
|
const auto x = (_styleWidth == StyleWidth::CENTERED) ? _x : _x;
|
||||||
|
switch (_styleHeight)
|
||||||
|
{
|
||||||
|
case StyleHeight::TOP:
|
||||||
|
Screen::GetInstance().getScreen().drawButtonUTF8(x, (position+1)*FONT_SIZE, _style, _textWidth, 0, 0, _text.c_str());
|
||||||
|
break;
|
||||||
|
case StyleHeight::CENTERED:
|
||||||
|
Screen::GetInstance().getScreen().drawButtonUTF8(x, static_cast<uint16_t>((centeredOffset/2)) + (position+1)*FONT_SIZE, _style, _textWidth, 0, 0, _text.c_str());
|
||||||
|
break;
|
||||||
|
case StyleHeight::BOTTOM:
|
||||||
|
Screen::GetInstance().getScreen().drawButtonUTF8(x, centeredOffset + (position+1)*FONT_SIZE, _style, _textWidth, 0, 0, _text.c_str());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
u8g2_uint_t TextBox::getStyle() { return _style; }
|
|
||||||
uint16_t TextBox::getTextWidth() { return _textWidth; }
|
StyleHeight TextBox::getStyleHeight() { return _styleHeight; }
|
||||||
StyleWidth TextBox::getStyleWidth() { return _styleWidth; }
|
|
|
@ -25,19 +25,18 @@ namespace Display
|
||||||
class TextBox
|
class TextBox
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TextBox(String str, StyleWidth sw, u8g2_uint_t style);
|
TextBox();
|
||||||
uint16_t getX();
|
TextBox(String str, StyleWidth sw, StyleHeight sh, u8g2_uint_t style);
|
||||||
const char * getString();
|
void Display(size_t size, size_t position);
|
||||||
void updateString(String str);
|
void Update(String str);
|
||||||
u8g2_uint_t getStyle();
|
StyleHeight getStyleHeight();
|
||||||
uint16_t getTextWidth();
|
|
||||||
StyleWidth getStyleWidth();
|
|
||||||
private:
|
private:
|
||||||
void Calculate();
|
void Calculate();
|
||||||
String _text;
|
String _text;
|
||||||
uint8_t *_font;
|
uint8_t *_font;
|
||||||
u8g2_uint_t _style;
|
u8g2_uint_t _style;
|
||||||
StyleWidth _styleWidth;
|
StyleWidth _styleWidth;
|
||||||
|
StyleHeight _styleHeight;
|
||||||
uint16_t _x;
|
uint16_t _x;
|
||||||
uint16_t _textWidth;
|
uint16_t _textWidth;
|
||||||
};
|
};
|
||||||
|
@ -50,7 +49,7 @@ namespace Display
|
||||||
void Add(TextBox box);
|
void Add(TextBox box);
|
||||||
void Add(std::vector<TextBox> boxes);
|
void Add(std::vector<TextBox> boxes);
|
||||||
void Update(size_t index, String text);
|
void Update(size_t index, String text);
|
||||||
void Display(StyleHeight sh=StyleHeight::TOP, uint16_t offset=0, uint16_t padding=0);
|
void Display();
|
||||||
private:
|
private:
|
||||||
// Boxes
|
// Boxes
|
||||||
std::vector<TextBox> _boxes;
|
std::vector<TextBox> _boxes;
|
||||||
|
|
Loading…
Add table
Reference in a new issue