mcu_ab568x/app/platform/gui/components/component_func.c
2025-05-30 18:03:10 +08:00

832 lines
28 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "include.h"
#include "app_variable.h"
#include "m_sportInfo.h"
#define TRACE_EN 0
#if TRACE_EN
#define TRACE(...) printf(__VA_ARGS__)
#else
#define TRACE(...)
#endif
#define COMPO_TEXT_AUTOROLL_NORMAL 0 //单方向滚动后循环滚动
#define COMPO_TEXT_AUTOROLL_LR 1 //左右回弹
#define COMPO_TEXT_AUTOROLL_DIRECTION COMPO_TEXT_AUTOROLL_NORMAL//文本滚动方向
#define COMPO_TEXT_AUTOROLL_START_TICK 1000 //文本滚动开始延时
#define COMPO_TEXT_AUTOROLL_STOP_TICK 1500 //文本滚动结束延时
#define COMPO_TEXT_AUTOROLL_TICK 18 //文本滚动
#define OFFSET(x) ((x)<127?(x):(x-256) )
/**
* @brief 根据ID获取组件对象
* @param[in] id : 组件的ID
* @return 返回组件的指针
**/
void *compo_getobj_byid(u16 id)
{
if (id == 0) {
return NULL;
}
component_t *compo = compo_get_head();
while (compo != NULL) {
if (compo->id == id) {
return compo;
}
compo = compo_get_next(compo); //遍历组件
}
return NULL;
}
/**
* @brief 更新组件时间到TE时间
**/
ALIGNED(256)
void compo_update(void)
{
u32 rtc_cnt, rtc_cnt2, rtc_pr2;
bool rtc_update;
GLOBAL_INT_DISABLE();
rtc_update = compo_cb.rtc_update;
rtc_cnt = compo_cb.rtc_cnt;
rtc_cnt2 = compo_cb.rtc_cnt2 >> 17 << 2;
rtc_pr2 = (compo_cb.rtc_cnt2 & 0x1FFFF) + 1;
compo_cb.rtc_update = false;
GLOBAL_INT_RESTORE();
if (!rtc_update) {
return;
}
compo_cb.tm = time_to_tm(rtc_cnt);
compo_cb.mtime = rtc_cnt2 * 1000 / rtc_pr2;
compo_set_update(compo_cb.tm, compo_cb.mtime);
}
/**
* @brief 设置绑定数据
* @param[in] compo : 组件
* @param[in] tm : 时间tm结构体
* @param[in] x : 数据的坐标
**/
void compo_set_bonddata_ff(component_t *compo, tm_t tm ,s16 x)
{
bool flag_update = true;
int value = 0;
u32 value1 = 0;
tm_t time = rtc_clock_get();
static u8 time_num = 0;
char value_str[TEXTBOX_TEXT_BUF_LEN] = {0};
memset(value_str, '\0', 16);
if (x <= 120)
{
if (time.hour >= 7)
{
value = time.hour - 7;
}
else
{
value = time.hour + 24 - 7;
}
time_num = 1;
}
else
{
if (time.hour >= 13)
{
value = time.hour - 13;
}
else
{
value = time.hour + 24 - 13;
}
}
if (flag_update)
{
// printf("bond_data:%d, type:%d, value:%d\n", compo->bond_data, compo->type, value);
if (compo->type == COMPO_TYPE_NUMBER)
{
compo_number_t *num = (compo_number_t *)compo;
if (num->num_part)
{
if (num->num_part > 1)
{
value /= soft_pow(10, num->num_part - 1);
}
value %= 10;
}
compo_number_set(num, value);
compo_number_set_margin(num, 0);
// compo_number_set_visible(num, true);
}
else if (compo->type == COMPO_TYPE_TEXTBOX)
{
compo_textbox_t *txt = (compo_textbox_t *)compo;
compo_textbox_set(txt, value_str);
// compo_textbox_set_visible(txt, true);
}
else if (compo->type == COMPO_TYPE_PICTUREBOX)
{
compo_picturebox_t *pic = (compo_picturebox_t *)compo;
compo_picturebox_cut(pic, value, pic->radix);
// compo_picturebox_set_visible(pic, true);
}
}
}
/**
* @brief 设置绑定数据
* @param[in] compo : 组件
* @param[in] tm : 时间tm结构体
**/
void compo_set_bonddata(component_t * compo, tm_t tm)
{
bool flag_update = true;
int value = 0;
u32 value1 = 0;
s16 temperature = 0;
tm_t time = rtc_clock_get();
static u8 time_num = 0;
char value_str[TEXTBOX_TEXT_BUF_LEN] = {0};
memset(value_str, '\0', 16);
switch (compo->bond_data)
{
case COMPO_BOND_YEAD:
value = tm.year;
sprintf(value_str, "%d", value);
break;
case COMPO_BOND_MONTH:
if (compo->type == COMPO_TYPE_PICTUREBOX|| compo->type == COMPO_TYPE_NUMBER) {
compo_picturebox_t *pic = (compo_picturebox_t *)compo;
// printf("pic->radix = %d\n", pic->radix);
//如果图片数量超过了11张说明是12张图片或者24张图片
if (pic->radix > 11) {
value = tm.mon - 1;//图片序列一般从0开始
if(pic->radix == 24)
{
#if defined(__LANGUAGE_SM_CHINESE__)
if(tjd_Get_Language_Current_Index() == LANGUAGE_TYPE_Chinese)
{
value = value;
}
else
#endif
{
value += 12;
}
}
sprintf(value_str, "%d", value);
}
//如果没超过11张一般是数字
else{
value = tm.mon;
sprintf(value_str, "%02d", value);
}
}
break;
case COMPO_BOND_DAY:
value = tm.day;
sprintf(value_str, "%02d", value);
break;
case COMPO_BOND_DAY_H:
value = tm.day / 10;
sprintf(value_str, "%d", value);
break;
case COMPO_BOND_DAY_L:
value = tm.day % 10;
sprintf(value_str, "%d", value);
break;
case COMPO_BOND_WEEKDAY:
{
if(tm.weekday == 0)
value = 6;
else
value = tm.weekday - 1;
}
strcpy(value_str, i18n[STR_SUNDAY + value]);
if (compo->type == COMPO_TYPE_PICTUREBOX|| compo->type == COMPO_TYPE_NUMBER) {
compo_picturebox_t *pic = (compo_picturebox_t *)compo;
if(pic->radix > 7)
{
#if defined(__LANGUAGE_SM_CHINESE__)
if(tjd_Get_Language_Current_Index() == LANGUAGE_TYPE_Chinese)
{
value = value;
}
else
#endif
{
value += 7;
}
}
}
sprintf(value_str, "%d", value);
break;
case COMPO_BOND_HOUR:
value = get_autoformat_hour(tm.hour);
sprintf(value_str, "%02d", value);
break;
case COMPO_BOND_MINUTE:
value = tm.min;
sprintf(value_str, "%02d", value);
break;
case COMPO_BOND_HOUR_H:
value = get_autoformat_hour(tm.hour) / 10;
sprintf(value_str, "%d", value);
break;
case COMPO_BOND_HOUR_L:
value = get_autoformat_hour(tm.hour) % 10;
sprintf(value_str, "%d", value);
break;
case COMPO_BOND_MINUTE_H:
value = tm.min / 10;
sprintf(value_str, "%02d", value);
break;
case COMPO_BOND_MINUTE_L:
value = tm.min % 10;
sprintf(value_str, "%02d", value);
break;
case COMPO_BOND_SECOND:
value = tm.sec;
sprintf(value_str, "%02d", value);
break;
case COMPO_BOND_DATE:
value = tm.mon * 100 + tm.day;
sprintf(value_str, "%02d-%02d", tm.mon, tm.day);
break;
case COMPO_BOND_TIME:
value = tm.hour * 100 + tm.min;
sprintf(value_str, "%02d:%02d", get_autoformat_hour(tm.hour), tm.min);
break;
case COMPO_BOND_IMAGE_WEATHER:
value = SysVariable.weather.type;
// printf("weather type ==== value = %d\n");
sprintf(value_str, "%d", value);
break;
case COMPO_BOND_BLE_STA:
value = ble_is_connected();
sprintf(value_str, "%d", value);
break;
case COMPO_BOND_BT_STA:
value = !bt_is_connected();
sprintf(value_str, "%d", value);
break;
case COMPO_BOND_BTBLE_STA:
//0-3:BTBLE,BT,BLE,NULL
value = ((!bt_is_connected()) << 1) | (!ble_is_connect());
sprintf(value_str, "%d", value);
break;
// case COMPO_BOND_DISTANCE_PROGRESS:
// value = 0;
// if (compo->type == COMPO_TYPE_PICTUREBOX && sys_cb.distance_goal) {
// value = ((compo_picturebox_t*)compo)->radix * sys_cb.distance_cur / sys_cb.distance_goal;
// value = MAX(0, MIN(((compo_picturebox_t*)compo)->radix - 1, value));
// }
// sprintf(value_str, "%d", value);
// break;
// case COMPO_BOND_KCAL_PROGRESS:
// value = 0;
// if (compo->type == COMPO_TYPE_PICTUREBOX && sys_cb.kcal_goal) {
// value = ((compo_picturebox_t*)compo)->radix * sys_cb.kcal_cur / sys_cb.kcal_goal;
// value = MAX(0, MIN(((compo_picturebox_t*)compo)->radix - 1, value));
// }
// sprintf(value_str, "%d", value);
// break;
// case COMPO_BOND_STEPS_PROGRESS:
// value = 0;
// if (compo->type == COMPO_TYPE_PICTUREBOX && sys_cb.step_goal) {
// value = ((compo_picturebox_t*)compo)->radix * sys_cb.step_cur / sys_cb.step_goal;
// value = MAX(0, MIN(((compo_picturebox_t*)compo)->radix - 1, value));
// }
// sprintf(value_str, "%d", value);
// break;
case COMPO_BOND_VBAT_PROGRESS:
value = 0;
if (compo->type == COMPO_TYPE_PICTUREBOX) {
// value = ((compo_picturebox_t*)compo)->radix * bsp_vbat_percent_get() / 100;
// value = MAX(0, MIN(((compo_picturebox_t*)compo)->radix - 1, value));
value = tjd_charging_show_bat_ui_level();
}
sprintf(value_str, "%d", value);
break;
case COMPO_BOND_KCAL:
value = getCalorie(SysVariable.curSportRecord.pedo)/1000;
sprintf(value_str, "%04d", value);
break;
case COMPO_BOND_STEP:
value = SysVariable.curSportRecord.pedo;
sprintf(value_str, "%05d", value);
break;
case COMPO_BOND_HEARTRATE:
value = SysVariable.heartRateModule.lastHeart;
sprintf(value_str, "%03d", value);
break;
case COMPO_BOND_BLOOD_OXYGEN:
value = SysVariable.heartRateModule.lastSpo2;
sprintf(value_str, "%03d", value);
break;
// case COMPO_BOND_BLOOD_SUGER:
// value = 0;
// sprintf(value_str, "%d", value);
// break;
case COMPO_BOND_WEATHER:
// value = sys_cb.weather_idx;
value = SysVariable.weather.temperature;
value = weather_temperature_transform(OFFSET(value))/100;
sprintf(value_str, "%d", value);
// printf("weather - value = %d\n",value);
// sprintf(value_str, "%s", i18n[STR_CLOUDY + value]);
break;// case COMPO_BOND_WEATHER:
// value = sys_cb.weather_idx;
// sprintf(value_str, "%s", i18n[STR_CLOUDY + value]);
// break;
// case COMPO_BOND_ATMOMS:
// value = 0;
// sprintf(value_str, "%d", value);
// break;
case COMPO_BOND_TEMPERATURE:
temperature = weather_temperature_transform(OFFSET(SysVariable.weather.temperature)) / 100; //温度
sprintf(value_str, "%d~%d℃", SysVariable.weather.temperature, SysVariable.weather.temperature); //温度范围
break;
// case COMPO_BOND_ALTITUDE:
// value = 0;
// sprintf(value_str, "%d", value);
// break;
case COMPO_BOND_BATTERY:
// value = sys_cb.vbat_percent;
value = tjd_charging_show_bat_ui_level()*10;
if(value== 0xff){
sprintf(value_str, "--%%");
}
else{
sprintf(value_str, "%d%%", value);
}
break;
case COMPO_BOND_DISTANCE:
value = getDistance(SysVariable.curSportRecord.pedo);
value1 = getDistance(SysVariable.curSportRecord.pedo)-(value*1000)/100;
if (SysVariable.deviceInfo.distanceUnit == 1) {
value = value * 621371 / 1000000; // 转英制数据
}
value = value /1000;
// sprintf(value_str, "%02d.%01d", value / 1000, value % 1000 / 100);
// printf("value / 1000 = %d\n",value,value / 1000);
sprintf(value_str, "%02d.%d", value,value1);
break;
case COMPO_BOND_TEMPERATURE_UNIT:
if (SysVariable.deviceInfo.distanceUnit == UNIT_TYPE_INCH) {
value = 1; // 转英制数据
}
else
value = 0;
break;
// case COMPO_BOND_DISTANCE_UNIT:
// value = 0; //0:km 1:mile
// //strcpy(value_str, i18n[STR_KM + value]);
// break;
case COMPO_BOND_CUSTOM_NEW_YORK:
if(tm.hour<13)
{
value = get_autoformat_hour(tm.hour+24-13);
}
else
{
value = get_autoformat_hour(tm.hour-13);
}
sprintf(value_str, "%02d", value);
break;
case COMPO_BOND_CUSTOM_PARIS:
if(tm.hour<7)
{
value = get_autoformat_hour(tm.hour+24-7);
}
else{
value = get_autoformat_hour(tm.hour-7);
}
sprintf(value_str, "%02d", value);
break;
case COMPO_BOND_CUSTOM_WEATHER_MIN:
temperature = weather_temperature_transform(OFFSET(SysVariable.weather.minTemp)) / 100; //最低温度
sprintf(value_str, "%d~%d℃", SysVariable.weather.minTemp, SysVariable.weather.maxTemp); //温度范围
break;
case COMPO_BOND_CUSTOM_WEATHER_MAX:
temperature = weather_temperature_transform(OFFSET(SysVariable.weather.n2day_maxTemp)) / 100; //最高温度
sprintf(value_str, "%d~%d℃", SysVariable.weather.minTemp, SysVariable.weather.maxTemp); //温度范围
break;
case COMPO_BOND_CUSTOM0:
value = getDistance(SysVariable.curSportRecord.pedo);
if (SysVariable.deviceInfo.distanceUnit == 1) {
value = value * 621371 / 1000000; // 转英制数据
}
value = value%1000/100;
break;
default:
flag_update = false;
break;
}
if (flag_update) {
// printf("bond_data:%d, type:%d, value:%d\n", compo->bond_data, compo->type, value);
if(compo->bond_data==COMPO_BOND_CUSTOM_WEATHER_MIN ||compo->bond_data==COMPO_BOND_CUSTOM_WEATHER_MAX || compo->bond_data== COMPO_BOND_TEMPERATURE)
{
compo_number_t *num = (compo_number_t *)compo;
compo_number_set(num, temperature);
compo_number_set_margin(num,0);
}
else if (compo->type == COMPO_TYPE_NUMBER) {
compo_number_t *num = (compo_number_t *)compo;
if (num->num_part) {
if (num->num_part > 1) {
value /= soft_pow(10, num->num_part - 1);
}
value %= 10;
}
compo_number_set(num, value);
compo_number_set_margin(num,0);
// compo_number_set_visible(num, true);
} else if (compo->type == COMPO_TYPE_TEXTBOX) {
compo_textbox_t *txt = (compo_textbox_t *)compo;
compo_textbox_set(txt, value_str);
// compo_textbox_set_visible(txt, true);
} else if (compo->type == COMPO_TYPE_PICTUREBOX) {
compo_picturebox_t *pic = (compo_picturebox_t *)compo;
compo_picturebox_cut(pic, value, pic->radix);
// compo_picturebox_set_visible(pic, true);
}
}
}
/**
* @brief 设置滚动
* @param[in] rcb : 滚动控制结构体
* @param[in] txt : 滚动Widget Text
* @param[in] multiline : 是否为多行竖向滚动
**/
static void compo_set_roll(compo_roll_cb_t *rcb, widget_text_t *txt, bool multiline)
{
if (!rcb->mode && !rcb->is_drag) {
return;
}
static bool flag_drag = false;
static s32 ddy = 0;
s32 dx=0,dy=0;
bool align_center = widget_get_align_center(txt);
area_t rel_textbox_area = widget_text_get_box_area_rel(txt);
area_t rel_text_area = widget_text_get_area(txt);
u16 circ_pixel = widget_text_get_autoroll_circ_pixel(txt);
// int end_hei = rel_textbox_area.hei * 2 / 3;
int end_hei = widget_text_get_height();
bool txt_directoion = widget_text_get_right_align(txt);
flag_drag = ctp_get_dxy(&dx, &dy);
if (flag_drag) { //按下
} else { //抬起
ddy = rcb->offset;
}
switch (rcb->sta) {
case COMPO_ROLL_STA_IDLE:
if (flag_drag && rcb->is_drag && multiline) { //多行显示可拖拽
rcb->tick = tick_get();
rcb->sta = COMPO_ROLL_STA_ROLL;
} else if (tick_check_expire(rcb->tick, COMPO_TEXT_AUTOROLL_START_TICK)) {
rcb->tick = tick_get();
rcb->sta = COMPO_ROLL_STA_ROLL;
}
break;
case COMPO_ROLL_STA_ROLL:
if (flag_drag && rcb->is_drag && multiline) { //多行显示可拖拽
rcb->tick = tick_get();
rcb->offset = ddy + dy;
if (rcb->offset > 0) {
rcb->offset = 0;
} else if (rcb->offset < end_hei - rel_text_area.hei) {
rcb->offset = end_hei - rel_text_area.hei;
}
widget_text_set_client(txt, 0, rcb->offset);
} else if (tick_check_expire(rcb->tick, COMPO_TEXT_AUTOROLL_TICK)) {
rcb->tick = tick_get();
if (rcb->mode) {
rcb->offset += rcb->direction;
}
if (multiline) {
if (rel_text_area.hei + rcb->offset <= end_hei) {
rcb->sta = COMPO_ROLL_STA_STOP;
}
widget_text_set_client(txt, 0, rcb->offset);
} else {
int end_wid = 0;
rel_text_area.wid = align_center ? rel_text_area.wid / 2 : rel_text_area.wid; //文本居中时,宽度需要/2防止滚完导致C208蓝屏
if (txt_directoion) {
#if COMPO_TEXT_AUTOROLL_DIRECTION
end_wid = rel_textbox_area.wid * 1 / 3;
if ((rcb->offset <= -(rel_text_area.wid * 1 / 3 + end_wid)) || (rcb->offset >= end_wid)) {
rcb->direction = -rcb->direction;
}
#else
if (rcb->mode == TEXT_AUTOROLL_MODE_SROLL_CIRC) {
end_wid = 0;
} else if (rcb->mode == TEXT_AUTOROLL_MODE_SROLL) {
end_wid = rel_text_area.wid;
if (rel_textbox_area.wid < rel_text_area.wid / 3) {
end_wid += (rel_text_area.wid / 3 - rel_textbox_area.wid);
}
}
if (rcb->offset > end_wid) {
if (rcb->mode == TEXT_AUTOROLL_MODE_SROLL_CIRC) {
rcb->offset = -(rel_text_area.wid * (1 + align_center) + circ_pixel);
} else if (rcb->mode == TEXT_AUTOROLL_MODE_SROLL) {
rcb->sta = COMPO_ROLL_STA_STOP;
}
}
#endif
} else {
#if COMPO_TEXT_AUTOROLL_DIRECTION
end_wid = rel_textbox_area.wid * 1 / 3;
if ((rcb->offset <= -(rel_text_area.wid * 1 / 3 + end_wid)) || (rcb->offset >= end_wid)) {
rcb->direction = -rcb->direction;
}
#else
s16 circ_end_wid = align_center ? (rel_text_area.wid * 2 + circ_pixel) : (rel_text_area.wid + circ_pixel);
if (rcb->mode == TEXT_AUTOROLL_MODE_SROLL_CIRC) {
end_wid = circ_end_wid;
} else if (rcb->mode == TEXT_AUTOROLL_MODE_SROLL) {
end_wid = rel_text_area.wid * 2 / 3;
}
if (rel_textbox_area.wid < rel_text_area.wid / 3) {
end_wid += (rel_text_area.wid / 3 - rel_textbox_area.wid);
}
if (rcb->offset < -end_wid) {
if (rcb->mode == TEXT_AUTOROLL_MODE_SROLL_CIRC) {
rcb->offset = 0;
} else if (rcb->mode == TEXT_AUTOROLL_MODE_SROLL){
rcb->sta = COMPO_ROLL_STA_STOP;
}
}
#endif
}
widget_text_set_client(txt, rcb->offset, 0);
}
}
break;
case COMPO_ROLL_STA_STOP:
if (flag_drag && rcb->is_drag && multiline) { //多行显示可拖拽
rcb->tick = tick_get();
rcb->sta = COMPO_ROLL_STA_ROLL;
} else if (tick_check_expire(rcb->tick, COMPO_TEXT_AUTOROLL_STOP_TICK)) {
rcb->tick = tick_get();
rcb->sta = COMPO_ROLL_STA_IDLE;
if (multiline) {
rcb->offset = 0;
widget_text_set_client(txt, 0, rcb->offset);
} else {
rcb->offset = (txt_directoion && rcb->mode) ? -rel_text_area.wid : 0;
if (txt_directoion && (rcb->mode == TEXT_AUTOROLL_MODE_SROLL_CIRC)) {
rcb->offset = -rel_text_area.wid;
} else {
rcb->offset = 0;
}
//居中对齐且存在滚动时从最左边开始滚动
if (rcb->direction && widget_get_align_center(txt)) {
rcb->offset = (rel_text_area.wid - rel_textbox_area.wid) / 2;
}
widget_text_set_client(txt, rcb->offset, 0);
}
}
break;
default:
halt(HALT_GUI_COMPO_ROLL);
break;
}
}
/**
* @brief 设置组件更新
* @param[in] tm : 时间tm结构体
* @param[in] mtime : 毫秒
**/
void compo_set_update(tm_t tm, u16 mtime)
{
component_t *compo = compo_get_head();
s16 angle_h, angle_m, angle_s;
char time_str[16];
angle_h = tm.hour * 300 + tm.min * 5 + tm.sec / 12;
angle_m = tm.min * 60 + tm.sec;
//angle_s = tm.sec * 60 + mtime / 100 * 6 - 900; //按100ms对齐
angle_s = tm.sec * 60 + mtime * 3 / 100 * 2; //按33ms(0.2度)对齐
//angle_s = tm.sec * 60 + mtime * 6 / 100 - 900; //按实际ms
//printf("%d %d %d\n", angle_h, angle_m, angle_s);
while (compo != NULL) {
switch (compo->type) {
case COMPO_TYPE_DATETIME:
{
s16 angle = 0;
switch (compo->bond_data) {
case COMPO_BOND_HOUR:
angle = angle_h;
break;
case COMPO_BOND_MINUTE:
angle = angle_m;
break;
case COMPO_BOND_SECOND:
angle = angle_s;
break;
default:
break;
}
if (angle) {
compo_datetime_t *dtime = (compo_datetime_t *)compo;
angle -= dtime->start_angle;
angle = dtime->anticlockwise ? (3600 - angle) : angle;
widget_image_set_rotation(dtime->img, angle);
}
}
break;
case COMPO_TYPE_ICONLIST:
{
s16 angle = 0;
compo_iconlist_t *iconlist = (compo_iconlist_t *)compo;
if (iconlist->hour != NULL) {
angle = angle_h - iconlist->start_angle;
widget_image_set_rotation(iconlist->hour, angle);
}
if (iconlist->min != NULL) {
angle = angle_m - iconlist->start_angle;
widget_image_set_rotation(iconlist->min, angle);
}
if (iconlist->sec != NULL) {
angle = angle_s - iconlist->start_angle;
widget_image_set_rotation(iconlist->sec, angle);
}
if (iconlist->page_time != NULL) {
//同步时钟图标Alpha值
widget_set_alpha(iconlist->page_time , widget_get_alpha(iconlist->time_bg));
}
}
break;
case COMPO_TYPE_LISTBOX:
{
compo_listbox_t *listbox = (compo_listbox_t *)compo;
int i;
for (i=0; i<LISTBOX_ITEM_CNT; i++) {
compo_set_roll(&listbox->roll_cb[i], listbox->item_text[i], false); //滚动
}
}
break;
case COMPO_TYPE_DISKLIST:
{
compo_disklist_t *disklist = (compo_disklist_t *)compo;
int i;
for (i=0; i<DISKLIST_ITEM_CNT; i++) {
compo_set_roll(&disklist->roll_cb[i], disklist->item_text[i], false); //滚动
}
}
break;
case COMPO_TYPE_CARDBOX:
{
compo_cardbox_t *cardbox = (compo_cardbox_t *)compo;
if (cardbox->text[0]) {
compo_set_roll(&cardbox->roll_cb, cardbox->text[0], false); //滚动
}
}
break;
case COMPO_TYPE_FORM:
{
compo_form_t *frm = (compo_form_t *)compo;
if (widget_get_visble(frm->time)) {
if (SysVariable.deviceInfo.timeType == TIME_TYPE_12_HOUR)
sprintf(time_str, "%02d:%02d%s", get_autoformat_hour(tm.hour), tm.min, tm.hour >= 12 ? "PM" : "AM");
else
sprintf(time_str, "%02d:%02d", tm.hour, tm.min);
widget_text_set(frm->time, time_str);
}
}
break;
case COMPO_TYPE_NUMBER:
case COMPO_TYPE_PICTUREBOX:
compo_set_bonddata(compo, tm);
break;
case COMPO_TYPE_TEXTBOX:
compo_set_bonddata(compo, tm); //设置绑定数据
compo_textbox_t *textbox = (compo_textbox_t *)compo;
compo_set_roll(&textbox->roll_cb, textbox->txt, textbox->multiline); //滚动
break;
case COMPO_TYPE_ANIMATION:
compo_animation_process((compo_animation_t *)compo);
break;
default:
break;
}
compo = compo_get_next(compo); //遍历组件
}
}
/**
* @brief 获取按键ID
**/
int compo_get_button_id(void)
{
point_t pt = ctp_get_sxy();
component_t *compo = (component_t *)compo_pool_get_top();
while (compo != NULL) {
if (compo->type == COMPO_TYPE_BUTTON) {
compo_button_t *btn = (compo_button_t *)compo;
rect_t rect = widget_get_absolute(btn->widget);
if (abs_s(pt.x - rect.x) * 2 <= rect.wid && abs_s(pt.y - rect.y) * 2 <= rect.hei) {
return btn->id;
}
}
compo = compo_get_next(compo); //遍历组件
}
return ID_NULL;
}
/**author gzj
* @brief 获取不居中 按键id
**/
int compo_get_align_center_false_button_id(void)
{
point_t pt = ctp_get_sxy();
component_t *compo = (component_t *)compo_pool_get_top();
while (compo != NULL) {
if (compo->type == COMPO_TYPE_BUTTON) {
compo_button_t *btn = (compo_button_t *)compo;
rect_t rect = widget_get_absolute(btn->widget);
if (abs_s(pt.x - rect.x) <= rect.wid && abs_s(pt.y - rect.y) <= rect.hei) {
return btn->id;
}
}
compo = compo_get_next(compo); //遍历组件
}
return ID_NULL;
}