There is an abstract class
class FormElement
{
public:
FormElement(const String &text, void (*f)(void), int x, int y) : m_text(text), m_f(f), m_x(x), m_y(y) {}
virtual ~FormElement() = default;
virtual void display() const = 0;
void callFunction()
{
m_f();
}
private:
protected:
String m_text;
void (*m_f)(void);
int m_x;
int m_y;
};
/* Text message */
class TextMessage0 : FormElement
{
public:
using FormElement::FormElement;
void display() const override;
void display() const override
{
_gfx.print(m_text, m_x, m_y);
}
};
/* TextBox */
class TextBox0 : FormElement
{
public:
using FormElement::FormElement;
void display() const override
{
}
};
/* Label */
class Label0 : FormElement
{
public:
using FormElement::FormElement;
std::function<void()> onClick;
void display() const override
{
}
};
/* Button */
class Button0 : FormElement
{
public:
using FormElement::FormElement;
std::function<void()> onClick;
void display() const override
{
}
};
/* Checkbox */
class Checkbox0 : FormElement
{
public:
using FormElement::FormElement;
bool isChecked = false;
void display() const override
{
if (isChecked)
{
}
else
{
}
}
};
namespace
{
std::vector<FormElement*> formElements;
};
inline void addElement(FormElement* element)
{
formElements.push_back(element);
}
inline void displayFormElement()
{
u8g2.clearBuffer(); // -->
for (auto& element : formElements)
{
element->display();
}
u8g2.sendBuffer(); // <--
}
how to add a TextMessage0 element via addElement?