Selaa lähdekoodia

add sync API for event signal

Lyon 2 vuotta sitten
vanhempi
sitoutus
887b10cf54

+ 15 - 18
examples/pika_lvgl/lv_uidemo.py

@@ -2,8 +2,6 @@ import PikaStdLib
 import pika_lvgl as lv
 import time
 
-global_dict = {}
-
 class MyMeter:
     def __init__(self,
                  parent,
@@ -115,12 +113,12 @@ class InputBox:
     def event_cb(self, e):
         code = e.get_code()
         ta = e.get_target()
-        kb: KeyBoard = global_dict["keyboard"]
-        if code == lv.EVENT.FOCUSED:
-            kb.set_hiden(False)
-            kb.set_textarea(ta)
-        if code == lv.EVENT.DEFOCUSED:
-            kb.set_textarea(None)
+        # kb: KeyBoard = global_dict["keyboard"]
+        # if code == lv.EVENT.FOCUSED:
+            # kb.set_hiden(False)
+            # kb.set_textarea(ta)
+        # if code == lv.EVENT.DEFOCUSED:
+            # kb.set_textarea(None)
 
 
 class ProcessCount:
@@ -235,6 +233,8 @@ class Button:
         self.is_on = is_on
 
     def _event_cb_adapter(self, e):
+        code = e.get_code()
+        print("btn event:", self.label.get_text(), code)
         self.event_cb(self, e)
 
     def add_event_cb(self, event_cb, event_type, user_data=None):
@@ -363,7 +363,6 @@ class KeyBoard:
             kb.set_mode(lv.keyboard.MODE.NUMBER)
         else:
             kb.set_mode(lv.keyboard.MODE.TEXT_LOWER)
-        global_dict["keyboard"] = self
         close_btn = Button(container, label_text="close")
         close_btn.set_size(40, 40)
         close_btn.align(lv.ALIGN.TOP_RIGHT, 0, -10)
@@ -434,14 +433,15 @@ class KeyBoard:
 
 def kb_btn_event_cb(self, e):
     # print("kb_btn_event_cb")
-    kb: KeyBoard = global_dict["keyboard"]
-    kb.switch_hidden()
+    # kb: KeyBoard = global_dict["keyboard"]
+    # kb.switch_hidden()
+    pass
 
 
 def date_time_update_cb(timer):
-    datetime_label = global_dict["datetime_label"]
+    # datetime_label = global_dict["datetime_label"]
     asctime = time.asctime()
-    datetime_label.set_text(asctime)
+    # datetime_label.set_text(asctime)
     print(asctime)
 
 
@@ -488,7 +488,6 @@ def main():
     datetime_label = lv.label(status_bar)
     datetime_label.set_text("2023.12.20 16:20:08")
     datetime_label.align(lv.ALIGN.LEFT_MID, LOGO_WIDTH, 0)
-    global_dict["datetime_label"] = datetime_label
 
     timer = lv.timer_create_basic()
     timer.set_period(1)
@@ -501,8 +500,7 @@ def main():
     keyboard_btn = Button(status_bar, label_text="keyboard")
     keyboard_btn.align(lv.ALIGN.RIGHT_MID, -20, 0)
     keyboard_btn.set_size(60, 30)
-    global_dict["keyboard_btn"] = keyboard_btn
-    keyboard_btn.add_event_cb(kb_btn_event_cb, lv.EVENT.CLICKED, None)
+    keyboard_btn.add_event_cb(kb_btn_event_cb, lv.EVENT.ALL, None)
 
     # 创建一个tabview对象
     tabview = lv.tabview(lv.scr_act(), lv.DIR.TOP, TABVIEW_HEIGHT)
@@ -549,7 +547,6 @@ def main():
     tab1_process_bar = BtnProcessBar(tab1, label_text="start")
     tab1_process_bar.align(lv.ALIGN.BOTTOM_LEFT, 0, 0)
     tab1_process_bar.add_event_cb(tab1_btnbar1_event_cb, lv.EVENT.CLICKED)
-    global_dict["tab1_process_bar"] = tab1_process_bar
 
     # tab2
     timer_segment.align(lv.ALIGN.BOTTOM_RIGHT, -220, -20)
@@ -589,7 +586,7 @@ def main():
 
 main()
 
-for i in range(10):
+for i in range(1):
     time.sleep(0.1)
     lv.task_handler()
 

+ 2 - 2
package/pika_lvgl/pika_lvgl.c

@@ -31,8 +31,8 @@ Args* pika_lv_id_register_g;
 extern PikaEventListener* g_pika_lv_timer_event_listener;
 pika_platform_thread_mutex_t pika_lv_global_mutex_g = {0};
 
-#if !PIKASCRIPT_VERSION_REQUIRE_MINIMUN(1, 13, 1)
-#error "pikascript version must be greater than 1.13.1"
+#if !PIKASCRIPT_VERSION_REQUIRE_MINIMUN(1, 13, 2)
+#error "pikascript version must be greater than 1.13.2"
 #endif
 
 volatile int g_lvgl_inited = 0;

+ 36 - 2
package/pika_lvgl/pika_lvgl.pyi

@@ -803,13 +803,47 @@ class dropdown(lv_obj):
     def close(self): ...
     def is_open(self) -> int: ...
 
+"""
+lv_obj_t * lv_label_create(lv_obj_t * parent);
+void lv_label_set_text(lv_obj_t * obj, const char * text);
+void lv_label_set_text_fmt(lv_obj_t * obj, const char * fmt, ...) LV_FORMAT_ATTRIBUTE(2, 3);
+void lv_label_set_text_static(lv_obj_t * obj, const char * text);
+void lv_label_set_long_mode(lv_obj_t * obj, lv_label_long_mode_t long_mode);
+void lv_label_set_recolor(lv_obj_t * obj, bool en);
+void lv_label_set_text_sel_start(lv_obj_t * obj, uint32_t index);
+void lv_label_set_text_sel_end(lv_obj_t * obj, uint32_t index);
+char * lv_label_get_text(const lv_obj_t * obj);
+lv_label_long_mode_t lv_label_get_long_mode(const lv_obj_t * obj);
+bool lv_label_get_recolor(const lv_obj_t * obj);
+void lv_label_get_letter_pos(const lv_obj_t * obj, uint32_t char_id, lv_point_t * pos);
+uint32_t lv_label_get_letter_on(const lv_obj_t * obj, lv_point_t * pos_in);
+bool lv_label_is_char_under_pos(const lv_obj_t * obj, lv_point_t * pos);
+uint32_t lv_label_get_text_selection_start(const lv_obj_t * obj);
+uint32_t lv_label_get_text_selection_end(const lv_obj_t * obj);
+void lv_label_ins_text(lv_obj_t * obj, uint32_t pos, const char * txt);
+void lv_label_cut_text(lv_obj_t * obj, uint32_t pos, uint32_t cnt);
+"""
 
 class label(lv_obj):
     def __init__(self, parent: lv_obj): ...
     def set_text(self, txt: str): ...
-    def set_long_mode(self, mode: int): ...
+    # def set_text_fmt(self, fmt: str, *args): ...
+    def set_text_static(self, txt: str): ...
+    def set_long_mode(self, long_mode: int): ...
     def set_recolor(self, en: int): ...
-    def set_style_text_align(self, value: int, selector: int): ...
+    def set_text_sel_start(self, index: int): ...
+    def set_text_sel_end(self, index: int): ...
+    def get_text(self) -> str: ...
+    def get_long_mode(self) -> int: ...
+    def get_recolor(self) -> int: ...
+    def get_letter_pos(self, char_id: int) -> point_t: ...
+    def get_letter_on(self, pos_in: point_t) -> int: ...
+    def is_char_under_pos(self, pos: point_t) -> int: ...
+    def get_text_selection_start(self) -> int: ...
+    def get_text_selection_end(self) -> int: ...
+    def ins_text(self, pos: int, txt: str): ...
+    def cut_text(self, pos: int, cnt: int): ...
+
 
 
 class roller(lv_obj):

+ 2 - 7
package/pika_lvgl/pika_lvgl_lv_obj.c

@@ -75,13 +75,8 @@ static void __pika_event_cb(lv_event_t* e) {
     lv_obj_t* target = lv_event_get_target(e);
     PikaObj* oEevent = newNormalObj(New_pika_lvgl_lv_event);
     obj_setPtr(oEevent, "lv_event", e);
-    Arg* aEvent = arg_newObj(oEevent);
-    Arg* aRes = __eventListener_runEvent(pika_lv_event_listener_g,
-                                         (uintptr_t)target, aEvent);
-    if (NULL != aRes) {
-        arg_deinit(aRes);
-    }
-    arg_deinit(aEvent);
+    pika_eventListener_syncSend(pika_lv_event_listener_g, (uintptr_t)target,
+                                arg_newObj(oEevent));
 }
 
 void pika_lvgl_lv_obj_add_event_cb(PikaObj* self,

+ 2 - 7
package/pika_lvgl/pika_lvgl_lv_timer_t.c

@@ -13,13 +13,8 @@ PikaEventListener* g_pika_lv_timer_event_listener;
 void __pika_timer_cb(lv_timer_t* timer) {
     PikaObj* oTimer = newNormalObj(New_pika_lvgl_lv_timer_t);
     obj_setPtr(oTimer, "lv_timer", timer);
-    Arg* aTimer = arg_newObj(oTimer);
-    Arg* aRes = __eventListener_runEvent(g_pika_lv_timer_event_listener,
-                                         (uintptr_t)timer, aTimer);
-    if (NULL != aRes) {
-        arg_deinit(aRes);
-    }
-    arg_deinit(aTimer);
+    pika_eventListener_syncSend(g_pika_lv_timer_event_listener,
+                                (uintptr_t)timer, arg_newObj(oTimer));
 }
 
 void pika_lvgl_lv_timer_t_set_period(PikaObj* self, int period) {

+ 95 - 8
package/pika_lvgl/pika_lvgl_lv_wegit.c

@@ -298,15 +298,47 @@ void pika_lvgl_dropdown_set_text(PikaObj* self, char* txt) {
     lv_dropdown_set_text(lv_obj, txt);
 }
 
+/*
+class label(lv_obj):
+    def __init__(self, parent: lv_obj): ...
+    def set_text(self, txt: str): ...
+#    def set_text_fmt(self, fmt: str, *args): ...
+    def set_text_static(self, txt: str): ...
+    def set_long_mode(self, long_mode: int): ...
+    def set_recolor(self, en: int): ...
+    def set_text_sel_start(self, index: int): ...
+    def set_text_sel_end(self, index: int): ...
+    def get_text(self) -> str: ...
+    def get_long_mode(self) -> int: ...
+    def get_recolor(self) -> int: ...
+    def get_letter_pos(self, char_id: int) -> point_t: ...
+    def get_letter_on(self, pos_in: point_t) -> int: ...
+    def is_char_under_pos(self, pos: point_t) -> int: ...
+    def get_text_selection_start(self) -> int: ...
+    def get_text_selection_end(self) -> int: ...
+    def ins_text(self, pos: int, txt: str): ...
+    def cut_text(self, pos: int, cnt: int): ...
+*/
+
 void pika_lvgl_label___init__(PikaObj* self, PikaObj* parent) {
     lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj");
     lv_obj_t* lv_obj = lv_label_create(lv_parent);
     obj_setPtr(self, "lv_obj", lv_obj);
 }
 
-void pika_lvgl_label_set_long_mode(PikaObj* self, int mode) {
+void pika_lvgl_label_set_text(PikaObj* self, char* txt) {
+    lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
+    lv_label_set_text(lv_obj, txt);
+}
+
+void pika_lvgl_label_set_text_static(PikaObj* self, char* txt) {
+    lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
+    lv_label_set_text_static(lv_obj, txt);
+}
+
+void pika_lvgl_label_set_long_mode(PikaObj* self, int long_mode) {
     lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
-    lv_label_set_long_mode(lv_obj, mode);
+    lv_label_set_long_mode(lv_obj, long_mode);
 }
 
 void pika_lvgl_label_set_recolor(PikaObj* self, int en) {
@@ -314,16 +346,71 @@ void pika_lvgl_label_set_recolor(PikaObj* self, int en) {
     lv_label_set_recolor(lv_obj, en);
 }
 
-void pika_lvgl_label_set_text(PikaObj* self, char* txt) {
+void pika_lvgl_label_set_text_sel_start(PikaObj* self, int index) {
     lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
-    lv_label_set_text(lv_obj, txt);
+    lv_label_set_text_sel_start(lv_obj, index);
+}
+
+void pika_lvgl_label_set_text_sel_end(PikaObj* self, int index) {
+    lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
+    lv_label_set_text_sel_end(lv_obj, index);
+}
+
+char* pika_lvgl_label_get_text(PikaObj* self) {
+    lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
+    return (char*)lv_label_get_text(lv_obj);
+}
+
+int pika_lvgl_label_get_long_mode(PikaObj* self) {
+    lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
+    return lv_label_get_long_mode(lv_obj);
+}
+
+int pika_lvgl_label_get_recolor(PikaObj* self) {
+    lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
+    return lv_label_get_recolor(lv_obj);
+}
+
+PikaObj* pika_lvgl_label_get_letter_pos(PikaObj* self, int char_id) {
+    lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
+    PikaObj* new_obj = newNormalObj(New_pika_lvgl_point_t);
+    lv_point_t lv_point = {0};
+    lv_label_get_letter_pos(lv_obj, char_id, &lv_point);
+    obj_setStruct(new_obj, "lv_point_struct", lv_point);
+    obj_setPtr(new_obj, "lv_point", obj_getStruct(new_obj, "lv_point_struct"));
+    return new_obj;
+}
+
+int pika_lvgl_label_get_letter_on(PikaObj* self, PikaObj* pos_in) {
+    lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
+    lv_point_t* lv_pos_in = obj_getPtr(pos_in, "lv_point_t");
+    return lv_label_get_letter_on(lv_obj, lv_pos_in);
+}
+
+int pika_lvgl_label_is_char_under_pos(PikaObj* self, PikaObj* pos) {
+    lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
+    lv_point_t* lv_pos = obj_getPtr(pos, "lv_point_t");
+    return lv_label_is_char_under_pos(lv_obj, lv_pos);
+}
+
+int pika_lvgl_label_get_text_selection_start(PikaObj* self) {
+    lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
+    return lv_label_get_text_selection_start(lv_obj);
+}
+
+int pika_lvgl_label_get_text_selection_end(PikaObj* self) {
+    lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
+    return lv_label_get_text_selection_end(lv_obj);
+}
+
+void pika_lvgl_label_ins_text(PikaObj* self, int pos, char* txt) {
+    lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
+    lv_label_ins_text(lv_obj, pos, txt);
 }
 
-void pika_lvgl_label_set_style_text_align(PikaObj* self,
-                                          int value,
-                                          int selector) {
+void pika_lvgl_label_cut_text(PikaObj* self, int pos, int cnt) {
     lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
-    lv_obj_set_style_text_align(lv_obj, value, selector);
+    lv_label_cut_text(lv_obj, pos, cnt);
 }
 
 void pika_lvgl_roller___init__(PikaObj* self, PikaObj* parent) {

+ 2 - 2
port/linux/package/pikascript/pikascript-lib/pika_lvgl/pika_lvgl.c

@@ -31,8 +31,8 @@ Args* pika_lv_id_register_g;
 extern PikaEventListener* g_pika_lv_timer_event_listener;
 pika_platform_thread_mutex_t pika_lv_global_mutex_g = {0};
 
-#if !PIKASCRIPT_VERSION_REQUIRE_MINIMUN(1, 13, 1)
-#error "pikascript version must be greater than 1.13.1"
+#if !PIKASCRIPT_VERSION_REQUIRE_MINIMUN(1, 13, 2)
+#error "pikascript version must be greater than 1.13.2"
 #endif
 
 volatile int g_lvgl_inited = 0;

+ 2 - 7
port/linux/package/pikascript/pikascript-lib/pika_lvgl/pika_lvgl_lv_obj.c

@@ -75,13 +75,8 @@ static void __pika_event_cb(lv_event_t* e) {
     lv_obj_t* target = lv_event_get_target(e);
     PikaObj* oEevent = newNormalObj(New_pika_lvgl_lv_event);
     obj_setPtr(oEevent, "lv_event", e);
-    Arg* aEvent = arg_newObj(oEevent);
-    Arg* aRes = __eventListener_runEvent(pika_lv_event_listener_g,
-                                         (uintptr_t)target, aEvent);
-    if (NULL != aRes) {
-        arg_deinit(aRes);
-    }
-    arg_deinit(aEvent);
+    pika_eventListener_syncSend(pika_lv_event_listener_g, (uintptr_t)target,
+                                arg_newObj(oEevent));
 }
 
 void pika_lvgl_lv_obj_add_event_cb(PikaObj* self,

+ 2 - 7
port/linux/package/pikascript/pikascript-lib/pika_lvgl/pika_lvgl_lv_timer_t.c

@@ -13,13 +13,8 @@ PikaEventListener* g_pika_lv_timer_event_listener;
 void __pika_timer_cb(lv_timer_t* timer) {
     PikaObj* oTimer = newNormalObj(New_pika_lvgl_lv_timer_t);
     obj_setPtr(oTimer, "lv_timer", timer);
-    Arg* aTimer = arg_newObj(oTimer);
-    Arg* aRes = __eventListener_runEvent(g_pika_lv_timer_event_listener,
-                                         (uintptr_t)timer, aTimer);
-    if (NULL != aRes) {
-        arg_deinit(aRes);
-    }
-    arg_deinit(aTimer);
+    pika_eventListener_syncSend(g_pika_lv_timer_event_listener,
+                                (uintptr_t)timer, arg_newObj(oTimer));
 }
 
 void pika_lvgl_lv_timer_t_set_period(PikaObj* self, int period) {

+ 1 - 1
port/linux/version_config.py

@@ -1,3 +1,3 @@
 MajorVersion  =   "1"
 MinorVersion  =   "13"
-MicroVersion  =   "1"
+MicroVersion  =   "2"

+ 28 - 0
src/PikaObj.c

@@ -3034,6 +3034,34 @@ Arg* pika_eventListener_sendSignalAwaitResult(PikaEventListener* self,
 #endif
 }
 
+Arg* pika_eventListener_syncSendAwaitResult(PikaEventListener* self,
+                                            uintptr_t eventId,
+                                            Arg* eventData) {
+    return __eventListener_runEvent(self, eventId, eventData);
+}
+
+PIKA_RES pika_eventListener_syncSend(PikaEventListener* self,
+                                     uintptr_t eventId,
+                                     Arg* eventData) {
+    Arg* res = __eventListener_runEvent(self, eventId, eventData);
+    PIKA_RES ret = PIKA_RES_OK;
+    if (NULL == res) {
+        ret = PIKA_RES_ERR_RUNTIME_ERROR;
+    } else {
+        arg_deinit(res);
+    }
+    arg_deinit(eventData);
+    return ret;
+}
+
+PIKA_RES pika_eventListener_syncSendSignal(PikaEventListener* self,
+                                           uintptr_t eventId,
+                                           int eventSignal) {
+    Arg* eventData = arg_newInt(eventSignal);
+    PIKA_RES res = pika_eventListener_syncSend(self, eventId, eventData);
+    return res;
+}
+
 /* print major version info */
 void pika_printVersion(void) {
     pika_platform_printf("pikascript-core==v%d.%d.%d (%s)\r\n",

+ 15 - 6
src/PikaObj.h

@@ -609,12 +609,25 @@ PIKA_RES pika_eventListener_sendSignal(PikaEventListener* self,
                                        uintptr_t eventId,
                                        int eventSignal);
 
+Arg* pika_eventListener_sendSignalAwaitResult(PikaEventListener* self,
+                                              uintptr_t eventId,
+                                              int eventSignal);
+
 PIKA_RES pika_eventListener_send(PikaEventListener* self,
                                  uintptr_t eventId,
                                  Arg* eventData);
 
-PikaObj* pika_eventListener_getEventHandleObj(PikaEventListener* self,
-                                              uintptr_t eventId);
+Arg* pika_eventListener_syncSendAwaitResult(PikaEventListener* self,
+                                            uintptr_t eventId,
+                                            Arg* eventData);
+
+PIKA_RES pika_eventListener_syncSend(PikaEventListener* self,
+                                     uintptr_t eventId,
+                                     Arg* eventData);
+
+PIKA_RES pika_eventListener_syncSendSignal(PikaEventListener* self,
+                                           uintptr_t eventId,
+                                           int eventSignal);
 
 void pika_eventListener_init(PikaEventListener** p_self);
 void pika_eventListener_deinit(PikaEventListener** p_self);
@@ -772,10 +785,6 @@ Arg* __eventListener_runEvent(PikaEventListener* lisener,
                               uintptr_t eventId,
                               Arg* eventData);
 
-Arg* pika_eventListener_sendSignalAwaitResult(PikaEventListener* self,
-                                              uintptr_t eventId,
-                                              int eventSignal);
-
 void obj_printModules(PikaObj* self);
 #if PIKA_DEBUG_ENABLE
 #define pika_debug(fmt, ...)                                       \

+ 2 - 2
src/PikaVersion.h

@@ -1,5 +1,5 @@
 #define PIKA_VERSION_MAJOR 1
 #define PIKA_VERSION_MINOR 13
-#define PIKA_VERSION_MICRO 1
+#define PIKA_VERSION_MICRO 2
 
-#define PIKA_EDIT_TIME "2024/01/05 21:07:33"
+#define PIKA_EDIT_TIME "2024/01/10 16:14:56"