mirror of
https://gitee.com/jiuyilian/embedded-framework.git
synced 2025-01-06 10:16:51 -05:00
118 lines
3.9 KiB
C++
Executable File
118 lines
3.9 KiB
C++
Executable File
/*
|
|
* @Descripttion: Api of gui in open source.
|
|
* @Date: 2022-08-02 16:02:16
|
|
* @LastEditTime: 2022-08-09 15:21:07
|
|
*/
|
|
#ifndef GUI_ENGINE_H
|
|
#define GUI_ENGINE_H
|
|
#include "ReturnCode.h"
|
|
#include <memory>
|
|
#define TR_TEXT(text) GuiEngine::GetInstance()->GetTranslateText(text)
|
|
#if 0
|
|
#define GUI_SET_IMAGE_FILE_SYSTEM_SRC(widget, src) widget->ImageSetSrc(&src); // use image src pointer.
|
|
#else
|
|
// #define GUI_SET_IMAGE_FILE_SYSTEM_SRC(widget, src) widget->ImageSetSrc("A:./"#src); // use image file.
|
|
#define GUI_SET_IMAGE_FILE_SYSTEM_SRC(widget, src) widget->ImageSetSrc(GUI_IMAGES_PATH#src); // use image file.
|
|
#endif
|
|
class Widget
|
|
{
|
|
public:
|
|
Widget() = default;
|
|
virtual ~Widget() {}
|
|
// virtual bool IsValid() { return false; }
|
|
// virtual std::string Name() { return "null"; }
|
|
// virtual void SetWidget(Widget *p) {}
|
|
// virtual int GetCoordX() { return 0; }
|
|
// virtual int GetCoordY() { return 0; }
|
|
virtual std::shared_ptr<Widget> NewImage(void) { return std::make_shared<Widget>(); }
|
|
virtual std::shared_ptr<Widget> NewLabel(void) { return std::make_shared<Widget>(); }
|
|
virtual void ImageSetSrc(const void *src) {}
|
|
virtual void SetSize(const unsigned int &width, const unsigned int &height) {}
|
|
virtual void Load(void) {}
|
|
virtual void SetText(const char *text) {}
|
|
virtual void Delete(void) {}
|
|
};
|
|
class Context
|
|
{
|
|
public:
|
|
Context()
|
|
{
|
|
eventCallback = nullptr;
|
|
ctx = nullptr;
|
|
// cmd = KeyCmd::KEY_CMD_DEFAULT;
|
|
}
|
|
std::unique_ptr<Widget> widget;
|
|
void (*eventCallback)(std::shared_ptr<Context> &ctx);
|
|
bool (*timerCallback)(void *);
|
|
// KeyCmd cmd;
|
|
void *ctx;
|
|
|
|
public:
|
|
virtual ~Context()
|
|
{
|
|
}
|
|
virtual int Type() { return 0; }
|
|
void WidgetReset(Widget *p)
|
|
{
|
|
widget.reset(p);
|
|
}
|
|
};
|
|
template <typename T>
|
|
class ContextV2 : public Context
|
|
{
|
|
public:
|
|
T data;
|
|
|
|
public:
|
|
ContextV2(T value)
|
|
: data(value)
|
|
{
|
|
}
|
|
virtual ~ContextV2() = default;
|
|
};
|
|
class GuiEngine
|
|
{
|
|
public:
|
|
GuiEngine() = default;
|
|
virtual ~GuiEngine() = default;
|
|
/**
|
|
* @brief Get the Instance object
|
|
* Return reference for runing faster. Usage : GuiEngine::GetInstance()->Init();
|
|
* Don't use GuiEngine like this:
|
|
* std::shared_ptr<GuiEngine> &log = GuiEngine::GetInstance();
|
|
* or std::shared_ptr<GuiEngine> log = GuiEngine::GetInstance();
|
|
* @param impl
|
|
* @return std::shared_ptr<GuiEngine>&
|
|
*/
|
|
static std::shared_ptr<GuiEngine> &GetInstance(std::shared_ptr<GuiEngine> *impl = nullptr)
|
|
{
|
|
static auto instance = std::make_shared<GuiEngine>();
|
|
if (impl)
|
|
{
|
|
/**
|
|
* @brief
|
|
* The non-thread-safe changing is only for gtest.
|
|
*/
|
|
instance = *impl;
|
|
}
|
|
return instance;
|
|
}
|
|
/**
|
|
* @brief
|
|
*
|
|
* @param width width of screen
|
|
* @param height height of screen
|
|
* @param appInit for app to init the first window
|
|
*/
|
|
virtual bool Init(const unsigned int &width, const unsigned int &height, void (*appInit)()) { return false; }
|
|
virtual void UnInit() {}
|
|
virtual const char *GetTranslateText(const char *trText) { return "nullptr"; }
|
|
virtual std::shared_ptr<Widget> NewWidget(void) { return std::make_shared<Widget>(); }
|
|
virtual std::shared_ptr<Widget> NewPage(void) { return std::make_shared<Widget>(); }
|
|
virtual std::shared_ptr<Widget> NewImage(const std::shared_ptr<Widget> &parent) { return std::make_shared<Widget>(); }
|
|
// virtual std::shared_ptr<Widget> PageOpen(const std::string &windowName) { return std::make_shared<Widget>(); }
|
|
// virtual SF_CODE_S PageColse(const std::shared_ptr<Widget> &page) { return CreateReturnCode(SF_CODE_OK); }
|
|
virtual void IdleQueue(const std::shared_ptr<Context> &ctx) {}
|
|
};
|
|
bool CreateGuiEngineImpl();
|
|
#endif |