163 lines
4.2 KiB
C
163 lines
4.2 KiB
C
|
|
/**
|
|||
|
|
* File: pages.h
|
|||
|
|
* Author: AWTK Develop Team
|
|||
|
|
* Brief: pages
|
|||
|
|
*
|
|||
|
|
* Copyright (c) 2018 - 2023 Guangzhou ZHIYUAN Electronics Co.,Ltd.
|
|||
|
|
*
|
|||
|
|
* 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
|
|||
|
|
* License file for more details.
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* History:
|
|||
|
|
* ================================================================
|
|||
|
|
* 2018-06-16 Li XianJing <xianjimli@hotmail.com> created
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#ifndef TK_PAGES_H
|
|||
|
|
#define TK_PAGES_H
|
|||
|
|
|
|||
|
|
#include "base/widget.h"
|
|||
|
|
#include "tkc/str.h"
|
|||
|
|
|
|||
|
|
BEGIN_C_DECLS
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @class pages_t
|
|||
|
|
* @parent widget_t
|
|||
|
|
* @annotation ["scriptable","design","widget"]
|
|||
|
|
* 页面管理控件。
|
|||
|
|
*
|
|||
|
|
* 只有一个Page处于active状态,处于active状态的Page才能显示并接收事件。
|
|||
|
|
* 常用于实现标签控件中的页面管理。
|
|||
|
|
*
|
|||
|
|
* pages\_t是[widget\_t](widget_t.md)的子类控件,
|
|||
|
|
* widget\_t的函数均适用于pages\_t控件。
|
|||
|
|
*
|
|||
|
|
* 在xml中使用"pages"标签创建页面管理控件。如:
|
|||
|
|
*
|
|||
|
|
* ```xml
|
|||
|
|
* <tab_control x="0" y="0" w="100%" h="100%" >
|
|||
|
|
* <pages x="c" y="20" w="90%" h="-60" value="1">
|
|||
|
|
* ...
|
|||
|
|
* </pages>
|
|||
|
|
* <tab_button_group>
|
|||
|
|
* ...
|
|||
|
|
* </tab_button_group>
|
|||
|
|
* </tab_control>
|
|||
|
|
* ```
|
|||
|
|
*
|
|||
|
|
* > 更多用法请参考:
|
|||
|
|
* [tab control](https://github.com/zlgopen/awtk/blob/master/design/default/ui/)
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
typedef struct _pages_t {
|
|||
|
|
widget_t widget;
|
|||
|
|
/**
|
|||
|
|
* @property {uint32_t} active
|
|||
|
|
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
|
|||
|
|
* 当前活跃的page。(需要用到 MVVM 数据绑定请设置 value 属性)
|
|||
|
|
*/
|
|||
|
|
uint32_t active;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @property {bool_t} auto_focused
|
|||
|
|
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
|
|||
|
|
* 选择切换界面时是否自动聚焦上一次保存的焦点。(默认为TRUE)
|
|||
|
|
*/
|
|||
|
|
bool_t auto_focused;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @property {uint32_t} value
|
|||
|
|
* @annotation ["set_prop","get_prop","readable","persitent","design","fake"]
|
|||
|
|
* 当前活跃的page。
|
|||
|
|
*/
|
|||
|
|
/* private */
|
|||
|
|
str_t str_target;
|
|||
|
|
uint32_t init_idle_id;
|
|||
|
|
uint32_t focused_idle_id;
|
|||
|
|
bool_t has_active;
|
|||
|
|
} pages_t;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @event {value_change_event_t} EVT_VALUE_WILL_CHANGE
|
|||
|
|
* 值(当前页)即将改变事件。
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @event {value_change_event_t} EVT_VALUE_CHANGED
|
|||
|
|
* 值(当前页)改变事件。
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @method pages_create
|
|||
|
|
* 创建pages对象
|
|||
|
|
* @annotation ["constructor", "scriptable"]
|
|||
|
|
* @param {widget_t*} parent 父控件
|
|||
|
|
* @param {xy_t} x x坐标
|
|||
|
|
* @param {xy_t} y y坐标
|
|||
|
|
* @param {wh_t} w 宽度
|
|||
|
|
* @param {wh_t} h 高度
|
|||
|
|
*
|
|||
|
|
* @return {widget_t*} 对象。
|
|||
|
|
*/
|
|||
|
|
widget_t* pages_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @method pages_cast
|
|||
|
|
* 转换为pages对象(供脚本语言使用)。
|
|||
|
|
* @annotation ["cast", "scriptable"]
|
|||
|
|
* @param {widget_t*} widget pages对象。
|
|||
|
|
*
|
|||
|
|
* @return {widget_t*} pages对象。
|
|||
|
|
*/
|
|||
|
|
widget_t* pages_cast(widget_t* widget);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @method pages_set_active
|
|||
|
|
* 设置当前的Page。
|
|||
|
|
* @annotation ["scriptable"]
|
|||
|
|
* @param {widget_t*} widget 控件对象。
|
|||
|
|
* @param {uint32_t} index 当前Page的序号。
|
|||
|
|
*
|
|||
|
|
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
|||
|
|
*/
|
|||
|
|
ret_t pages_set_active(widget_t* widget, uint32_t index);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @method pages_set_auto_focused
|
|||
|
|
* 设置切换界面时是否自动聚焦。
|
|||
|
|
* @annotation ["scriptable"]
|
|||
|
|
* @param {widget_t*} widget 控件对象。
|
|||
|
|
* @param {bool_t} auto_focused 切换界面时是否自动聚焦。
|
|||
|
|
*
|
|||
|
|
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
|||
|
|
*/
|
|||
|
|
ret_t pages_set_auto_focused(widget_t* widget, bool_t auto_focused);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @method pages_set_active_by_name
|
|||
|
|
* 通过页面的名字设置当前的Page。
|
|||
|
|
* @annotation ["scriptable"]
|
|||
|
|
* @param {widget_t*} widget 控件对象。
|
|||
|
|
* @param {const char*} name 当前Page的名字。
|
|||
|
|
*
|
|||
|
|
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
|||
|
|
*/
|
|||
|
|
ret_t pages_set_active_by_name(widget_t* widget, const char* name);
|
|||
|
|
|
|||
|
|
#define PAGES(widget) ((pages_t*)(pages_cast(WIDGET(widget))))
|
|||
|
|
#define WIDGET_PROP_AUTO_FOCUSED "auto_focused"
|
|||
|
|
|
|||
|
|
/*public for subclass and runtime type check*/
|
|||
|
|
TK_EXTERN_VTABLE(pages);
|
|||
|
|
|
|||
|
|
END_C_DECLS
|
|||
|
|
|
|||
|
|
#endif /*TK_PAGES_H*/
|