add accept_button/cancel_button

This commit is contained in:
lixianjing 2025-04-07 17:15:00 +08:00
parent 36930be4b4
commit 412efd5365
25 changed files with 491 additions and 20 deletions

View File

@ -21,6 +21,8 @@
#include "awtk.h"
static ret_t install_one(void* ctx, const void* iter);
static ret_t on_fullscreen(void* ctx, event_t* e) {
widget_t* btn = WIDGET(e->target);
window_t* win = WINDOW(widget_get_window(btn));
@ -42,18 +44,79 @@ static ret_t on_click_enlarge(void* ctx, event_t* e) {
return RET_OK;
}
static ret_t on_click_close(void* ctx, event_t* e) {
static ret_t on_click_win_close(void* ctx, event_t* e) {
tk_quit();
return RET_OK;
}
static ret_t on_close(void* ctx, event_t* e) {
widget_t* win = WIDGET(ctx);
if (widget_is_dialog(win)) {
dialog_quit(win, DIALOG_QUIT_CANCEL);
} else {
window_close(win);
}
return RET_OK;
}
static ret_t on_ok(void* ctx, event_t* e) {
widget_t* win = WIDGET(ctx);
if (widget_is_dialog(win)) {
dialog_quit(win, DIALOG_QUIT_OK);
}
return RET_OK;
}
static ret_t on_open_window(void* ctx, event_t* e) {
const char* name = (const char*)ctx;
widget_t* win = window_open(name);
widget_foreach(win, install_one, win);
if (tk_str_eq(name, "toast")) {
dialog_toast("Hello AWTK!\nThis is a toast(1)!", 4000);
} else if (tk_str_eq(name, "info")) {
dialog_info("info", "hello awtk");
} else if (widget_is_dialog(win)) {
dialog_quit_code_t quit_code = dialog_modal(win);
switch (quit_code) {
case DIALOG_QUIT_OK:
log_debug("dialog_quit : DIALOG_QUIT_OK\n");
break;
case DIALOG_QUIT_CANCEL:
log_debug("dialog_quit : DIALOG_QUIT_CANCEL\n");
break;
default:
log_debug("DIALOG_QUIT_NONE\n");
break;
}
}
return RET_OK;
}
static ret_t install_one(void* ctx, const void* iter) {
widget_t* widget = WIDGET(iter);
widget_t* win = widget_get_window(widget);
if (widget->name != NULL) {
const char* name = widget->name;
if (strstr(name, "open:") == name) {
widget_on(widget, EVT_CLICK, on_open_window, (void*)(name + 5));
} else if (tk_str_eq(name, "close")) {
widget_on(widget, EVT_CLICK, on_close, win);
} else if (tk_str_eq(name, "ok")) {
widget_on(widget, EVT_CLICK, on_ok, win);
}
}
return RET_OK;
}
ret_t application_init(void) {
widget_t* win = window_open("desktop");
widget_child_on(win, "close", EVT_CLICK, on_click_close, NULL);
widget_child_on(win, "win_close", EVT_CLICK, on_click_win_close, NULL);
widget_child_on(win, "enlarge", EVT_CLICK, on_click_enlarge, NULL);
widget_child_on(win, "fullscreen", EVT_CLICK, on_fullscreen, win);
widget_foreach(win, install_one, win);
return RET_OK;
}

View File

@ -15,6 +15,7 @@
<edit x="c" y="350" w="50%" h="30" tips="input text here"/>
<mledit x="c" y="390" w="50%" h="80" tips="input text here"/>
<button x="c:-150" y="b:10" w="80" h="30" name="open:dialog_win" focusable="true" text="dialog_win"/>
<button x="c:-50" y="b:10" w="80" h="30" name="enlarge" text="Enlarge"/>
<button x="c:50" y="b:10" w="80" h="30" name="close" text="Close"/>
<button x="c:50" y="b:10" w="80" h="30" name="win_close" text="Close"/>
</window>

View File

@ -0,0 +1,24 @@
<dialog x="c" y="m" w="50%" h="50%" highlight="default(alpha=100)" accept_button="ok" cancel_button="close" style:normal:bg_color="#f0f0f0" >
<view w="100%" h="27" style:bg_color="gray">
<label name="title" x="15" y="0" w="-15" h="100%" text="title"/>
<button name="close" x="r:0" y="0" w="27" h="100%" text="X"/>
</view>
<view name="separator" x="0" y="b:65" w="100%" h="1" style:normal:bg_color="gray"/>
<button name="ok" x="r:90" y="b:21" w="60" h="27" focusable="true" text="Ok"/>
<button name="close" x="r:15" y="b:21" w="60" h="27" focusable="true" text="Close"/>
<view name="view" x="10" y="30" w="380" h="50">
<edit min="0" max="1024" step="1" name="edit" x="75" y="10" w="202" h="28" focused="true" />
<button name="open:toast" x="287" y="10" w="82" h="28" focusable="true" text="toast"/>
<label name="label" x="0" y="10" w="65" h="28" text="FilePath:"/>
</view>
<view name="view" x="10" y="80" w="380" h="50">
<edit min="0" max="1024" step="1" name="edit" x="75" y="10" w="202" h="28" />
<button name="open:info" x="287" y="10" w="82" h="28" focusable="true" text="info"/>
<label name="label" x="10" y="10" w="65" h="28" text="DirPath:"/>
</view>
<view name="view" x="10" y="120" w="380" h="50">
<check_button x="75" y="10" w="70" h="28" text="Book" focusable="true"/>
<mledit x="145" y="0" h="100%" w="100" text="accept = false" accept_return="false" accept_tab="false" />
<mledit x="250" y="0" h="100%" w="100" text="asdfasdf" />
</view>
</dialog>

View File

@ -1,5 +1,8 @@
# 最新动态
2025/04/08
* 给window增加accept_button和cancel_button的属性(感谢智明提供补丁)
2025/04/03
* 完善tree(感谢兆坤提供补丁)
* 修复编译警告(感谢智明提供补丁)

View File

@ -103,6 +103,7 @@ extern TK_CONST_DATA_ALIGN(const unsigned char ui_dialog2_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_color_picker_hsv_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_menu_down_right_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_tab_bottom_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_dialog_win_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_fruit_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_list_view_m_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_slide_view_h_loop_default[]);
@ -1041,6 +1042,7 @@ ret_t assets_init_dark(void) {
assets_manager_add(am, ui_color_picker_hsv_default);
assets_manager_add(am, ui_menu_down_right_default);
assets_manager_add(am, ui_tab_bottom_default);
assets_manager_add(am, ui_dialog_win_default);
assets_manager_add(am, ui_fruit_default);
assets_manager_add(am, ui_list_view_m_default);
assets_manager_add(am, ui_slide_view_h_loop_default);

View File

@ -103,6 +103,7 @@
#include "default/inc/ui/color_picker_hsv.data"
#include "default/inc/ui/menu_down_right.data"
#include "default/inc/ui/tab_bottom.data"
#include "default/inc/ui/dialog_win.data"
#include "default/inc/ui/fruit.data"
#include "default/inc/ui/list_view_m.data"
#include "default/inc/ui/slide_view_h_loop.data"
@ -1041,6 +1042,7 @@ ret_t assets_init_default(void) {
assets_manager_add(am, ui_color_picker_hsv_default);
assets_manager_add(am, ui_menu_down_right_default);
assets_manager_add(am, ui_tab_bottom_default);
assets_manager_add(am, ui_dialog_win_default);
assets_manager_add(am, ui_fruit_default);
assets_manager_add(am, ui_list_view_m_default);
assets_manager_add(am, ui_slide_view_h_loop_default);

View File

@ -100,6 +100,7 @@ extern TK_CONST_DATA_ALIGN(const unsigned char ui_dialog2_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_color_picker_hsv_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_menu_down_right_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_tab_bottom_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_dialog_win_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_fruit_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_list_view_m_default[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_slide_view_h_loop_default[]);
@ -661,6 +662,7 @@ ret_t assets_init_dark(void) {
assets_manager_add(am, ui_color_picker_hsv_default);
assets_manager_add(am, ui_menu_down_right_default);
assets_manager_add(am, ui_tab_bottom_default);
assets_manager_add(am, ui_dialog_win_default);
assets_manager_add(am, ui_fruit_default);
assets_manager_add(am, ui_list_view_m_default);
assets_manager_add(am, ui_slide_view_h_loop_default);

View File

@ -100,6 +100,7 @@
#include "default/inc/ui/color_picker_hsv.data"
#include "default/inc/ui/menu_down_right.data"
#include "default/inc/ui/tab_bottom.data"
#include "default/inc/ui/dialog_win.data"
#include "default/inc/ui/fruit.data"
#include "default/inc/ui/list_view_m.data"
#include "default/inc/ui/slide_view_h_loop.data"
@ -661,6 +662,7 @@ ret_t assets_init_default(void) {
assets_manager_add(am, ui_color_picker_hsv_default);
assets_manager_add(am, ui_menu_down_right_default);
assets_manager_add(am, ui_tab_bottom_default);
assets_manager_add(am, ui_dialog_win_default);
assets_manager_add(am, ui_fruit_default);
assets_manager_add(am, ui_list_view_m_default);
assets_manager_add(am, ui_slide_view_h_loop_default);

View File

@ -1,5 +1,5 @@
TK_CONST_DATA_ALIGN(const unsigned char ui_desktop_default[]) = {
0x04,0x00,0x01,0x01,0xef,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x65,0x73,0x6b,0x74,0x6f,0x70,0x00,
0x04,0x00,0x01,0x01,0x88,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x65,0x73,0x6b,0x74,0x6f,0x70,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x12,0x12,0x22,0x11,0x77,0x69,0x6e,0x64,0x6f,0x77,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
@ -68,13 +68,20 @@ TK_CONST_DATA_ALIGN(const unsigned char ui_desktop_default[]) = {
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x3a,0x2d,0x35,0x30,0x2c,0x79,
0x3d,0x62,0x3a,0x31,0x30,0x2c,0x77,0x3d,0x38,0x30,0x2c,0x68,0x3d,0x33,0x30,0x29,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x65,0x6e,0x6c,0x61,0x72,0x67,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x45,0x6e,0x6c,0x61,0x72,
0x67,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,
0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x3a,0x35,0x30,0x2c,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x3a,0x2d,0x31,0x35,0x30,0x2c,
0x79,0x3d,0x62,0x3a,0x31,0x30,0x2c,0x77,0x3d,0x38,0x30,0x2c,0x68,0x3d,0x33,0x30,0x29,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6c,0x6f,0x73,0x65,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*1567*/
0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x64,0x69,0x61,0x6c,0x6f,0x67,0x5f,0x77,0x69,0x6e,0x00,0x66,
0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x64,
0x69,0x61,0x6c,0x6f,0x67,0x5f,0x77,0x69,0x6e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,
0x78,0x3d,0x63,0x3a,0x2d,0x35,0x30,0x2c,0x79,0x3d,0x62,0x3a,0x31,0x30,0x2c,0x77,0x3d,0x38,0x30,0x2c,
0x68,0x3d,0x33,0x30,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x65,0x6e,0x6c,0x61,0x72,0x67,0x65,0x00,0x74,
0x65,0x78,0x74,0x00,0x45,0x6e,0x6c,0x61,0x72,0x67,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,
0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,
0x74,0x28,0x78,0x3d,0x63,0x3a,0x35,0x30,0x2c,0x79,0x3d,0x62,0x3a,0x31,0x30,0x2c,0x77,0x3d,0x38,0x30,
0x2c,0x68,0x3d,0x33,0x30,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x77,0x69,0x6e,0x5f,0x63,0x6c,0x6f,0x73,
0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*1720*/

View File

@ -0,0 +1,101 @@
TK_CONST_DATA_ALIGN(const unsigned char ui_dialog_win_default[]) = {
0x04,0x00,0x01,0x01,0x91,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x69,0x61,0x6c,0x6f,0x67,0x5f,0x77,
0x69,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x12,0x12,0x22,0x11,0x64,0x69,0x61,0x6c,0x6f,0x67,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,
0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x2c,
0x79,0x3d,0x6d,0x2c,0x77,0x3d,0x35,0x30,0x25,0x2c,0x68,0x3d,0x35,0x30,0x25,0x29,0x00,0x68,0x69,0x67,
0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x61,0x6c,0x70,0x68,0x61,
0x3d,0x31,0x30,0x30,0x29,0x00,0x61,0x63,0x63,0x65,0x70,0x74,0x5f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x6f,0x6b,0x00,0x63,0x61,0x6e,0x63,0x65,0x6c,0x5f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x63,0x6c,0x6f,
0x73,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x3a,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x3a,0x62,0x67,0x5f,0x63,
0x6f,0x6c,0x6f,0x72,0x00,0x23,0x66,0x30,0x66,0x30,0x66,0x30,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x1b,0x00,
0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,
0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x32,0x37,0x29,0x00,0x73,0x74,0x79,0x6c,0x65,
0x3a,0x62,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0x67,0x72,0x61,0x79,0x00,0x00,0x6c,0x61,0x62,0x65,
0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xff,0xff,0xff,
0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,
0x75,0x6c,0x74,0x28,0x78,0x3d,0x31,0x35,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x2d,0x31,0x35,0x2c,0x68,
0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x74,0x69,0x74,0x6c,0x65,0x00,0x74,0x65,
0x78,0x74,0x00,0x74,0x69,0x74,0x6c,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,
0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,
0x3d,0x72,0x3a,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x32,0x37,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,
0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x58,0x00,
0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x62,0x3a,0x36,
0x35,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,
0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x3a,0x6e,0x6f,0x72,0x6d,0x61,
0x6c,0x3a,0x62,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0x67,0x72,0x61,0x79,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,
0x00,0x00,0x1b,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,
0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x72,0x3a,0x39,0x30,0x2c,0x79,0x3d,0x62,0x3a,0x32,0x31,0x2c,
0x77,0x3d,0x36,0x30,0x2c,0x68,0x3d,0x32,0x37,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x6b,0x00,0x66,
0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x4f,
0x6b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x72,0x3a,0x31,0x35,0x2c,0x79,
0x3d,0x62,0x3a,0x32,0x31,0x2c,0x77,0x3d,0x36,0x30,0x2c,0x68,0x3d,0x32,0x37,0x29,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,
0x75,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,0x76,0x69,0x65,0x77,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
0x32,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x65,0x64,0x69,0x74,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x1c,
0x00,0x00,0x00,0x6d,0x69,0x6e,0x00,0x30,0x00,0x6d,0x61,0x78,0x00,0x31,0x30,0x32,0x34,0x00,0x73,0x74,
0x65,0x70,0x00,0x31,0x00,0x6e,0x61,0x6d,0x65,0x00,0x65,0x64,0x69,0x74,0x00,0x66,0x6f,0x63,0x75,0x73,
0x65,0x64,0x00,0x74,0x72,0x75,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x1f,0x01,0x00,0x00,0x0a,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x74,0x6f,0x61,0x73,0x74,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,
0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x74,0x6f,0x61,0x73,0x74,0x00,
0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,
0x00,0x00,0x41,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6c,0x61,0x62,0x65,0x6c,
0x00,0x74,0x65,0x78,0x74,0x00,0x46,0x69,0x6c,0x65,0x50,0x61,0x74,0x68,0x3a,0x00,0x00,0x00,0x00,0x76,
0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x7c,
0x01,0x00,0x00,0x32,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x65,0x64,
0x69,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0xca,0x00,
0x00,0x00,0x1c,0x00,0x00,0x00,0x6d,0x69,0x6e,0x00,0x30,0x00,0x6d,0x61,0x78,0x00,0x31,0x30,0x32,0x34,
0x00,0x73,0x74,0x65,0x70,0x00,0x31,0x00,0x6e,0x61,0x6d,0x65,0x00,0x65,0x64,0x69,0x74,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x0a,0x00,0x00,0x00,
0x52,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x69,0x6e,
0x66,0x6f,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x74,0x65,
0x78,0x74,0x00,0x69,0x6e,0x66,0x6f,0x00,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x69,0x72,0x50,0x61,0x74,
0x68,0x3a,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,
0x00,0x00,0x78,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x32,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x76,
0x69,0x65,0x77,0x00,0x00,0x63,0x68,0x65,0x63,0x6b,0x5f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4b,0x00,0x00,
0x00,0x0a,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x74,0x65,0x78,0x74,0x00,0x42,0x6f,
0x6f,0x6b,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x00,0x00,
0x6d,0x6c,0x65,0x64,0x69,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,
0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x31,0x34,0x35,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,
0x31,0x30,0x30,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x61,0x63,0x63,
0x65,0x70,0x74,0x20,0x3d,0x20,0x66,0x61,0x6c,0x73,0x65,0x00,0x61,0x63,0x63,0x65,0x70,0x74,0x5f,0x72,
0x65,0x74,0x75,0x72,0x6e,0x00,0x66,0x61,0x6c,0x73,0x65,0x00,0x61,0x63,0x63,0x65,0x70,0x74,0x5f,0x74,
0x61,0x62,0x00,0x66,0x61,0x6c,0x73,0x65,0x00,0x00,0x00,0x6d,0x6c,0x65,0x64,0x69,0x74,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,
0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,
0x3d,0x32,0x35,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x2c,0x68,0x3d,0x31,0x30,0x30,
0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x61,0x73,0x64,0x66,0x61,0x73,0x64,0x66,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,};/*1985*/

Binary file not shown.

View File

@ -103,6 +103,7 @@
#include "assets/default/inc/ui/color_picker_hsv.data"
#include "assets/default/inc/ui/menu_down_right.data"
#include "assets/default/inc/ui/tab_bottom.data"
#include "assets/default/inc/ui/dialog_win.data"
#include "assets/default/inc/ui/fruit.data"
#include "assets/default/inc/ui/list_view_m.data"
#include "assets/default/inc/ui/slide_view_h_loop.data"
@ -1041,6 +1042,7 @@ ret_t assets_init(void) {
assets_manager_add(am, ui_color_picker_hsv_default);
assets_manager_add(am, ui_menu_down_right_default);
assets_manager_add(am, ui_tab_bottom_default);
assets_manager_add(am, ui_dialog_win_default);
assets_manager_add(am, ui_fruit_default);
assets_manager_add(am, ui_list_view_m_default);
assets_manager_add(am, ui_slide_view_h_loop_default);

View File

@ -103,6 +103,7 @@
#include "assets/default/inc/ui/color_picker_hsv.data"
#include "assets/default/inc/ui/menu_down_right.data"
#include "assets/default/inc/ui/tab_bottom.data"
#include "assets/default/inc/ui/dialog_win.data"
#include "assets/default/inc/ui/fruit.data"
#include "assets/default/inc/ui/list_view_m.data"
#include "assets/default/inc/ui/slide_view_h_loop.data"
@ -1041,6 +1042,7 @@ ret_t assets_init(void) {
assets_manager_add(am, ui_color_picker_hsv_default);
assets_manager_add(am, ui_menu_down_right_default);
assets_manager_add(am, ui_tab_bottom_default);
assets_manager_add(am, ui_dialog_win_default);
assets_manager_add(am, ui_fruit_default);
assets_manager_add(am, ui_list_view_m_default);
assets_manager_add(am, ui_slide_view_h_loop_default);

View File

@ -100,6 +100,7 @@
#include "assets/default/inc/ui/color_picker_hsv.data"
#include "assets/default/inc/ui/menu_down_right.data"
#include "assets/default/inc/ui/tab_bottom.data"
#include "assets/default/inc/ui/dialog_win.data"
#include "assets/default/inc/ui/fruit.data"
#include "assets/default/inc/ui/list_view_m.data"
#include "assets/default/inc/ui/slide_view_h_loop.data"
@ -661,6 +662,7 @@ ret_t assets_init(void) {
assets_manager_add(am, ui_color_picker_hsv_default);
assets_manager_add(am, ui_menu_down_right_default);
assets_manager_add(am, ui_tab_bottom_default);
assets_manager_add(am, ui_dialog_win_default);
assets_manager_add(am, ui_fruit_default);
assets_manager_add(am, ui_list_view_m_default);
assets_manager_add(am, ui_slide_view_h_loop_default);

View File

@ -100,6 +100,7 @@
#include "assets/default/inc/ui/color_picker_hsv.data"
#include "assets/default/inc/ui/menu_down_right.data"
#include "assets/default/inc/ui/tab_bottom.data"
#include "assets/default/inc/ui/dialog_win.data"
#include "assets/default/inc/ui/fruit.data"
#include "assets/default/inc/ui/list_view_m.data"
#include "assets/default/inc/ui/slide_view_h_loop.data"
@ -661,6 +662,7 @@ ret_t assets_init(void) {
assets_manager_add(am, ui_color_picker_hsv_default);
assets_manager_add(am, ui_menu_down_right_default);
assets_manager_add(am, ui_tab_bottom_default);
assets_manager_add(am, ui_dialog_win_default);
assets_manager_add(am, ui_fruit_default);
assets_manager_add(am, ui_list_view_m_default);
assets_manager_add(am, ui_slide_view_h_loop_default);

View File

@ -851,6 +851,12 @@ ret_t widget_set_focused_internal(widget_t* widget, bool_t focused) {
return RET_OK;
}
ret_t widget_set_accept_button_widget_state(widget_t* widget, bool_t accept_state) {
return_value_if_fail(widget != NULL && widget->vt != NULL, RET_BAD_PARAMS);
widget_set_prop_bool(widget, WIDGET_PROP_IS_ACCEPT_STATUS, accept_state);
return widget_set_need_update_style(widget);
}
ret_t widget_set_focused(widget_t* widget, bool_t focused) {
return_value_if_fail(widget != NULL && widget->vt != NULL, RET_BAD_PARAMS);
@ -2820,13 +2826,18 @@ static bool_t shortcut_fast_match(const char* shortcut, key_event_t* e) {
}
static bool_t widget_match_key(widget_t* widget, const char* prop, key_event_t* e) {
widget_t* win = NULL;
const char* shortcut = NULL;
widget_t* win = widget_get_real_window_or_keyboard(widget);
if (widget_is_window_manager(widget)) {
return FALSE;
}
if (e->key == TK_KEY_TAB && widget_get_prop_bool(widget, WIDGET_PROP_ACCEPT_TAB, FALSE)) {
return FALSE;
}
win = widget_get_real_window_or_keyboard(widget);
return_value_if_fail(win != NULL, FALSE);
shortcut = widget_get_prop_str(win, prop, NULL);
@ -2964,9 +2975,40 @@ static ret_t widget_on_keyup_before_children(widget_t* widget, key_event_t* e) {
return widget_on_event_before_children(widget, (event_t*)e);
}
static widget_t* widget_get_final_key_target(widget_t* widget) {
widget_t* key_target = NULL;
return_value_if_fail(widget != NULL, NULL);
if (widget->key_target != NULL) {
key_target = widget_get_final_key_target(widget->key_target);
if (key_target == NULL) {
return widget->key_target;
} else {
return key_target;
}
}
return NULL;
}
static ret_t widget_on_keyup_children(widget_t* widget, key_event_t* e) {
ret_t ret = RET_OK;
if (widget_is_window(widget)) {
widget_t* accept_button_widget = WIDGET(widget_get_prop_pointer(widget, WIDGET_PROP_ACCEPT_BUTTON));
widget_t* cancel_button_widget = WIDGET(widget_get_prop_pointer(widget, WIDGET_PROP_CANCEL_BUTTON));
if (accept_button_widget != NULL && key_code_is_enter(e->key)) {
#ifdef MACOS
bool_t is_control = e->cmd;
#else
bool_t is_control = e->ctrl;
#endif
widget_t* final_key_target = widget_get_final_key_target(widget);
if (!final_key_target->vt->return_key_to_activate && !is_control && !widget_get_prop_bool(final_key_target, WIDGET_PROP_ACCEPT_RETRUN, FALSE)) {
return widget_on_keyup(accept_button_widget, e);
}
} else if (cancel_button_widget!= NULL && e->key == TK_KEY_ESCAPE) {
return widget_on_keyup(cancel_button_widget, e);
}
}
if (widget->key_target != NULL) {
ret = widget_on_keyup(widget->key_target, e);
}
@ -2984,6 +3026,7 @@ static ret_t widget_on_keyup_after_children(widget_t* widget, key_event_t* e) {
static ret_t widget_on_keyup_impl(widget_t* widget, key_event_t* e) {
ret_t ret = RET_OK;
widget_t* cancel_button_widget = NULL;
return_value_if_fail(widget != NULL && e != NULL, RET_BAD_PARAMS);
return_value_if_fail(widget->vt != NULL, RET_BAD_PARAMS);
@ -2991,7 +3034,14 @@ static ret_t widget_on_keyup_impl(widget_t* widget, key_event_t* e) {
return_value_if_equal(widget_on_keyup_children(widget, e), RET_STOP);
return_value_if_equal(widget_on_keyup_after_children(widget, e), RET_STOP);
if (widget_is_activate_key(widget, e)) {
if (e->key == TK_KEY_ESCAPE) {
widget_t* win = widget_get_window(widget);
if (win != NULL) {
cancel_button_widget = WIDGET(widget_get_prop_pointer(win, WIDGET_PROP_CANCEL_BUTTON));
}
}
if (widget_is_activate_key(widget, e) || cancel_button_widget == widget) {
pointer_event_t click;
if (widget_is_focusable(widget)) {
widget_set_state(widget, WIDGET_STATE_FOCUSED);
@ -3225,6 +3275,14 @@ ret_t widget_on_pointer_down_children(widget_t* widget, pointer_event_t* e) {
widget->target = target;
}
if (widget->target == NULL) {
widget_t* accept_button_widget = WIDGET(widget_get_prop_pointer(widget_get_window(widget), WIDGET_PROP_ACCEPT_BUTTON));
if (accept_button_widget != NULL) {
bool_t accept = !widget->vt->return_key_to_activate && !widget_get_prop_bool(widget, WIDGET_PROP_ACCEPT_RETRUN, FALSE);
widget_set_accept_button_widget_state(accept_button_widget, accept);
}
}
if (widget->target != NULL && widget->target->enable && widget->target->sensitive) {
ret = widget_on_pointer_down(widget->target, e);
}
@ -4671,6 +4729,13 @@ ret_t widget_move_focus(widget_t* widget, widget_find_wanted_focus_widget_t find
widget_t* focus = find(widget, &all_focusable);
if (focus != NULL && focus != widget) {
widget_t* win = widget_get_window(widget);
widget_t* accept_button_widget = WIDGET(widget_get_prop_pointer(win, WIDGET_PROP_ACCEPT_BUTTON));
if (accept_button_widget != NULL) {
bool_t accept = !focus->vt->return_key_to_activate && !widget_get_prop_bool(focus, WIDGET_PROP_ACCEPT_RETRUN, FALSE);
widget_set_accept_button_widget_state(accept_button_widget, accept);
}
widget_set_prop_bool(widget, WIDGET_PROP_FOCUSED, FALSE);
widget_set_prop_bool(focus, WIDGET_PROP_FOCUSED, TRUE);
ret = RET_OK;

View File

@ -3385,6 +3385,7 @@ ret_t widget_remove_child_prepare(widget_t* widget, widget_t* child);
ret_t widget_set_text_impl(widget_t* widget, const wchar_t* text, bool_t check_diff);
ret_t widget_set_text_utf8_impl(widget_t* widget, const char* text, bool_t check_diff);
ret_t widget_set_accept_button_widget_state(widget_t* widget, bool_t accept_state);
ret_t widget_on_visit_focusable(void* ctx, const void* data);
/*public for input_device_status*/

View File

@ -787,6 +787,12 @@ BEGIN_C_DECLS
*/
#define WIDGET_PROP_ENABLE_PREVIEW "enable_preview"
/**
* @const WIDGET_PROP_IS_ACCEPT_STATUS
* accept
*/
#define WIDGET_PROP_IS_ACCEPT_STATUS "is_accept_status"
/**
* @const WIDGET_PROP_CLICK_THROUGH
* 穿
@ -1045,6 +1051,31 @@ BEGIN_C_DECLS
*/
#define WIDGET_PROP_MOVE_FOCUS_RIGHT_KEY "move_focus_right_key"
/**
* @const WIDGET_PROP_ACCEPT_BUTTON
* Enter button
* Enter accept_button focused accept_return true widget->vt->return_key_to_activate true
*/
#define WIDGET_PROP_ACCEPT_BUTTON "accept_button"
/**
* @const WIDGET_PROP_CANCEL_BUTTON
* Esc button
*/
#define WIDGET_PROP_CANCEL_BUTTON "cancel_button"
/**
* @const WIDGET_PROP_ACCEPT_RETRUN
* Enter
*/
#define WIDGET_PROP_ACCEPT_RETRUN "accept_return"
/**
* @const WIDGET_PROP_ACCEPT_TAB
* Tab
*/
#define WIDGET_PROP_ACCEPT_TAB "accept_tab"
/**
* @const WIDGET_PROP_ROWS
*

View File

@ -329,6 +329,12 @@ ret_t window_base_get_prop(widget_t* widget, const char* name, value_t* v) {
} else if (tk_str_eq(name, WIDGET_PROP_APPLET_NAME)) {
value_set_str(v, window_base->applet_name);
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_ACCEPT_BUTTON)) {
value_set_pointer(v, window_base->accept_button_widget);
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_CANCEL_BUTTON)) {
value_set_pointer(v, window_base->cancel_button_widget);
return RET_OK;
}
return RET_NOT_FOUND;
@ -366,6 +372,47 @@ static ret_t window_base_set_applet_name(widget_t* widget, const char* applet_na
return RET_OK;
}
ret_t window_base_set_accept_button(widget_t* widget, const char* accept_button) {
window_base_t* window_base = WINDOW_BASE(widget);
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
if (accept_button == NULL) {
if (window_base->accept_button != NULL) {
TKMEM_FREE(window_base->accept_button);
window_base->accept_button = NULL;
}
if (window_base->accept_button_widget != NULL) {
widget_set_accept_button_widget_state(window_base->accept_button_widget, FALSE);
}
window_base->accept_button_widget = NULL;
return RET_OK;
} else {
window_base->accept_button = tk_str_copy(window_base->accept_button, accept_button);
window_base->accept_button_widget = widget_lookup(widget, accept_button, TRUE);
return_value_if_fail(window_base->accept_button_widget != NULL, RET_FAIL);
widget_set_accept_button_widget_state(window_base->accept_button_widget, TRUE);
}
return RET_OK;
}
ret_t window_base_set_cancel_button(widget_t* widget, const char* cancel_button) {
window_base_t* window_base = WINDOW_BASE(widget);
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
window_base->cancel_button = cancel_button;
if (cancel_button == NULL) {
if (window_base->cancel_button != NULL) {
TKMEM_FREE(window_base->cancel_button);
window_base->cancel_button = NULL;
}
window_base->cancel_button_widget = NULL;
return RET_OK;
} else {
window_base->cancel_button = tk_str_copy(window_base->cancel_button, cancel_button);
window_base->cancel_button_widget = widget_lookup(widget, cancel_button, TRUE);
return_value_if_fail(window_base->cancel_button_widget != NULL, RET_FAIL);
}
return RET_OK;
}
ret_t window_base_set_prop(widget_t* widget, const char* name, const value_t* v) {
window_base_t* window_base = WINDOW_BASE(widget);
return_value_if_fail(widget != NULL && name != NULL && v != NULL, RET_BAD_PARAMS);
@ -446,6 +493,20 @@ ret_t window_base_set_prop(widget_t* widget, const char* name, const value_t* v)
} else if (tk_str_eq(name, WIDGET_PROP_APPLET_NAME)) {
window_base_set_applet_name(widget, value_str(v));
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_ACCEPT_BUTTON)) {
if (widget->loading) {
window_base->accept_button = tk_str_copy(window_base->accept_button, value_str(v));
} else {
window_base_set_accept_button(widget, value_str(v));
}
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_CANCEL_BUTTON)) {
if (widget->loading) {
window_base->cancel_button = tk_str_copy(window_base->cancel_button, value_str(v));
} else {
window_base_set_cancel_button(widget, value_str(v));
}
return RET_OK;
}
return RET_NOT_FOUND;
@ -471,6 +532,9 @@ ret_t window_base_on_destroy(widget_t* widget) {
TKMEM_FREE(window_base->move_focus_left_key);
TKMEM_FREE(window_base->move_focus_right_key);
TKMEM_FREE(window_base->accept_button);
TKMEM_FREE(window_base->cancel_button);
window_base_unload_theme_obj(widget);
return RET_OK;
@ -553,6 +617,8 @@ ret_t window_base_on_event(widget_t* widget, event_t* e) {
if (widget->sensitive) {
widget_set_focused_internal(widget, TRUE);
}
window_base_set_accept_button(widget, win->accept_button);
window_base_set_cancel_button(widget, win->cancel_button);
} else if (e->type == EVT_WINDOW_OPEN) {
win->stage = WINDOW_STAGE_OPENED;
if (widget->sensitive) {

View File

@ -243,6 +243,20 @@ typedef struct _window_base_t {
*/
char* move_focus_right_key;
/**
* @property {char*} accept_button
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
* Enter button
*/
char* accept_button;
/**
* @property {char*} cancel_button
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
* Esc button
*/
char* cancel_button;
/**
* @property {char*} applet_name
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
@ -280,6 +294,9 @@ typedef struct _window_base_t {
assets_manager_t* assets_manager;
image_manager_t* image_manager;
locale_info_t* locale_info;
widget_t* accept_button_widget;
widget_t* cancel_button_widget;
} window_base_t;
/**
@ -449,6 +466,26 @@ ret_t window_base_set_need_relayout(widget_t* widget, bool_t need_relayout);
*/
ret_t window_base_on_copy(widget_t* widget, widget_t* other);
/**
* @method window_base_set_accept_button
* accept_button
* @param {widget_t*} widget window_base对象
* @param {const char*} accept_button
*
* @return {ret_t} RET_OK表示成功
*/
ret_t window_base_set_accept_button(widget_t* widget, const char* accept_button);
/**
* @method window_base_set_cancel_button
* cancel_button
* @param {widget_t*} widget window_base对象
* @param {const char*} cancel_button
*
* @return {ret_t} RET_OK表示成功
*/
ret_t window_base_set_cancel_button(widget_t* widget, const char* cancel_button);
#define WINDOW_BASE(widget) ((window_base_t*)(window_base_cast(WIDGET(widget))))
/*public for subclass and runtime type check*/

View File

@ -329,6 +329,12 @@ static ret_t mledit_get_prop(widget_t* widget, const char* name, value_t* v) {
}
value_set_bool(v, inputing);
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_ACCEPT_RETRUN)) {
value_set_bool(v, mledit->accept_return);
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_ACCEPT_TAB)) {
value_set_bool(v, mledit->accept_tab);
return RET_OK;
}
return RET_NOT_FOUND;
@ -427,6 +433,12 @@ static ret_t mledit_set_prop(widget_t* widget, const char* name, const value_t*
} else if (tk_str_eq(name, WIDGET_PROP_KEYBOARD)) {
mledit_set_keyboard(widget, value_str(v));
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_ACCEPT_RETRUN)) {
mledit->accept_return = value_bool(v);
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_ACCEPT_TAB)) {
mledit->accept_tab = value_bool(v);
return RET_OK;
}
return RET_NOT_FOUND;
@ -750,6 +762,10 @@ static ret_t mledit_on_event(widget_t* widget, event_t* e) {
break;
}
}
if ((!mledit->accept_tab && !is_control && key == TK_KEY_TAB) || (!mledit->accept_return && !is_control && key_code_is_enter(key))) {
ret = RET_OK;
break;
}
if ((key < 128 && tk_isprint(key)) || key == TK_KEY_BACKSPACE || key == TK_KEY_DELETE ||
key == TK_KEY_TAB || key_code_is_enter(key)) {
wstr_set(&(mledit->last_changing_text), widget->text.str);
@ -1289,6 +1305,8 @@ static ret_t mledit_init(widget_t* widget) {
mledit->bottom_margin = 0;
mledit->scroll_line = 1.0f;
mledit->max_lines = 100;
mledit->accept_tab = TRUE;
mledit->accept_return = TRUE;
wstr_init(&(mledit->temp), 0);
wstr_init(&(mledit->last_changing_text), 0);
wstr_init(&(mledit->last_changed_text), 0);

View File

@ -139,6 +139,22 @@ typedef struct _mledit_t {
*
*/
bool_t close_im_when_blured;
/**
* @property {bool_t} accept_return
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
*
* Enter
*
*/
bool_t accept_return;
/**
* @property {bool_t} accept_tab
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
*
* Tab
*
*/
bool_t accept_tab;
/*private*/
bool_t lock_scrollbar_value;
uint8_t margin;

View File

@ -322,6 +322,16 @@ static ret_t button_get_prop(widget_t* widget, const char* name, value_t* v) {
} else if (tk_str_eq(name, WIDGET_PROP_ENABLE_PREVIEW)) {
value_set_bool(v, button->enable_preview);
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_STATE_FOR_STYLE)) {
if (button->is_accept_status) {
if (widget->visible && widget->sensitive && widget->enable) {
value_set_str(v, WIDGET_STATE_FOCUSED);
return RET_OK;
}
}
} else if (tk_str_eq(name, WIDGET_PROP_IS_ACCEPT_STATUS)) {
value_set_bool(v, button->is_accept_status);
return RET_OK;
}
return RET_NOT_FOUND;
@ -348,7 +358,8 @@ static ret_t button_get_prop_default_value(widget_t* widget, const char* name, v
}
static ret_t button_set_prop(widget_t* widget, const char* name, const value_t* v) {
return_value_if_fail(widget != NULL && name != NULL && v != NULL, RET_BAD_PARAMS);
button_t* button = BUTTON(widget);
return_value_if_fail(button != NULL && name != NULL && v != NULL, RET_BAD_PARAMS);
if (tk_str_eq(name, WIDGET_PROP_REPEAT)) {
return button_set_repeat(widget, value_int(v));
@ -358,6 +369,9 @@ static ret_t button_set_prop(widget_t* widget, const char* name, const value_t*
return button_set_enable_long_press(widget, value_bool(v));
} else if (tk_str_eq(name, WIDGET_PROP_ENABLE_PREVIEW)) {
return button_set_enable_preview(widget, value_bool(v));
} else if (tk_str_eq(name, WIDGET_PROP_IS_ACCEPT_STATUS)) {
button->is_accept_status = value_bool(v);
return RET_OK;
}
return RET_NOT_FOUND;

View File

@ -107,12 +107,12 @@ typedef struct _button_t {
bool_t enable_preview;
/**
* @property {uint32_t} long_press_time
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
* ()
* @property {bool_t} is_accept_status
* @annotation ["set_prop","get_prop","readable","scriptable"]
* accept
*
*/
uint32_t long_press_time;
bool_t is_accept_status;
/**
* @property {bool_t} pressed
@ -122,6 +122,14 @@ typedef struct _button_t {
*/
bool_t pressed;
/**
* @property {uint32_t} long_press_time
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
* ()
*
*/
uint32_t long_press_time;
/*private*/
int32_t timer_id;
int32_t repeat_nr;