Files
2025-12-03 11:12:34 +08:00

169 lines
6.3 KiB
C

/* 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