LVGLPlusPlus
C++ library on top of the lovely LVGL project.
|
lvppBase is the root of the C++ library LVGLPlusPlus. It strives to create consistent ways to manipulate a variety of LVGL-based widgets in a consistent manner - hiding the details away from the user where possible. More...
#include <lvppBase.h>
Public Member Functions | |
lvppBase (const char *fName, const char *oType) | |
Construct a new lvpp Base object. | |
~lvppBase () | |
void | createObj (lv_obj_t *o) |
Create the handlers and store the newly created object. | |
lv_obj_t * | getObj (void) |
Get the Obj object. | |
lv_obj_t * | getLabelObj (void) |
Get the label object. | |
virtual void | setSize (lv_coord_t width, lv_coord_t height) |
Set the Size object. Most of the time, LVGL does a great job of setting a sane size, but manipulation of things like the text or the font size can cause this to no longer be a good size. It is a common use pattern to instantiate a widget and then use setSize() and align() to place them in your user interface as needed. | |
void | align (lv_align_t align, lv_coord_t x_ofs, lv_coord_t y_ofs) |
Change the x/y location of the object. | |
void | setFontSize (uint8_t points) |
Set the Font Size for the object in simple 'points'. | |
void | setFont (const lv_font_t *pF) |
Set the Font to be used. This is a more complete/complex version of setFontSize(). The fact that the font pointer is required at least means the user knows the font exists. | |
void | setBGColor (lv_color_t color) |
Set the background color of the object. | |
void | setColorGradient (lv_color_t col1, lv_color_t col2, lv_grad_dir_t direction) |
Sets a Color Gradient from col1 to col2 in a vertical or horizontal direction. The gradient is place on the indicator for lvppBar, lvppSlider, and lvppArc. The graident is placed on the 'main' area of all other objects. | |
virtual void | setText (const char *pText) |
Set the Text for the primary text label. For a button, for instance, this is the text on top of the button. | |
std::string | getText () |
Get the Text from the object/label and put it in a std::string. | |
void | setTextAlign (lv_align_t align, lv_coord_t xoff, lv_coord_t yoff) |
Set the Text Alignment. This allows the object's primary label to be moved from its 'center' position. | |
void | setTextColor (lv_color_t newColor) |
Set the Text Color of the primary label object. | |
void | setLabelJustificationAlignment (lv_text_align_t _align) |
Set the Label's text alignment (left/right/center) | |
void | setLabelColorizationEnabled (bool bEnable=true) |
Turn on or off inline text colorization. To use colors inline, simply use #RRGGBB in the text where the R, G, and B are hex values. Be sure to have a space before and after. | |
virtual void | setAdjText (const char *pText, lv_coord_t x_ofs=-10000, lv_coord_t y_ofs=-10000) |
Set the text for the adjacent text label. This label is not enabled by default. Setting this text will create and enable the adjacent label object. The label's position can be set, optionally, as well. | |
void | setAdjTextColor (lv_color_t newColor) |
Set the Adjacent text color. | |
void | setAdjBGColor (lv_color_t color) |
set the background color for the adjacent text | |
void | setAdjColorGradient (lv_color_t col1, lv_color_t col2, lv_grad_dir_t direction) |
Sets a Color Gradient from col1 to col2 in a vertical or horizontal direction. | |
void | setAdjFont (const lv_font_t *pF) |
Set the Font to be used for the adjacent text. | |
void | setAdjJustificationAlignment (lv_text_align_t _align) |
Set the adjacent Label's text alignment (left/right/center) | |
virtual void | onClicked () |
Callback that derived objects can use to get notification when the object is clicked. | |
virtual void | internalOnClicked () |
Internal version of the onClicked() callback which is used for other derived internal objects in the library. | |
virtual void | onValueChanged () |
Callback that derived objects can use to get notification when the value changes of an object. | |
virtual void | internalOnValueChanged () |
Internal version of the onValueChanged() callback which is used for other derived internal objects in the library. | |
void | setFriendlyName (const char *pName) |
Set the Friendly Name of the object. This is the name given in the constructor's fName parameter and is unlikely to be changed. However, it can be via this method. | |
std::string | getFriendlyName () |
Get the Friendly Name of the object. | |
std::string | getObjType () |
Get the Obj Type. | |
const char * | whoAmI (void) |
Utility useful for dumping the friendly name and object type if needed. | |
void | setCallbackOnClicked (std::function< void()> cbF) |
Uses a lambda callback for when an object is clicked. | |
void | setCallbackOnValueChanged (std::function< void()> cbF) |
Uses a lambda callback for when an object value changes. | |
virtual void | setNewParent (lv_obj_t *pNewParent) |
Changes the parent object on the fly. Used primarily for lvppScreen::addObject(). Sets parents of adjacent label, value label, and label appropriately. | |
Static Public Member Functions | |
static const char * | getEventName (lv_event_code_t code) |
Get the Event Name from a given event code. Translate it to text, essentially. | |
static bool | isUnknownCode (lv_event_code_t code) |
Check to see if an event code is valid or not. Utility function. | |
Protected Member Functions | |
void | setObjType (const char *pType) |
void | baseEventHandler (lv_event_t *event) |
Main event handler loop for all events. This handler makes calls for onClicked() and onValueChanged() | |
virtual void | eventHandler (lv_event_t *event) |
Any events not handled by baseEventHandler come here. Can be overridden by a derived class. | |
Static Protected Member Functions | |
static void | lvCallback (lv_event_t *event) |
Static member to handle all inbound callback events. Used to "route" event handling to the appropriate C++ object. | |
static void | initEventNames (void) |
One-time initialization of the event names array. | |
Protected Attributes | |
lv_obj_t * | label |
Primary label. | |
lv_obj_t * | adjLabel |
For items that have a label 'nearby' (adjacent label) | |
std::function< void()> | cbOnClicked =nullptr |
Start without a lambda callback. | |
std::function< void()> | cbOnValueChanged =nullptr |
Start without a lambda callback. | |
lv_obj_t * | obj |
The LVGL object that was created for this widget. | |
lv_obj_t * | objParent |
Any parent object (following same principle as LVGL here) | |
std::string | objType |
std::string | friendlyName |
lv_style_t | style_obj |
Main style object - unsure if I'm handling all of the style bit correctly. | |
Static Protected Attributes | |
static bool | bEventNamesInitComplete = false |
Status of the event names table to avoid re-processing. | |
lvppBase is the root of the C++ library LVGLPlusPlus. It strives to create consistent ways to manipulate a variety of LVGL-based widgets in a consistent manner - hiding the details away from the user where possible.
The topmost concepts for lvppBase are:
lvppBase::lvppBase | ( | const char * | fName, |
const char * | oType | ||
) |
Construct a new lvpp Base object.
fName | Internal object name. This is generally used in findObj() or lvppScreen |
oType | The type of the object being created. This is primarily internal, but can be used to know the category/type of the object and can be obtained via getObjType() if needed. |
lvppBase::~lvppBase | ( | ) |
void lvppBase::align | ( | lv_align_t | align, |
lv_coord_t | x_ofs, | ||
lv_coord_t | y_ofs | ||
) |
Change the x/y location of the object.
align | This is an LVGL notion of alignment type. It is a very rich concept of alignment that does not simply use x/y screen coordinates but uses the x/y as an offset from some other 'anchor'. In concrete terms, this is one of LV_ALIGN_CENTER, LV_ALIGN_TOP_MID, LV_ALIGN_BOTTON_RIGHT, etc. |
x_ofs | The x offset from the align point. |
y_ofs | The y offset from the align point. |
|
protected |
Main event handler loop for all events. This handler makes calls for onClicked() and onValueChanged()
event | LVGL lv_event_t type event to be handled. |
void lvppBase::createObj | ( | lv_obj_t * | o | ) |
Create the handlers and store the newly created object.
The pattern here is that any derived widget type will, in its constructor, call createObj() with a pointer to the appropriate LVGL object type. For instance createObj(lv_dropdown_create(objParent)); This effectively make it the responsibility of the derived class to create the right type of object and pass it to createObj() so that the base class can hang on to that handle and then setup event callbacks for the object.
o | The lv_obj_t pointer created by the derived class. Might this be better named storeNewObj() - but lots of refacotring to do if so. |
|
inlineprotectedvirtual |
Any events not handled by baseEventHandler come here. Can be overridden by a derived class.
event | LVGL lv_event_t type event to be handled. |
|
static |
Get the Event Name from a given event code. Translate it to text, essentially.
code | An lv_event_code_t type from LVGL. |
|
inline |
Get the Friendly Name of the object.
|
inline |
Get the label object.
|
inline |
Get the Obj object.
|
inline |
Get the Obj Type.
std::string lvppBase::getText | ( | ) |
Get the Text from the object/label and put it in a std::string.
|
staticprotected |
One-time initialization of the event names array.
|
inlinevirtual |
Internal version of the onClicked() callback which is used for other derived internal objects in the library.
Reimplemented in lvppCycleButton.
|
inlinevirtual |
Internal version of the onValueChanged() callback which is used for other derived internal objects in the library.
Reimplemented in lvppBaseWithValue.
|
static |
Check to see if an event code is valid or not. Utility function.
code | Event code from LVGL |
|
staticprotected |
Static member to handle all inbound callback events. Used to "route" event handling to the appropriate C++ object.
event | An LVGL lv_event_t event object pointer to be handled. |
|
inlinevirtual |
Callback that derived objects can use to get notification when the object is clicked.
|
inlinevirtual |
Callback that derived objects can use to get notification when the value changes of an object.
Reimplemented in lvppFullImageToggleButton.
void lvppBase::setAdjBGColor | ( | lv_color_t | color | ) |
set the background color for the adjacent text
color | lv_color_t to describe the background color. |
void lvppBase::setAdjColorGradient | ( | lv_color_t | col1, |
lv_color_t | col2, | ||
lv_grad_dir_t | direction | ||
) |
Sets a Color Gradient from col1 to col2 in a vertical or horizontal direction.
col1 | First lv_color_t color in the gradient |
col2 | Second lv_color_t color in the gradient |
direction | gradient color runs col1->col2 either LV_GRAD_DIR_VER (top to bottom) or LV_GRAD_DIR_HOR (left to right) |
void lvppBase::setAdjFont | ( | const lv_font_t * | pF | ) |
Set the Font to be used for the adjacent text.
pF | A pointer to a valid lv_font_t to be used for the object. |
void lvppBase::setAdjJustificationAlignment | ( | lv_text_align_t | _align | ) |
Set the adjacent Label's text alignment (left/right/center)
_align | an lv_text_align_t like LV_TEXT_ALIGN_CENTER |
|
virtual |
Set the text for the adjacent text label. This label is not enabled by default. Setting this text will create and enable the adjacent label object. The label's position can be set, optionally, as well.
pText | Pointer to the text to use. |
x_ofs | X offset from the center of the main object. |
y_ofs | Y offset from the center of the main object. |
void lvppBase::setAdjTextColor | ( | lv_color_t | newColor | ) |
Set the Adjacent text color.
newColor | lv_color_t value for the new color of the adjacent text |
void lvppBase::setBGColor | ( | lv_color_t | color | ) |
Set the background color of the object.
color | lv_color_t color to be used for the background. |
|
inline |
Uses a lambda callback for when an object is clicked.
This method allows users to instantiate most objects without deriving their own class from them. They can instantiate the object, set its font, size, alignment, and text all using the built in methods and they can receive a callback through the use of this lambda callback methodology.
cbF | This is a std::function<> lambda defining the callback 'inline'. |
|
inline |
Uses a lambda callback for when an object value changes.
This method allows users to instantiate most objects without deriving their own class from them. They can instantiate the object, set its font, size, alignment, and text all using the built in methods and they can receive a callback through the use of this lambda callback methodology.
cbF | This is a std::function<> lambda defining the callback 'inline'. |
void lvppBase::setColorGradient | ( | lv_color_t | col1, |
lv_color_t | col2, | ||
lv_grad_dir_t | direction | ||
) |
Sets a Color Gradient from col1 to col2 in a vertical or horizontal direction. The gradient is place on the indicator for lvppBar, lvppSlider, and lvppArc. The graident is placed on the 'main' area of all other objects.
col1 | First lv_color_t color in the gradient |
col2 | Second lv_color_t color in the gradient |
direction | gradient color runs col1->col2 either LV_GRAD_DIR_VER (top to bottom) or LV_GRAD_DIR_HOR (left to right) |
void lvppBase::setFont | ( | const lv_font_t * | pF | ) |
Set the Font to be used. This is a more complete/complex version of setFontSize(). The fact that the font pointer is required at least means the user knows the font exists.
pF | A pointer to a valid lv_font_t to be used for the object. |
void lvppBase::setFontSize | ( | uint8_t | points | ) |
Set the Font Size for the object in simple 'points'.
NOTE: This makes easy work of changing font sizes, but its downfall is that the size can be given for font sizes that don't exist for several reasons. Be forewarned.
points | The desired point size for the object. |
void lvppBase::setFriendlyName | ( | const char * | pName | ) |
Set the Friendly Name of the object. This is the name given in the constructor's fName parameter and is unlikely to be changed. However, it can be via this method.
pName | pointer to a new friendly name. |
void lvppBase::setLabelColorizationEnabled | ( | bool | bEnable = true | ) |
Turn on or off inline text colorization. To use colors inline, simply use #RRGGBB in the text where the R, G, and B are hex values. Be sure to have a space before and after.
bEnable | Turn on or off inline text colorization. Default is true. |
void lvppBase::setLabelJustificationAlignment | ( | lv_text_align_t | _align | ) |
Set the Label's text alignment (left/right/center)
_align | an lv_text_align_t like LV_TEXT_ALIGN_CENTER |
|
virtual |
Changes the parent object on the fly. Used primarily for lvppScreen::addObject(). Sets parents of adjacent label, value label, and label appropriately.
pNewParent | pointer to the new parent. |
Reimplemented in lvppBaseWithValue.
|
inlineprotected |
|
virtual |
Set the Size object. Most of the time, LVGL does a great job of setting a sane size, but manipulation of things like the text or the font size can cause this to no longer be a good size. It is a common use pattern to instantiate a widget and then use setSize() and align() to place them in your user interface as needed.
width | New width of the widget. |
height | New height of the widget. |
Reimplemented in lvppImage.
|
virtual |
Set the Text for the primary text label. For a button, for instance, this is the text on top of the button.
pText | char pointer to the text |
Reimplemented in lvppLabel.
void lvppBase::setTextAlign | ( | lv_align_t | align, |
lv_coord_t | xoff, | ||
lv_coord_t | yoff | ||
) |
Set the Text Alignment. This allows the object's primary label to be moved from its 'center' position.
align | This is an LVGL notion of alignment type. It is a very rich concept of alignment that does not simply use x/y screen coordinates but uses the x/y as an offset from some other 'anchor'. In concrete terms, this is one of LV_ALIGN_CENTER, LV_ALIGN_TOP_MID, LV_ALIGN_BOTTON_RIGHT, etc. |
xoff | The x offset from the align point. |
yoff | The y offset from the align point. |
void lvppBase::setTextColor | ( | lv_color_t | newColor | ) |
Set the Text Color of the primary label object.
newColor | An lv_color_t for the desired color to use. |
const char * lvppBase::whoAmI | ( | void | ) |
Utility useful for dumping the friendly name and object type if needed.
friendlyName(objectType)
|
protected |
For items that have a label 'nearby' (adjacent label)
|
staticprotected |
Status of the event names table to avoid re-processing.
Uncommenting the definition of LOG_EVENTS will make for a noisy logging of all events. This can be useful if things feel upside down when you're adding features or something.
|
protected |
Start without a lambda callback.
|
protected |
Start without a lambda callback.
|
protected |
|
protected |
Primary label.
|
protected |
The LVGL object that was created for this widget.
|
protected |
Any parent object (following same principle as LVGL here)
|
protected |
|
protected |
Main style object - unsure if I'm handling all of the style bit correctly.