/* Copyright(C) 2010- , JIELI TECHNOLOGY, Inc. * All right reserved. */ /* ------------------------------------------------------------------------------------*/ /* * @file ui_number.h * * @brief 数字控件API头文件 * * @author * * @version V201 * * @date 2022-12-15 */ /* ------------------------------------------------------------------------------------*/ #ifndef __UI_NUMBER_WIDGET_H__ #define __UI_NUMBER_WIDGET_H__ #include "jlui/control.h" #include "jlui/ui_core.h" #include "jlui/p.h" /* ------------------------------------------------------------------------------------*/ /** * @brief 数字控件参数 type 的类型定义,允许显示数字或字符串 */ /* ------------------------------------------------------------------------------------*/ enum { TYPE_NUM, TYPE_STRING, }; /* ------------------------------------------------------------------------------------*/ /** * @brief 数字控件显示参数 */ /* ------------------------------------------------------------------------------------*/ struct unumber { u8 numbs; // 参数数量 u8 type; // 参数类型 // 参数类型(type)决定使用下面哪个参数用作显示,number[2]和num_str互斥,数字控件只会显示其中一个 u32 number[2]; // 数字(允许显示两个数值,中间自动由间隔符隔开) u8 *num_str; // 字符串(将通过ascii字库显示) }; /* ------------------------------------------------------------------------------------*/ /** * @brief 数字控件元素句柄 */ /* ------------------------------------------------------------------------------------*/ struct ui_number { struct element_text text; // 共享文本的起始结构,如果数字控件无图片时,用ascii绘图,84byte char source[9]; // 数据源 u8 css_num : 4; // css属性个数 u8 nums: 2; // 显示的数字个数,这里决定从 number[]中拿几个数字使用 u8 type: 2; // 数据类型,TYPE_NUM/TYPE_STRING,目前就两种选项 u16 number[2]; // 最多两个数字,u16的大小,如果显示小数,number[0].number[1] u16 buf[20]; // 使用图片显示数字时的索引,按照这个buf顺序显示图片,最多显示19个图片,要以 0xff 结尾 u16 color; // 普通颜色,与flash资源保持一致 u16 hi_color; // 高亮颜色,与flash资源保持一致 char delimiter[2]; // 分隔符索引映射表,比如数字控件的格式为%d/%d?,当解析到字符'/'时,会读取分隔符图片列表中序号为delimiter[0]的分隔符图片,即delimiter数组的下标由格式字符串的分隔符序号决定(序号从0开始,依此类推) u32 css[2]; // 控件属性指针 u8 *num_str; // 如果显示字符串时的字符串内容 const struct ui_number_info *info; const struct element_event_handler *handler; // text 结构体中已经包含了handler指针 }; // 164 byte /* ------------------------------------------------------------------------------------*/ /** * @brief 通过ID获取数字控件句柄 */ /* ------------------------------------------------------------------------------------*/ #define ui_number_for_id(id) \ (struct ui_number *)ui_core_get_element_by_id(id) // ui_element_for_id(id, struct ui_number) /* ------------------------------------------------------------------------------------*/ /** * @brief ui_number_enable 数字控件使能(内部调用) */ /* ------------------------------------------------------------------------------------*/ void ui_number_enable(); /* ------------------------------------------------------------------------------------*/ /** * @brief new_ui_number 创建新的数字控件(内部调用) * * @param _info 数字控件信息 * @param parent 父控件 * * @return 数字控件元素句柄 */ /* ------------------------------------------------------------------------------------*/ void *new_ui_number(const void *_info, struct element *parent); /* ------------------------------------------------------------------------------------*/ /** * @brief ui_number_update 更新数字控件内容(不带redraw) * * @param number 数字控件句柄 * @param n 待显示的内容 * * @return 0 正常,-22 控件不存在 */ /* ------------------------------------------------------------------------------------*/ int ui_number_update(struct ui_number *number, struct unumber *n); /* ------------------------------------------------------------------------------------*/ /** * @brief ui_number_update_by_id 更新数字控件内容(带redraw) * * @param id 数字控件ID * @param n 待显示内容 * * @return 0 正常,-22 控件不存在 */ /* ------------------------------------------------------------------------------------*/ int ui_number_update_by_id(int id, struct unumber *n); /* ------------------------------------------------------------------------------------*/ /** * @brief ui_number_update_with_delimiter 更新数字控件内容以及分隔符序号(不带redraw) * * @param number 数字控件句柄 * @param n 待显示的内容 * @param delimiter_0 数字控件格式属性第一个分隔符在分隔符图片列表中的序号(从0开始),-1为使用默认序号 * @param delimiter_1 数字控件格式属性第二个分隔符在分隔符图片列表中的序号(从0开始),-1为使用默认序号 * * @return 0 正常,-22 控件不存在 */ /* ------------------------------------------------------------------------------------*/ int ui_number_update_with_delimiter(struct ui_number *number, struct unumber *n, char delimiter_0, char delimiter_1); /* ------------------------------------------------------------------------------------*/ /** * @brief ui_number_update_with_delimiter_by_id 更新数字控件内容以及分隔符序号(带redraw) * * @param id 数字控件ID * @param n 待显示内容 * @param delimiter_0 数字控件格式属性第一个分隔符在分隔符图片列表中的序号(从0开始),-1为使用默认序号 * @param delimiter_1 数字控件格式属性第二个分隔符在分隔符图片列表中的序号(从0开始),-1为使用默认序号 * * @return 0 正常,-22 控件不存在 */ /* ------------------------------------------------------------------------------------*/ int ui_number_update_with_delimiter_by_id(int id, struct unumber *n, char delimiter_0, char delimiter_1); #endif