mirror of
https://github.com/s00500/ESPUI.git
synced 2024-12-23 05:50:49 +00:00
Added description and usage for the extended callback functionality
This commit is contained in:
parent
511840fa97
commit
c303668a3c
50
README.md
50
README.md
@ -146,24 +146,40 @@ more program memory to work with.
|
||||
|
||||
## Documentation
|
||||
|
||||
The heart of ESPUI is
|
||||
[ESPAsyncWebserver](https://github.com/me-no-dev/ESPAsyncWebServer). ESPUI's
|
||||
frontend is based on [Skeleton CSS](http://getskeleton.com/) and jQuery-like
|
||||
lightweight [zepto.js](https://zeptojs.com/) for handling events. The
|
||||
communication between the ESP and the client browser works using web
|
||||
sockets. ESPUI does not need network access and can be used in standalone access
|
||||
point mode, all resources are loaded directly from the ESPs memory.
|
||||
The heart of ESPUI is [ESPAsyncWebserver](https://github.com/me-no-dev/ESPAsyncWebServer). ESPUI's frontend is based on [Skeleton CSS](http://getskeleton.com/) and jQuery-like lightweight [zepto.js](https://zeptojs.com/) for handling events. The communication between the ESP and the client browser works using web sockets. ESPUI does not need network access and can be used in standalone access point mode, all resources are loaded directly from the ESPs memory.
|
||||
|
||||
This section will explain in detail how the Library is to be used from the
|
||||
Arduino code side. In the arduino `setup()` routine the interface can be customised by adding UI Elements.
|
||||
This is done by calling the corresponding library methods on the Library object
|
||||
`ESPUI`. Eg: `ESPUI.button("button", &myCallback);` creates a button in the
|
||||
interface that calls the `myCallback(Control *sender, int value)` function when changed. All buttons and
|
||||
items call their callback whenever there is a state change from them. This means
|
||||
the button will call the callback when it is pressed and also again when it is
|
||||
released. To separate different events an integer number with the event name is
|
||||
passed to the callback function that can be handled in a `switch(){}case{}`
|
||||
statement.
|
||||
This section will explain in detail how the Library is to be used from the Arduino code side. In the arduino `setup()` routine the interface can be customised by adding UI Elements. This is done by calling the corresponding library methods on the Library object `ESPUI`. Eg: `ESPUI.button("button", &myCallback);` creates a button in the interface that calls the `myCallback(Control *sender, int eventname)` function when changed. All buttons and items call their callback whenever there is a state change from them. This means the button will call the callback when it is pressed and also again when it is released. To separate different events an integer number with the event name is passed to the callback function that can be handled in a `switch(){}case{}` statement.
|
||||
Alternativly you may use the extended callback funtion which provides three parameters to the callback function `myCallback(Control *sender, int eventname, void * UserParameter)`. The `UserParameter` is provided as part of the `ESPUI.addControl` and allows the user to define contextual information that is to be presented to the callback function in an unmodified form.
|
||||
Here is an example of using the UserParameter to hold the `this` pointer to an object instance, providing a mechanism for sending the event to a specific object without the need for a switch / map translation of the Sender Id tp object reference. Defining an extended callback is only supported via the `ESPUI.addContol` method. The below example creates a button and uses a lambda function to implicitly define `MyExtendedCallback` which then invokes a more specialized button callback handler.
|
||||
```
|
||||
ButtonElementId = ESPUI.addControl(
|
||||
ControlType::Button,
|
||||
ButtonLabel.c_str(),
|
||||
" Button Face Text ",
|
||||
ControlColor::None,
|
||||
ParentElementId,
|
||||
[](Control *sender, int eventname, void* param)
|
||||
{
|
||||
if(param)
|
||||
{
|
||||
reinterpret_cast<YourClassName*>(param)->myButtonCallback(sender, eventname);
|
||||
}
|
||||
},
|
||||
this);
|
||||
```
|
||||
```
|
||||
void YourClassName::myButtonCallback(Control* sender, int eventname)
|
||||
{
|
||||
if (eventname == B_DOWN)
|
||||
{
|
||||
// Handle the button down event
|
||||
}
|
||||
else if (eventname == B_UP)
|
||||
{
|
||||
// Handle the button up event
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
#### Button
|
||||
|
Loading…
Reference in New Issue
Block a user