986 lines
25 KiB
C++
986 lines
25 KiB
C++
/*
|
|
* Copyright (C) EdgeTX
|
|
*
|
|
* Based on code named
|
|
* opentx - https://github.com/opentx/opentx
|
|
* th9x - http://code.google.com/p/th9x
|
|
* er9x - http://code.google.com/p/er9x
|
|
* gruvin9x - http://code.google.com/p/gruvin9x
|
|
*
|
|
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#define LVGL_METATABLE "LVGL*"
|
|
#define LVGL_SIMPLEMETATABLE "LVGLSIMPLE*"
|
|
|
|
class LuaScriptManager;
|
|
class LvglDialog;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
struct LvglParamFuncOrValue
|
|
{
|
|
public:
|
|
int function;
|
|
union {
|
|
LcdFlags flags;
|
|
coord_t coord;
|
|
uint32_t value;
|
|
};
|
|
|
|
uint32_t currVal = -1;
|
|
|
|
void parse(lua_State *L);
|
|
void forceUpdate() { currVal = -1; }
|
|
bool changedColor(LcdFlags newFlags);
|
|
bool changedFont(LcdFlags newFlags) { return changedColor(newFlags);}
|
|
bool changedValue(uint32_t v);
|
|
void clearRef(lua_State *L);
|
|
};
|
|
|
|
struct LvglParamFuncOrString
|
|
{
|
|
public:
|
|
int function;
|
|
std::string txt;
|
|
uint32_t txtHash = -1;
|
|
|
|
void parse(lua_State *L);
|
|
void forceUpdate() { txtHash = -1; }
|
|
bool changedText(const char* s);
|
|
const char* chars() const { return txt.c_str(); }
|
|
void clearRef(lua_State *L);
|
|
|
|
private:
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglGetSetParams
|
|
{
|
|
public:
|
|
LvglGetSetParams() {}
|
|
|
|
protected:
|
|
int getFunction = LUA_REFNIL;
|
|
int setFunction = LUA_REFNIL;
|
|
|
|
bool parseGetSetParam(lua_State *L, const char *key);
|
|
void clearGetSetRefs(lua_State *L);
|
|
};
|
|
|
|
class LvglTextParams
|
|
{
|
|
public:
|
|
LvglTextParams() {}
|
|
|
|
protected:
|
|
LvglParamFuncOrString txt = { .function = LUA_REFNIL, .txt = ""};
|
|
LvglParamFuncOrValue font = { .function = LUA_REFNIL, .flags = FONT(STD)};
|
|
|
|
bool parseTextParam(lua_State *L, const char *key);
|
|
void clearTextRefs(lua_State *L);
|
|
};
|
|
|
|
class LvglMinMaxParams
|
|
{
|
|
public:
|
|
LvglMinMaxParams(int min, int max) : min(min), max(max) {}
|
|
|
|
protected:
|
|
int min;
|
|
int max;
|
|
|
|
bool parseMinMaxParam(lua_State *L, const char *key);
|
|
};
|
|
|
|
class LvglTitleParam
|
|
{
|
|
public:
|
|
LvglTitleParam() {}
|
|
|
|
protected:
|
|
std::string title;
|
|
|
|
bool parseTitleParam(lua_State *L, const char *key);
|
|
};
|
|
|
|
class LvglMessageParam
|
|
{
|
|
public:
|
|
LvglMessageParam() {}
|
|
|
|
protected:
|
|
std::string message;
|
|
|
|
bool parseMessageParam(lua_State *L, const char *key);
|
|
};
|
|
|
|
class LvglRoundedParam
|
|
{
|
|
public:
|
|
LvglRoundedParam() {}
|
|
|
|
protected:
|
|
bool rounded = false;
|
|
|
|
bool parseRoundedParam(lua_State *L, const char *key);
|
|
};
|
|
|
|
class LvglThicknessParam
|
|
{
|
|
public:
|
|
LvglThicknessParam() {}
|
|
|
|
protected:
|
|
coord_t thickness = 1;
|
|
|
|
bool parseThicknessParam(lua_State *L, const char *key);
|
|
};
|
|
|
|
class LvglValuesParam
|
|
{
|
|
public:
|
|
LvglValuesParam() {}
|
|
|
|
protected:
|
|
std::vector<std::string> values;
|
|
|
|
bool parseValuesParam(lua_State *L, const char *key);
|
|
};
|
|
|
|
class LvglScrollableParams
|
|
{
|
|
public:
|
|
LvglScrollableParams() {}
|
|
|
|
protected:
|
|
bool showScrollBar = true;
|
|
lv_dir_t scrollDir = LV_DIR_ALL;
|
|
int scrollToFunction = LUA_REFNIL;
|
|
int scrolledFunction = LUA_REFNIL;
|
|
|
|
bool parseScrollableParam(lua_State *L, const char *key);
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetObjectBase
|
|
{
|
|
public:
|
|
LvglWidgetObjectBase(const char* meta);
|
|
virtual ~LvglWidgetObjectBase() {}
|
|
|
|
int getRef(lua_State *L);
|
|
void push(lua_State *L);
|
|
void saveLvglObjectRef(int ref);
|
|
|
|
virtual bool callRefs(lua_State *L);
|
|
virtual void clearRefs(lua_State *L);
|
|
void clearChildRefs(lua_State *L);
|
|
|
|
virtual void show() = 0;
|
|
virtual void hide() = 0;
|
|
virtual void enable() {};
|
|
virtual void disable() {};
|
|
virtual void close() {};
|
|
|
|
virtual coord_t getScrollX() { return 0; }
|
|
virtual coord_t getScrollY() { return 0; }
|
|
|
|
virtual void setColor(LcdFlags newColor) {}
|
|
virtual void setOpacity(uint8_t newOpa) {}
|
|
virtual void setPos(coord_t x, coord_t y) {}
|
|
virtual void setSize(coord_t w, coord_t h) {}
|
|
|
|
void create(lua_State *L, int index);
|
|
void update(lua_State *L);
|
|
|
|
virtual Window *getWindow() const = 0;
|
|
|
|
static LvglWidgetObjectBase *checkLvgl(lua_State *L, int index, bool required = false);
|
|
|
|
void clear();
|
|
|
|
protected:
|
|
int luaRef = LUA_REFNIL;
|
|
std::vector<int> lvglObjectRefs;
|
|
const char* metatable = nullptr;
|
|
bool clearRequest = false;
|
|
LuaScriptManager *lvglManager = nullptr;
|
|
coord_t x = 0, y = 0, w = LV_SIZE_CONTENT, h = LV_SIZE_CONTENT;
|
|
int getVisibleFunction = LUA_REFNIL;
|
|
int getSizeFunction = LUA_REFNIL;
|
|
int getPosFunction = LUA_REFNIL;
|
|
LvglParamFuncOrValue color = { .function = LUA_REFNIL, .flags = COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX)};
|
|
LvglParamFuncOrValue opacity = { .function = LUA_REFNIL, .value = LV_OPA_COVER};
|
|
|
|
virtual void build(lua_State *L);
|
|
virtual void refresh();
|
|
|
|
virtual void parseParam(lua_State *L, const char *key);
|
|
|
|
void getParams(lua_State *L, int index);
|
|
|
|
void pcallSimpleFunc(lua_State *L, int funcRef);
|
|
bool pcallUpdateBool(lua_State *L, int getFuncRef,
|
|
std::function<void(bool)> update);
|
|
bool pcallUpdate1Int(lua_State *L, int getFuncRef,
|
|
std::function<void(int)> update);
|
|
bool pcallUpdate2Int(lua_State *L, int getFuncRef,
|
|
std::function<void(int, int)> update);
|
|
int pcallGetIntVal(lua_State *L, int getFuncRef);
|
|
int pcallGetOptIntVal(lua_State *L, int getFuncRef, int defVal);
|
|
void pcallSetIntVal(lua_State *L, int setFuncRef, int val);
|
|
const char* pcallGetStringVal(lua_State *L, int getFuncRef);
|
|
void pcallSetStringVal(lua_State *L, int setFuncRef, const char* val);
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglSimpleWidgetObject : public LvglWidgetObjectBase
|
|
{
|
|
public:
|
|
LvglSimpleWidgetObject() : LvglWidgetObjectBase(LVGL_SIMPLEMETATABLE) {}
|
|
|
|
void show() override;
|
|
void hide() override;
|
|
|
|
void setPos(coord_t x, coord_t y) override;
|
|
void setSize(coord_t w, coord_t h) override;
|
|
|
|
Window *getWindow() const override { return nullptr; }
|
|
|
|
protected:
|
|
lv_obj_t* lvobj = nullptr;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetLabel : public LvglSimpleWidgetObject, public LvglTextParams
|
|
{
|
|
public:
|
|
LvglWidgetLabel() : LvglSimpleWidgetObject() {}
|
|
|
|
void setText(const char *s);
|
|
void setColor(LcdFlags newColor) override;
|
|
void setFont(LcdFlags font);
|
|
void setAlign(LcdFlags align);
|
|
|
|
bool callRefs(lua_State *L) override;
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
LvglParamFuncOrValue align = { .function = LUA_REFNIL, .flags = LEFT};
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
void refresh() override
|
|
{
|
|
setText(txt.chars());
|
|
setFont(font.flags);
|
|
setAlign(align.flags);
|
|
LvglSimpleWidgetObject::refresh();
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetLineBase : public LvglSimpleWidgetObject, public LvglRoundedParam
|
|
{
|
|
public:
|
|
LvglWidgetLineBase() : LvglSimpleWidgetObject() {}
|
|
|
|
void setColor(LcdFlags newColor) override;
|
|
void setOpacity(uint8_t newOpa) override;
|
|
void setPos(coord_t x, coord_t y) override;
|
|
void setSize(coord_t w, coord_t h) override;
|
|
|
|
protected:
|
|
int dashGap = 0;
|
|
int dashWidth = 0;
|
|
lv_point_t pts[2];
|
|
|
|
virtual void setLine() = 0;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
void refresh() override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetHLine : public LvglWidgetLineBase
|
|
{
|
|
public:
|
|
LvglWidgetHLine() : LvglWidgetLineBase() {}
|
|
|
|
protected:
|
|
void setLine() override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetVLine : public LvglWidgetLineBase
|
|
{
|
|
public:
|
|
LvglWidgetVLine() : LvglWidgetLineBase() {}
|
|
|
|
protected:
|
|
void setLine() override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetLine : public LvglSimpleWidgetObject, public LvglRoundedParam, public LvglThicknessParam
|
|
{
|
|
public:
|
|
LvglWidgetLine();
|
|
~LvglWidgetLine();
|
|
|
|
void setColor(LcdFlags newColor) override;
|
|
void setOpacity(uint8_t newOpa) override;
|
|
void setPos(coord_t x, coord_t y) override;
|
|
void setSize(coord_t w, coord_t h) override;
|
|
|
|
bool callRefs(lua_State *L) override;
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
size_t ptCnt = 0;
|
|
size_t ptAlloc = 0;
|
|
lv_point_t* pts = nullptr;
|
|
uint32_t ptsHash = -1;
|
|
lv_obj_t* parent = nullptr;
|
|
int getPointsFunction = LUA_REFNIL;
|
|
|
|
void setLine();
|
|
|
|
uint32_t getPts(lua_State* L);
|
|
void getPt(lua_State* L, int n);
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
void refresh() override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetTriangle : public LvglSimpleWidgetObject
|
|
{
|
|
public:
|
|
LvglWidgetTriangle();
|
|
~LvglWidgetTriangle();
|
|
|
|
void setColor(LcdFlags newColor) override;
|
|
void setSize(coord_t w, coord_t h) override;
|
|
|
|
bool callRefs(lua_State *L) override;
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
lv_point_t pts[3] = {0};
|
|
uint32_t ptsHash = -1;
|
|
MaskBitmap* mask = nullptr;
|
|
lv_obj_t* parent = nullptr;
|
|
int getPointsFunction = LUA_REFNIL;
|
|
|
|
void fillTriangle();
|
|
void fillLine(coord_t x1, coord_t x2, coord_t y);
|
|
|
|
void getPt(lua_State* L, int n);
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
void refresh() override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetObject : public LvglWidgetObjectBase
|
|
{
|
|
public:
|
|
LvglWidgetObject(const char* meta = LVGL_METATABLE) : LvglWidgetObjectBase(meta) {}
|
|
|
|
void show() override { window->show(); }
|
|
void hide() override { window->hide(); }
|
|
void enable() override { window->enable(); }
|
|
void disable() override { window->disable(); }
|
|
|
|
void setPos(coord_t x, coord_t y) override;
|
|
void setSize(coord_t w, coord_t h) override;
|
|
|
|
bool callRefs(lua_State *L) override;
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
Window *getWindow() const override { return window; }
|
|
|
|
protected:
|
|
Window *window = nullptr;
|
|
int8_t flexFlow = -1;
|
|
int8_t flexPad = PAD_TINY;
|
|
int getActiveFunction = LUA_REFNIL;
|
|
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
|
|
bool setFlex();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetBox : public LvglWidgetObject, public LvglScrollableParams
|
|
{
|
|
public:
|
|
LvglWidgetBox() : LvglWidgetObject() {}
|
|
|
|
coord_t getScrollX() override;
|
|
coord_t getScrollY() override;
|
|
|
|
bool callRefs(lua_State *L) override;
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetSetting : public LvglWidgetObject, public LvglTitleParam
|
|
{
|
|
public:
|
|
LvglWidgetSetting() : LvglWidgetObject() {}
|
|
|
|
protected:
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetBorderedObject : public LvglWidgetBox, public LvglThicknessParam
|
|
{
|
|
public:
|
|
LvglWidgetBorderedObject() : LvglWidgetBox() {}
|
|
|
|
void setColor(LcdFlags newColor) override;
|
|
void setOpacity(uint8_t newOpa) override;
|
|
|
|
protected:
|
|
bool filled = false;
|
|
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetRoundObject : public LvglWidgetBorderedObject
|
|
{
|
|
public:
|
|
LvglWidgetRoundObject() : LvglWidgetBorderedObject()
|
|
{
|
|
scrollDir = LV_DIR_NONE;
|
|
}
|
|
|
|
void setPos(coord_t x, coord_t y) override;
|
|
void setRadius(coord_t r);
|
|
|
|
bool callRefs(lua_State *L) override;
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
LvglParamFuncOrValue radius = { .function = LUA_REFNIL, .coord = 0};
|
|
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
void refresh() override
|
|
{
|
|
setRadius(radius.coord);
|
|
LvglWidgetObject::refresh();
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetRectangle : public LvglWidgetBorderedObject
|
|
{
|
|
public:
|
|
LvglWidgetRectangle() : LvglWidgetBorderedObject() {}
|
|
|
|
protected:
|
|
coord_t rounded = 0;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetCircle : public LvglWidgetRoundObject
|
|
{
|
|
public:
|
|
LvglWidgetCircle() : LvglWidgetRoundObject() {}
|
|
|
|
protected:
|
|
void build(lua_State *L) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetArc : public LvglWidgetRoundObject, public LvglRoundedParam
|
|
{
|
|
public:
|
|
LvglWidgetArc() : LvglWidgetRoundObject() {}
|
|
|
|
void setColor(LcdFlags newColor) override;
|
|
void setBgColor(LcdFlags newColor);
|
|
void setOpacity(uint8_t newOpa) override;
|
|
void setBgOpacity(uint8_t newOpa);
|
|
void setStartAngle(coord_t angle);
|
|
void setEndAngle(coord_t angle);
|
|
void setBgStartAngle(coord_t angle);
|
|
void setBgEndAngle(coord_t angle);
|
|
|
|
bool callRefs(lua_State *L) override;
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
LvglParamFuncOrValue startAngle = { .function = LUA_REFNIL, .coord = 0};
|
|
LvglParamFuncOrValue endAngle = { .function = LUA_REFNIL, .coord = 360};
|
|
LvglParamFuncOrValue bgColor = { .function = LUA_REFNIL, .flags = (LcdFlags)-1};
|
|
LvglParamFuncOrValue bgOpacity = { .function = LUA_REFNIL, .value = LV_OPA_TRANSP};
|
|
LvglParamFuncOrValue bgStartAngle = { .function = LUA_REFNIL, .coord = 0};
|
|
LvglParamFuncOrValue bgEndAngle = { .function = LUA_REFNIL, .coord = 360};
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
void refresh() override
|
|
{
|
|
setStartAngle(startAngle.coord);
|
|
setEndAngle(endAngle.coord);
|
|
setBgStartAngle(bgStartAngle.coord);
|
|
setBgEndAngle(bgEndAngle.coord);
|
|
setBgColor(bgColor.flags);
|
|
setBgOpacity(bgOpacity.value);
|
|
LvglWidgetRoundObject::refresh();
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetImage : public LvglWidgetObject
|
|
{
|
|
public:
|
|
LvglWidgetImage() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {}
|
|
|
|
bool callRefs(lua_State *L) override;
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
LvglParamFuncOrString filename = { .function = LUA_REFNIL, .txt = ""};
|
|
bool fillFrame = false;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetQRCode : public LvglWidgetObject
|
|
{
|
|
public:
|
|
LvglWidgetQRCode() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {}
|
|
|
|
protected:
|
|
std::string data;
|
|
LcdFlags bgColor = COLOR2FLAGS(COLOR_THEME_SECONDARY3_INDEX);
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetTextButtonBase : public LvglWidgetObject, public LvglTextParams
|
|
{
|
|
public:
|
|
LvglWidgetTextButtonBase() : LvglWidgetObject(LVGL_SIMPLEMETATABLE)
|
|
{
|
|
color.flags = -1; // ignore unless overridden
|
|
}
|
|
|
|
virtual void setText(const char *s) = 0;
|
|
virtual void setFont(LcdFlags font) = 0;
|
|
void setSize(coord_t w, coord_t h) override;
|
|
void setColor(LcdFlags newColor) override;
|
|
void setTextColor(LcdFlags newColor);
|
|
void setRounded();
|
|
|
|
bool callRefs(lua_State *L) override;
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
coord_t rounded = -1;
|
|
LvglParamFuncOrValue textColor = { .function = LUA_REFNIL, .flags = (LcdFlags)-1};
|
|
int pressFunction = LUA_REFNIL;
|
|
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
void refresh() override
|
|
{
|
|
setText(txt.chars());
|
|
setFont(font.flags);
|
|
setTextColor(textColor.flags);
|
|
LvglWidgetObject::refresh();
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetTextButton : public LvglWidgetTextButtonBase
|
|
{
|
|
public:
|
|
LvglWidgetTextButton() : LvglWidgetTextButtonBase() {}
|
|
|
|
void setChecked(bool check);
|
|
void setText(const char *s) override;
|
|
void setFont(LcdFlags font) override;
|
|
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
bool checked = false;
|
|
int longPressFunction = LUA_REFNIL;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
void refresh() override
|
|
{
|
|
setChecked(checked);
|
|
LvglWidgetTextButtonBase::refresh();
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetMomentaryButton : public LvglWidgetTextButtonBase
|
|
{
|
|
public:
|
|
LvglWidgetMomentaryButton() : LvglWidgetTextButtonBase() {}
|
|
|
|
void setText(const char *s) override;
|
|
void setFont(LcdFlags font) override;
|
|
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
int releaseFunction = LUA_REFNIL;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetToggleSwitch : public LvglWidgetObject, public LvglGetSetParams
|
|
{
|
|
public:
|
|
LvglWidgetToggleSwitch() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {}
|
|
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetTextEdit : public LvglWidgetObject
|
|
{
|
|
public:
|
|
LvglWidgetTextEdit() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {}
|
|
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
const char *txt = "";
|
|
char value[129];
|
|
int maxLen = 32;
|
|
|
|
int setFunction = LUA_REFNIL;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetNumberEdit : public LvglWidgetObject, public LvglGetSetParams, public LvglMinMaxParams
|
|
{
|
|
public:
|
|
LvglWidgetNumberEdit() : LvglWidgetObject(LVGL_SIMPLEMETATABLE), LvglMinMaxParams(-1024, 1024) {}
|
|
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
int dispFunction = LUA_REFNIL;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetSliderBase : public LvglWidgetObject, public LvglGetSetParams, public LvglMinMaxParams
|
|
{
|
|
public:
|
|
LvglWidgetSliderBase() : LvglWidgetObject(LVGL_SIMPLEMETATABLE), LvglMinMaxParams(0, 100)
|
|
{
|
|
color.flags = -1;
|
|
}
|
|
|
|
void setColor(LcdFlags newColor) override;
|
|
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetSlider : public LvglWidgetSliderBase
|
|
{
|
|
public:
|
|
LvglWidgetSlider() : LvglWidgetSliderBase() {}
|
|
|
|
protected:
|
|
void build(lua_State *L) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetVerticalSlider : public LvglWidgetSliderBase
|
|
{
|
|
public:
|
|
LvglWidgetVerticalSlider() : LvglWidgetSliderBase() {}
|
|
|
|
protected:
|
|
void build(lua_State *L) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetPage : public LvglWidgetObject, public LvglTitleParam, public LvglScrollableParams
|
|
{
|
|
public:
|
|
LvglWidgetPage() : LvglWidgetObject() {}
|
|
|
|
bool callRefs(lua_State *L) override;
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
coord_t getScrollX() override;
|
|
coord_t getScrollY() override;
|
|
|
|
protected:
|
|
std::string subtitle;
|
|
std::string iconFile;
|
|
|
|
int backActionFunction = LUA_REFNIL;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetDialog : public LvglWidgetObject, public LvglTitleParam
|
|
{
|
|
public:
|
|
LvglWidgetDialog() : LvglWidgetObject() {}
|
|
|
|
void clearRefs(lua_State *L) override;
|
|
void close() override;
|
|
|
|
protected:
|
|
LvglDialog* dialog = nullptr;
|
|
|
|
int closeFunction = LUA_REFNIL;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetConfirmDialog : public LvglWidgetObject, public LvglTitleParam, public LvglMessageParam
|
|
{
|
|
public:
|
|
LvglWidgetConfirmDialog() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {}
|
|
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
int confirmFunction = LUA_REFNIL;
|
|
int cancelFunction = LUA_REFNIL;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetMessageDialog : public LvglWidgetObject, public LvglTitleParam, public LvglMessageParam
|
|
{
|
|
public:
|
|
LvglWidgetMessageDialog() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {}
|
|
|
|
protected:
|
|
std::string details;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetPicker : public LvglWidgetObject, public LvglGetSetParams
|
|
{
|
|
public:
|
|
LvglWidgetPicker() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {}
|
|
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetChoice : public LvglWidgetPicker, public LvglTitleParam, public LvglValuesParam
|
|
{
|
|
public:
|
|
LvglWidgetChoice() : LvglWidgetPicker() {}
|
|
|
|
void clearRefs(lua_State *L) override;
|
|
|
|
protected:
|
|
int filterFunction = LUA_REFNIL;
|
|
coord_t popupWidth = 0;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetMenu : public LvglWidgetPicker, public LvglTitleParam, public LvglValuesParam
|
|
{
|
|
public:
|
|
LvglWidgetMenu() : LvglWidgetPicker() {}
|
|
|
|
protected:
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetFontPicker : public LvglWidgetPicker
|
|
{
|
|
public:
|
|
LvglWidgetFontPicker() : LvglWidgetPicker() {}
|
|
|
|
protected:
|
|
void build(lua_State *L) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetAlignPicker : public LvglWidgetPicker
|
|
{
|
|
public:
|
|
LvglWidgetAlignPicker() : LvglWidgetPicker() {}
|
|
|
|
protected:
|
|
void build(lua_State *L) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetColorPicker : public LvglWidgetPicker
|
|
{
|
|
public:
|
|
LvglWidgetColorPicker() : LvglWidgetPicker() {}
|
|
|
|
protected:
|
|
void build(lua_State *L) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetTimerPicker : public LvglWidgetPicker
|
|
{
|
|
public:
|
|
LvglWidgetTimerPicker() : LvglWidgetPicker() {}
|
|
|
|
protected:
|
|
void build(lua_State *L) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetSwitchPicker : public LvglWidgetPicker
|
|
{
|
|
public:
|
|
LvglWidgetSwitchPicker() : LvglWidgetPicker() {}
|
|
|
|
protected:
|
|
uint32_t filter = 0xFFFFFFFF;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetSourcePicker : public LvglWidgetPicker
|
|
{
|
|
public:
|
|
LvglWidgetSourcePicker() : LvglWidgetPicker() {}
|
|
|
|
protected:
|
|
uint32_t filter = 0xFFFFFFFF;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class LvglWidgetFilePicker : public LvglWidgetPicker, public LvglTitleParam
|
|
{
|
|
public:
|
|
LvglWidgetFilePicker() : LvglWidgetPicker() {}
|
|
|
|
protected:
|
|
std::string folder;
|
|
std::string extension;
|
|
int maxLen = 255;
|
|
bool hideExtension = false;
|
|
|
|
void build(lua_State *L) override;
|
|
void parseParam(lua_State *L, const char *key) override;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|