Hello
If somebody wonders what was problem is JNova codes, so heres the fixed version where the callback works from customContainer to parent. I put three containers to the screen and add own if..else handler for each to the callback handler.
Screen1View.cpp:
#include <gui/screen1_screen/Screen1View.hpp>
#include <touchgfx/Utils.hpp>
Screen1View::Screen1View():
jnCircleCheckBoxCallback(this, &Screen1View::jnCircleCheckBoxHandler) { }
void Screen1View::setupScreen()
{
Screen1ViewBase::setupScreen();
jnCircleCheckBoxA1.setClickCallback(jnCircleCheckBoxCallback);
jnCircleCheckBoxA2.setClickCallback(jnCircleCheckBoxCallback);
jnCircleCheckBoxA3.setClickCallback(jnCircleCheckBoxCallback);
}
void Screen1View::tearDownScreen()
{
Screen1ViewBase::tearDownScreen();
}
void Screen1View::jnCircleCheckBoxHandler(const jnCircleCheckBoxA &button, const ClickEvent &event)
{
if(&button==&jnCircleCheckBoxA1)
touchgfx_printf("Cb button 1 !!\n");
else if(&button==&jnCircleCheckBoxA2)
touchgfx_printf("Cb button 2 !!\n");
else if(&button==&jnCircleCheckBoxA3)
touchgfx_printf("Cb button 3 !!\n");
// Handle button click event (PRESSED or RELEASED)
if (event.getType() == ClickEvent::PRESSED) {
// Handle button pressed event
} else if (event.getType() == ClickEvent::RELEASED) {
// Handle button released event
}
}
Screen1View.hpp:
#ifndef SCREEN1VIEW_HPP
#define SCREEN1VIEW_HPP
#include <gui_generated/screen1_screen/Screen1ViewBase.hpp>
#include <gui/screen1_screen/Screen1Presenter.hpp>
class Screen1View : public Screen1ViewBase
{
public:
Screen1View();
virtual ~Screen1View() {}
virtual void setupScreen();
virtual void tearDownScreen();
void jnCircleCheckBoxHandler(const jnCircleCheckBoxA &button, const ClickEvent &event);
protected:
// Declaring callback type of box and clickEvent
Callback<Screen1View, const jnCircleCheckBoxA&, const ClickEvent&> jnCircleCheckBoxCallback;
};
#endif // SCREEN1VIEW_HPP
jnCircleCheckBoxA.cpp (only clickhandler and callback related codes):
#include <gui/containers/jnCircleCheckBoxA.hpp>
#include <touchgfx/Utils.hpp>
jnCircleCheckBoxA::jnCircleCheckBoxA() :
jnClickedCallback(this, &jnCircleCheckBoxA::jnClickedHandler) {
clickingBox.setClickAction(jnClickedCallback);
}
void jnCircleCheckBoxA::setClickCallback(GenericCallback<const jnCircleCheckBoxA&, const ClickEvent&>& mycallback)
{
clickCallback = &mycallback;
}
void jnCircleCheckBoxA::jnClickedHandler(const Box &l, const ClickEvent &evt) {
if (enabled) {
touchgfx_printf("Click !!\n");
//PRESSED, RELEASED
if (evt.getType() == touchgfx::ClickEvent::PRESSED) {
setChecked(!getChecked());
if (clickCallback != 0) {
//Send signal to view
clickCallback->execute(*this, evt);
}
}
}
}
jnCircleCheckBoxA.hpp (also reduced):
public:
jnCircleCheckBoxA();
virtual ~jnCircleCheckBoxA() {}
void jnClickedHandler(const Box& l, const ClickEvent& evt);
void setClickCallback(GenericCallback<const jnCircleCheckBoxA&, const ClickEvent&>& mycallback);
protected:
GenericCallback<const jnCircleCheckBoxA&, const ClickEvent&>* clickCallback;
//Internal custom container callback for the ELEMENT click listener
Callback<jnCircleCheckBoxA, const Box&, const ClickEvent&> jnClickedCallback;
};
#endif // JNCIRCLECHECKBOXA_HPP
Take care.
Br JTP