HASPmota better support for textarea (#24946)

This commit is contained in:
s-hadinger
2026-08-08 17:10:40 +02:00
committed by GitHub
parent 351a1e64ec
commit 7e2157d591
6 changed files with 148 additions and 141 deletions
+1
View File
@@ -19,6 +19,7 @@ All notable changes to this project will be documented in this file.
- Reset BLE scan flag on new operation (#24925)
- Minor fixes in `LList` (#24927)
- TLS fix public key fingerprint for ECDSA certificates (#24928)
- HASPmota better support for `textarea`
### Removed
@@ -0,0 +1,107 @@
/********************************************************************
* Generated code, don't edit
*******************************************************************/
extern int be_ntv_lv_style_init(bvm *vm);
extern int be_ntv_lv_font_init(bvm *vm);
extern int be_ntv_lv_color_init(bvm *vm);
extern int be_ntv_lv_theme_init(bvm *vm);
extern int be_ntv_lv_group_init(bvm *vm);
extern int be_ntv_lv_obj_init(bvm *vm);
extern int be_ntv_lv_event_init(bvm *vm);
extern int be_ntv_lv_display_init(bvm *vm);
extern int be_ntv_lv_indev_init(bvm *vm);
extern int be_ntv_lv_qrcode_init(bvm *vm);
extern int be_ntv_lv_anim_init(bvm *vm);
extern int be_ntv_lv_timer_init(bvm *vm);
extern int be_ntv_lv_animimg_init(bvm *vm);
extern int be_ntv_lv_arc_init(bvm *vm);
extern int be_ntv_lv_arclabel_init(bvm *vm);
extern int be_ntv_lv_bar_init(bvm *vm);
extern int be_ntv_lv_button_init(bvm *vm);
extern int be_ntv_lv_buttonmatrix_init(bvm *vm);
extern int be_ntv_lv_calendar_init(bvm *vm);
extern int be_ntv_lv_canvas_init(bvm *vm);
extern int be_ntv_lv_chart_init(bvm *vm);
extern int be_ntv_lv_checkbox_init(bvm *vm);
extern int be_ntv_lv_dropdown_init(bvm *vm);
extern int be_ntv_lv_image_init(bvm *vm);
extern int be_ntv_lv_imagebutton_init(bvm *vm);
extern int be_ntv_lv_keyboard_init(bvm *vm);
extern int be_ntv_lv_label_init(bvm *vm);
extern int be_ntv_lv_led_init(bvm *vm);
extern int be_ntv_lv_line_init(bvm *vm);
extern int be_ntv_lv_list_init(bvm *vm);
extern int be_ntv_lv_menu_init(bvm *vm);
extern int be_ntv_lv_menu_page_init(bvm *vm);
extern int be_ntv_lv_menu_cont_init(bvm *vm);
extern int be_ntv_lv_menu_section_init(bvm *vm);
extern int be_ntv_lv_menu_separator_init(bvm *vm);
extern int be_ntv_lv_msgbox_init(bvm *vm);
extern int be_ntv_lv_roller_init(bvm *vm);
extern int be_ntv_lv_scale_init(bvm *vm);
extern int be_ntv_lv_scale_section_init(bvm *vm);
extern int be_ntv_lv_slider_init(bvm *vm);
extern int be_ntv_lv_span_init(bvm *vm);
extern int be_ntv_lv_spangroup_init(bvm *vm);
extern int be_ntv_lv_spinbox_init(bvm *vm);
extern int be_ntv_lv_spinner_init(bvm *vm);
extern int be_ntv_lv_switch_init(bvm *vm);
extern int be_ntv_lv_table_init(bvm *vm);
extern int be_ntv_lv_tabview_init(bvm *vm);
extern int be_ntv_lv_textarea_init(bvm *vm);
extern int be_ntv_lv_tileview_init(bvm *vm);
extern int be_ntv_lv_colorwheel_init(bvm *vm);
extern int be_ntv_lv_stripes_init(bvm *vm);
extern const bclass be_class_lv_anim;
extern const bclass be_class_lv_animimg;
extern const bclass be_class_lv_arc;
extern const bclass be_class_lv_arclabel;
extern const bclass be_class_lv_bar;
extern const bclass be_class_lv_button;
extern const bclass be_class_lv_buttonmatrix;
extern const bclass be_class_lv_calendar;
extern const bclass be_class_lv_canvas;
extern const bclass be_class_lv_chart;
extern const bclass be_class_lv_checkbox;
extern const bclass be_class_lv_color;
extern const bclass be_class_lv_colorwheel;
extern const bclass be_class_lv_display;
extern const bclass be_class_lv_dropdown;
extern const bclass be_class_lv_event;
extern const bclass be_class_lv_font;
extern const bclass be_class_lv_group;
extern const bclass be_class_lv_image;
extern const bclass be_class_lv_imagebutton;
extern const bclass be_class_lv_indev;
extern const bclass be_class_lv_keyboard;
extern const bclass be_class_lv_label;
extern const bclass be_class_lv_led;
extern const bclass be_class_lv_line;
extern const bclass be_class_lv_list;
extern const bclass be_class_lv_menu;
extern const bclass be_class_lv_menu_cont;
extern const bclass be_class_lv_menu_page;
extern const bclass be_class_lv_menu_section;
extern const bclass be_class_lv_menu_separator;
extern const bclass be_class_lv_msgbox;
extern const bclass be_class_lv_obj;
extern const bclass be_class_lv_qrcode;
extern const bclass be_class_lv_roller;
extern const bclass be_class_lv_scale;
extern const bclass be_class_lv_scale_section;
extern const bclass be_class_lv_slider;
extern const bclass be_class_lv_span;
extern const bclass be_class_lv_spangroup;
extern const bclass be_class_lv_spinbox;
extern const bclass be_class_lv_spinner;
extern const bclass be_class_lv_stripes;
extern const bclass be_class_lv_style;
extern const bclass be_class_lv_switch;
extern const bclass be_class_lv_table;
extern const bclass be_class_lv_tabview;
extern const bclass be_class_lv_textarea;
extern const bclass be_class_lv_theme;
extern const bclass be_class_lv_tileview;
extern const bclass be_class_lv_timer;
@@ -35,110 +35,8 @@ extern const lv_obj_class_t lv_colorwheel_class;
// custom Tasmota widget: rectangle filled with an angled stripe pattern
extern const lv_obj_class_t lv_stripes_class;
#include "be_lv_classes.h"
extern int be_ntv_lv_style_init(bvm *vm);
extern int be_ntv_lv_font_init(bvm *vm);
extern int be_ntv_lv_color_init(bvm *vm);
extern int be_ntv_lv_theme_init(bvm *vm);
extern int be_ntv_lv_group_init(bvm *vm);
extern int be_ntv_lv_obj_init(bvm *vm);
extern int be_ntv_lv_event_init(bvm *vm);
extern int be_ntv_lv_display_init(bvm *vm);
extern int be_ntv_lv_indev_init(bvm *vm);
extern int be_ntv_lv_qrcode_init(bvm *vm);
extern int be_ntv_lv_anim_init(bvm *vm);
extern int be_ntv_lv_timer_init(bvm *vm);
extern int be_ntv_lv_animimg_init(bvm *vm);
extern int be_ntv_lv_arc_init(bvm *vm);
extern int be_ntv_lv_arclabel_init(bvm *vm);
extern int be_ntv_lv_bar_init(bvm *vm);
extern int be_ntv_lv_button_init(bvm *vm);
extern int be_ntv_lv_buttonmatrix_init(bvm *vm);
extern int be_ntv_lv_calendar_init(bvm *vm);
extern int be_ntv_lv_canvas_init(bvm *vm);
extern int be_ntv_lv_chart_init(bvm *vm);
extern int be_ntv_lv_checkbox_init(bvm *vm);
extern int be_ntv_lv_dropdown_init(bvm *vm);
extern int be_ntv_lv_image_init(bvm *vm);
extern int be_ntv_lv_imagebutton_init(bvm *vm);
extern int be_ntv_lv_keyboard_init(bvm *vm);
extern int be_ntv_lv_label_init(bvm *vm);
extern int be_ntv_lv_led_init(bvm *vm);
extern int be_ntv_lv_line_init(bvm *vm);
extern int be_ntv_lv_list_init(bvm *vm);
extern int be_ntv_lv_menu_init(bvm *vm);
extern int be_ntv_lv_menu_page_init(bvm *vm);
extern int be_ntv_lv_menu_cont_init(bvm *vm);
extern int be_ntv_lv_menu_section_init(bvm *vm);
extern int be_ntv_lv_menu_separator_init(bvm *vm);
extern int be_ntv_lv_msgbox_init(bvm *vm);
extern int be_ntv_lv_roller_init(bvm *vm);
extern int be_ntv_lv_scale_init(bvm *vm);
extern int be_ntv_lv_scale_section_init(bvm *vm);
extern int be_ntv_lv_slider_init(bvm *vm);
extern int be_ntv_lv_span_init(bvm *vm);
extern int be_ntv_lv_spangroup_init(bvm *vm);
extern int be_ntv_lv_spinbox_init(bvm *vm);
extern int be_ntv_lv_spinner_init(bvm *vm);
extern int be_ntv_lv_switch_init(bvm *vm);
extern int be_ntv_lv_table_init(bvm *vm);
extern int be_ntv_lv_tabview_init(bvm *vm);
extern int be_ntv_lv_textarea_init(bvm *vm);
extern int be_ntv_lv_tileview_init(bvm *vm);
extern int be_ntv_lv_colorwheel_init(bvm *vm);
extern int be_ntv_lv_stripes_init(bvm *vm);
extern const bclass be_class_lv_anim;
extern const bclass be_class_lv_animimg;
extern const bclass be_class_lv_arc;
extern const bclass be_class_lv_arclabel;
extern const bclass be_class_lv_bar;
extern const bclass be_class_lv_button;
extern const bclass be_class_lv_buttonmatrix;
extern const bclass be_class_lv_calendar;
extern const bclass be_class_lv_canvas;
extern const bclass be_class_lv_chart;
extern const bclass be_class_lv_checkbox;
extern const bclass be_class_lv_color;
extern const bclass be_class_lv_colorwheel;
extern const bclass be_class_lv_display;
extern const bclass be_class_lv_dropdown;
extern const bclass be_class_lv_event;
extern const bclass be_class_lv_font;
extern const bclass be_class_lv_group;
extern const bclass be_class_lv_image;
extern const bclass be_class_lv_imagebutton;
extern const bclass be_class_lv_indev;
extern const bclass be_class_lv_keyboard;
extern const bclass be_class_lv_label;
extern const bclass be_class_lv_led;
extern const bclass be_class_lv_line;
extern const bclass be_class_lv_list;
extern const bclass be_class_lv_menu;
extern const bclass be_class_lv_menu_cont;
extern const bclass be_class_lv_menu_page;
extern const bclass be_class_lv_menu_section;
extern const bclass be_class_lv_menu_separator;
extern const bclass be_class_lv_msgbox;
extern const bclass be_class_lv_obj;
extern const bclass be_class_lv_qrcode;
extern const bclass be_class_lv_roller;
extern const bclass be_class_lv_scale;
extern const bclass be_class_lv_scale_section;
extern const bclass be_class_lv_slider;
extern const bclass be_class_lv_span;
extern const bclass be_class_lv_spangroup;
extern const bclass be_class_lv_spinbox;
extern const bclass be_class_lv_spinner;
extern const bclass be_class_lv_stripes;
extern const bclass be_class_lv_style;
extern const bclass be_class_lv_switch;
extern const bclass be_class_lv_table;
extern const bclass be_class_lv_tabview;
extern const bclass be_class_lv_textarea;
extern const bclass be_class_lv_theme;
extern const bclass be_class_lv_tileview;
extern const bclass be_class_lv_timer;
/********************************************************************
@@ -11,6 +11,7 @@ Inputs (produced by ``preprocessor.py``, see ``gen.sh``)
Outputs (written to ``generate/``)
be_lv_c_mapping.h C function dispatch tables + widget constructors
be_lv_classes.h extern declarations for widget constructors/classes
be_lvgl_widgets_lib.c solidified Berry class/widget definitions
be_lvgl_module.c the ``lv`` module (global functions + constants)
LVGL_API_Reference.md human readable API reference (Markdown)
@@ -716,6 +717,13 @@ extern const lv_obj_class_t lv_colorwheel_class;
// custom Tasmota widget: rectangle filled with an angled stripe pattern
extern const lv_obj_class_t lv_stripes_class;
#include "be_lv_classes.h"
"""
CLASSES_HEADER = """/********************************************************************
* Generated code, don't edit
*******************************************************************/
"""
WIDGETS_LIB_CORE_CLASSES = """
@@ -869,11 +877,13 @@ extern void arc_anim_end_angle(void * obj, int32_t v);
"""
def generate_widgets_lib(path, lv):
"""Generate ``be_lvgl_widgets_lib.c``: the solidified Berry class and
widget definitions (consumed later by the ``coc`` tool)."""
def generate_classes_header(path, lv):
"""Generate ``be_lv_classes.h``: extern declarations for the ad-hoc
LVGL8 colorwheel/stripes classes, the widget constructor (``_init``)
functions, and the widget class objects (included by
``be_lvgl_widgets_lib.c``)."""
with open(path, 'w') as out:
print(WIDGETS_LIB_HEADER, file=out)
print(CLASSES_HEADER, file=out)
# expose all extern constructor definitions
for subtype, flv in lv.items():
@@ -883,7 +893,13 @@ def generate_widgets_lib(path, lv):
# extern class declarations
for subtype in sorted(lv):
print(f"extern const bclass be_class_lv_{subtype};", file=out)
print(file=out)
def generate_widgets_lib(path, lv):
"""Generate ``be_lvgl_widgets_lib.c``: the solidified Berry class and
widget definitions (consumed later by the ``coc`` tool)."""
with open(path, 'w') as out:
print(WIDGETS_LIB_HEADER, file=out)
# hand-written core classes (lv_obj and friends)
print(WIDGETS_LIB_CORE_CLASSES, file=out)
@@ -1022,6 +1038,7 @@ def generate_module(path, lv0, lv_module):
# Output file names (inside the generate directory)
BE_LV_C_MAPPING = "be_lv_c_mapping.h"
BE_LV_CLASSES = "be_lv_classes.h"
BE_LV_WIDGETS_LIB = "be_lvgl_widgets_lib.c"
BE_LV_MODULE = "be_lvgl_module.c"
BE_LV_DOC = "LVGL_API_Reference.md"
@@ -1050,6 +1067,7 @@ def main():
# 3. generate the output files (same order as the historical script)
generate_doc(out_dir / BE_LV_DOC, lv, lv0)
generate_c_mapping(out_dir / BE_LV_C_MAPPING, lv)
generate_classes_header(out_dir / BE_LV_CLASSES, lv)
generate_widgets_lib(out_dir / BE_LV_WIDGETS_LIB, lv)
generate_module(out_dir / BE_LV_MODULE, lv0, lv_module)
@@ -6,35 +6,7 @@
#ifdef USE_LVGL
#ifdef USE_LVGL_HASPMOTA
extern const bclass be_class_lv_page;
extern const bclass be_class_lv_obj;
extern const bclass be_class_lv_scr;
extern const bclass be_class_lv_btn;
extern const bclass be_class_lv_switch;
extern const bclass be_class_lv_checkbox;
extern const bclass be_class_lv_label;
extern const bclass be_class_lv_spinner;
extern const bclass be_class_lv_line;
extern const bclass be_class_lv_img;
extern const bclass be_class_lv_roller;
extern const bclass be_class_lv_btnmatrix;
extern const bclass be_class_lv_bar;
extern const bclass be_class_lv_slider;
extern const bclass be_class_lv_arc;
extern const bclass be_class_lv_led;
extern const bclass be_class_lv_dropdown;
extern const bclass be_class_lv_scale;
extern const bclass be_class_lv_qrcode;
extern const bclass be_class_lv_chart;
extern const bclass be_class_lv_spangroup;
extern const bclass be_class_lv_span;
extern const bclass be_class_lv_tabview;
extern const bclass be_class_lv_button;
extern const bclass be_class_lv_image;
extern const bclass be_class_lv_buttonmatrix;
extern const bclass be_class_lv_msgbox;
// ported from LVGL 8
extern const bclass be_class_lv_colorwheel;
#include "../../libesp32_lvgl/lv_binding_berry/generate/be_lv_classes.h"
#include "solidify/solidified_lv_haspmota.h"
@@ -1104,8 +1104,12 @@ class lvh_obj : lvh_root
self._lv_obj.set_value(t)
end
end
def get_val()
return self._lv_obj.get_value()
def get_val() # if there is no underlining `get_value()` native class, return `nil` instead of exception
import introspect
if introspect.contains(self._lv_obj, "get_value")
return self._lv_obj.get_value()
end
return nil
end
#====================================================================
# `radius2`
@@ -2709,7 +2713,12 @@ class lvh_checkbox : lvh_obj
return self.get_toggle()
end
end
# class lvh_textarea : lvh_obj static var _lv_class = lv.textarea end
#@ solidify:lvh_textarea,weak
class lvh_textarea : lvh_obj
static var _lv_class = lv.textarea
def get_val() return self._lv_obj.get_text() end
def set_val(t) self._lv_obj.set_text(str(t)) end
end
# special case for scr (which is actually lv_obj)
#@ solidify:lvh_scr,weak
class lvh_scr : lvh_obj
@@ -3022,7 +3031,9 @@ class HASPmota
static lvh_arc = lvh_arc
# static lvh_linemeter = lvh_linemeter
# static lvh_gauge = lvh_gauge
# static lvh_textarea = lvh_textarea # additional?
#if BE_LV_WIDGET_TEXTAREA
static lvh_textarea = lvh_textarea # conditional
#endif
static lvh_led = lvh_led
static lvh_scale = lvh_scale
static lvh_scale_section = lvh_scale_section