Accessing a class object from outside

1k Views Asked by At

I created a basic project on the TouchGFX Designer and wrote a function in my own cpp file using touchgfx library. I want that when the button is clicked ,the function is called to ScreenView.cpp or ScreenViewBase.cpp from my own cpp file and change the color of the box.

This is my cpp file.

#include <touchgfx/Color.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <gui/screen1_screen/Screen1View.hpp>
#include <gui/screen1_screen/Screen1Presenter.hpp>
#include <touchgfx/widgets/Box.hpp>

ChangeColor::ChangeColor()
{
    Screen1View::box1;
    box1.setColor(touchgfx::Color::getColorFrom24BitRGB(51, 168, 35));
    box1.invalidate();
}

This is the Screen1View.cpp where I want to call my function.

#include<gui/ChangeColor.hpp>
#include <touchgfx/Color.hpp>

Screen1View::Screen1View():
    buttonCallback(this, &Screen1View::buttonCallbackHandler)
{

}

void Screen1View::setupScreen()
{
    Screen1ViewBase::setupScreen();
    button1.setAction(buttonCallback);

}

void Screen1View::tearDownScreen()
{
    Screen1ViewBase::tearDownScreen();
}
void Screen1View::buttonCallbackHandler(const touchgfx::AbstractButton& src)
{
    if (&src == &button1)
    {
        //Interaction1
        //When button1 clicked execute C++ code
        //Execute C++ code
        //ChangeColor();
        ChangeColor();
    
    }
}

and this is the Screen1BaseView.hpp where the box is declared

#define SCREEN1VIEWBASE_HPP

#include <gui/common/FrontendApplication.hpp>
#include <mvp/View.hpp>
#include <gui/screen1_screen/Screen1Presenter.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/widgets/Button.hpp>

class Screen1ViewBase : public touchgfx::View<Screen1Presenter>
{
public:
    Screen1ViewBase();
    virtual ~Screen1ViewBase() {}
    virtual void setupScreen();

protected:
    FrontendApplication& application() {
        return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
    }

    /*
     * Member Declarations
     */
    touchgfx::Box __background;
    touchgfx::Box box1;
    touchgfx::Button button1;

private:

};

I can't access the box. Is there way to do it?

1

There are 1 best solutions below

5
On

TouchGFX uses MPV architecture, i.e. Model-Presenter-View. The point is Model and View can not access each other.

In your case, your cpp file play role as a model, so it's not allowed to access element in View. That's the reason why you can't access. You need a Presenter to handle the connection.