617 lines
25 KiB
C
617 lines
25 KiB
C
#include "include.h"
|
||
#include "func.h"
|
||
#include "app_variable.h"
|
||
|
||
#if TRACE_EN
|
||
#define TRACE(...) printf(__VA_ARGS__)
|
||
#else
|
||
#define TRACE(...)
|
||
#endif
|
||
|
||
#define TOUCH_HEIGHT (GUI_SCREEN_WIDTH-GUI_SCREEN_WIDTH/3)
|
||
//组件ID
|
||
enum {
|
||
//按键
|
||
COMPO_ID_BTN_YES = 1,
|
||
COMPO_ID_BTN_NO,
|
||
COMPO_ID_BTN_SETTIME_HOUR,
|
||
COMPO_ID_BTN_SETTIME_MIN,
|
||
|
||
//图像
|
||
COMPO_ID_PIC_CONTINUE_CLICK,
|
||
COMPO_ID_PIC_SELECT_HOUR,
|
||
COMPO_ID_PIC_SELECT_MIN,
|
||
|
||
//数字
|
||
COMPO_ID_NUM_TIME_SET_HOUR_UU,
|
||
COMPO_ID_NUM_TIME_SET_HOUR_UP,
|
||
COMPO_ID_NUM_TIME_SET_HOUR,
|
||
COMPO_ID_NUM_TIME_SET_HOUR_DOWN,
|
||
COMPO_ID_NUM_TIME_SET_HOUR_DD,
|
||
|
||
COMPO_ID_NUM_TIME_SET_MIN_UU,
|
||
COMPO_ID_NUM_TIME_SET_MIN_UP,
|
||
COMPO_ID_NUM_TIME_SET_MIN,
|
||
COMPO_ID_NUM_TIME_SET_MIN_DOWN,
|
||
COMPO_ID_NUM_TIME_SET_MIN_DD,
|
||
};
|
||
|
||
typedef struct settime_set_num_item_t_ {
|
||
int num_cnt;
|
||
u16 num_id;
|
||
s16 load_id;
|
||
int val;
|
||
s16 x;
|
||
s16 y;
|
||
bool visible_en;
|
||
} settime_set_num_item_t;
|
||
|
||
typedef struct f_set_time_t_ {
|
||
settime_set_num_item_t set_num_item[11];
|
||
area_t size;
|
||
u16 num_height;
|
||
s16 hcnt;
|
||
s16 mcnt;
|
||
s8 hour;
|
||
s8 min;
|
||
s32 momentum_dy;
|
||
} f_set_time_t;
|
||
|
||
#define SETTIME_SET_NUM_ITEM_CNT ((int)(sizeof(tbl_settime_set_num_item) / sizeof(tbl_settime_set_num_item[0])))
|
||
|
||
#define SETTIME_NUM_PIC_OFFSET_X 32 //各个蓝色框之间的x轴偏移量
|
||
#define SETTIME_NUM_PIC_CENTER_Y 66 //图片中间蓝色框框中心y坐标
|
||
|
||
#define SETTIME_TXT_ITEM_T_X (GUI_SCREEN_CENTER_X-SETTIME_NUM_PIC_OFFSET_X) //左边时间 x中心坐标
|
||
#define SETTIME_TXT_ITEM_H_X GUI_SCREEN_CENTER_X //中间时间 x中心坐标
|
||
#define SETTIME_TXT_ITEM_M_X (GUI_SCREEN_CENTER_X+SETTIME_NUM_PIC_OFFSET_X) //右边时间 x中心坐标
|
||
|
||
#define SETTIME_TXT_ITEM_Y 16 //中间时间 y中心坐标
|
||
#define SETTIME_TXT_ITEM_Y_OFFSET 24 //上下每个 时间的y轴偏移量
|
||
#define TOUCH_HEIGHT SETTIME_TXT_ITEM_Y_OFFSET * 3
|
||
|
||
#define SETTIME_SET_NUM_POS_Y_START SETTIME_TXT_ITEM_Y
|
||
#define SETTIME_SET_NUM_POS_Y(y_start,space,cnt) (y_start)+(space)*(cnt)
|
||
|
||
#define SELECTOR_FRICTION 16 // 摩擦力,用于减少动量
|
||
#define SELECTOR_MOMENTUM_FACTOR 6 // 动量因子,用于控制滑动的敏感度和速度
|
||
|
||
//搞个数字item,创建时遍历一下
|
||
static const settime_set_num_item_t tbl_settime_set_num_item[] = {
|
||
/* num_cnt, num_id, load_num_id val, x, y, visible_en */
|
||
{2, COMPO_ID_NUM_TIME_SET_HOUR_UU, COMPO_ID_NUM_TIME_SET_HOUR_UU, 22, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y, true},
|
||
{2, COMPO_ID_NUM_TIME_SET_HOUR_UP, COMPO_ID_NUM_TIME_SET_HOUR_UP, 23, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET, true},
|
||
{2, COMPO_ID_NUM_TIME_SET_HOUR, COMPO_ID_NUM_TIME_SET_HOUR, 0, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*2, true},
|
||
{2, COMPO_ID_NUM_TIME_SET_HOUR_DOWN, COMPO_ID_NUM_TIME_SET_HOUR_DOWN, 1, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*3, true},
|
||
{2, COMPO_ID_NUM_TIME_SET_HOUR_DD, COMPO_ID_NUM_TIME_SET_HOUR_DD, 2, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*4, true},
|
||
|
||
{2, COMPO_ID_NUM_TIME_SET_MIN_UU, COMPO_ID_NUM_TIME_SET_MIN_UU, 58, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y, true},
|
||
{2, COMPO_ID_NUM_TIME_SET_MIN_UP, COMPO_ID_NUM_TIME_SET_MIN_UP, 59, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET, true},
|
||
{2, COMPO_ID_NUM_TIME_SET_MIN, COMPO_ID_NUM_TIME_SET_MIN, 0, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*2, true},
|
||
{2, COMPO_ID_NUM_TIME_SET_MIN_DOWN, COMPO_ID_NUM_TIME_SET_MIN_DOWN, 1, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*3, true},
|
||
{2, COMPO_ID_NUM_TIME_SET_MIN_DD, COMPO_ID_NUM_TIME_SET_MIN_DD, 2, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*4, true},
|
||
|
||
};
|
||
|
||
//获取 时分 上一个和下一个的数字
|
||
static u8 func_alarm_clock_get_time_cal(s8 num, bool hour_en, u8 mode) //mode 0:返回当前hour/min,1:返回上一个hour/min,2:返回下一个hour/min
|
||
{
|
||
if (num < 0) {
|
||
if (hour_en) {
|
||
num += 24;
|
||
} else {
|
||
num += 60;
|
||
}
|
||
}
|
||
|
||
if (mode == 1) {
|
||
if (hour_en) {
|
||
if (num == 0 || num > 23) {
|
||
return 23;
|
||
}
|
||
} else {
|
||
if (num == 0 || num > 59) {
|
||
return 59;
|
||
}
|
||
}
|
||
return num - 1;
|
||
} else if (mode == 2){
|
||
if (hour_en) {
|
||
if (num >= 23) {
|
||
return 0;
|
||
}
|
||
} else {
|
||
if (num >= 59) {
|
||
return 0;
|
||
}
|
||
}
|
||
return num + 1;
|
||
} else {
|
||
if (hour_en) {
|
||
if (num > 23) {
|
||
return 23;
|
||
}
|
||
} else {
|
||
if (num > 59) {
|
||
return 59;
|
||
}
|
||
}
|
||
return num;
|
||
}
|
||
}
|
||
|
||
//创建时间设置窗体,创建窗体中不要使用功能结构体 func_cb.f_cb
|
||
compo_form_t *func_set_time_form_create(void)
|
||
{
|
||
//新建窗体和背景
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
//设置标题栏
|
||
compo_form_set_mode(frm, COMPO_FORM_MODE_SHOW_TITLE | COMPO_FORM_MODE_SHOW_TIME);
|
||
compo_form_set_title(frm, i18n[STR_SETTING_TIME]);
|
||
|
||
// 图片,蓝色小框框
|
||
compo_picturebox_t *pic_cen = compo_picturebox_create(frm, UI_BUF_SETTING_SETTIME_SELECT_BIN);
|
||
compo_setid(pic_cen, COMPO_ID_PIC_SELECT_HOUR);
|
||
compo_picturebox_set_pos(pic_cen, SETTIME_TXT_ITEM_T_X, SETTIME_NUM_PIC_CENTER_Y);
|
||
|
||
compo_picturebox_t *pic_rig = compo_picturebox_create(frm, UI_BUF_SETTING_SETTIME_DEFAULT_BIN);
|
||
compo_setid(pic_rig, COMPO_ID_PIC_SELECT_MIN);
|
||
compo_picturebox_set_pos(pic_rig, SETTIME_TXT_ITEM_M_X, SETTIME_NUM_PIC_CENTER_Y);
|
||
|
||
//创建数字
|
||
compo_textbox_t *txt_num;
|
||
u8 hour, min;
|
||
hour = SysVariable.Rtc.hour;
|
||
min = SysVariable.Rtc.min;
|
||
char buf[4];
|
||
for (u8 idx = 0; idx < SETTIME_SET_NUM_ITEM_CNT; idx++) {
|
||
txt_num = compo_textbox_create(frm, tbl_settime_set_num_item[idx].num_cnt);
|
||
compo_textbox_set_font(txt_num, UI_BUF_0FONT_FONT_DIN_LIGHT_NUM_15_BIN);
|
||
compo_setid(txt_num, tbl_settime_set_num_item[idx].num_id);
|
||
compo_textbox_set_align_center(txt_num, true);
|
||
compo_textbox_set_pos(txt_num, tbl_settime_set_num_item[idx].x, tbl_settime_set_num_item[idx].y);
|
||
compo_textbox_set_visible(txt_num, tbl_settime_set_num_item[idx].visible_en);
|
||
|
||
memset(buf, 0, sizeof(buf));
|
||
if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UU) { //上上次的时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(hour, 1, 1), 1, 1));
|
||
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UP) { //上次的时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(hour, 1, 1));
|
||
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR) { //当前时间
|
||
snprintf(buf, sizeof(buf), "%02d", hour);
|
||
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DOWN) { //下次时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(hour, 1, 2));
|
||
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DD) { //下下次时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(hour, 1, 2), 1, 2));
|
||
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_UU) {
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(min, 0, 1), 0, 1));
|
||
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_UP) {
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(min, 0, 1));
|
||
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN) {
|
||
snprintf(buf, sizeof(buf), "%02d", min);
|
||
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_DOWN) {
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(min, 0, 2));
|
||
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_DD) {
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(min, 0, 2), 0, 2));
|
||
}
|
||
compo_textbox_set(txt_num, buf);
|
||
}
|
||
|
||
// 上方渐变图层
|
||
s16 offset_y = 5;
|
||
compo_shape_t *shape_up = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(shape_up, COLOR_BLACK);
|
||
compo_shape_set_align_center(shape_up, false);
|
||
compo_shape_set_location(shape_up, 0, offset_y, GUI_SCREEN_WIDTH, 10);
|
||
offset_y += 5;
|
||
for (int i = 0; i < 20; i++) {
|
||
shape_up = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(shape_up, COLOR_BLACK);
|
||
compo_shape_set_align_center(shape_up, false);
|
||
compo_shape_set_location(shape_up, 0, offset_y + (i * 2), GUI_SCREEN_WIDTH, 2);
|
||
compo_shape_set_alpha(shape_up, 255 - (i * 6));
|
||
}
|
||
|
||
// 下方渐变图层
|
||
offset_y = 80;
|
||
for (int i = 0; i < 20; i++) {
|
||
compo_shape_t *shape_down = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(shape_down, COLOR_BLACK);
|
||
compo_shape_set_align_center(shape_down, false);
|
||
compo_shape_set_location(shape_down, 0, offset_y + 2, GUI_SCREEN_WIDTH, 2);
|
||
compo_shape_set_alpha(shape_down, 141 + (i * 6));
|
||
offset_y += 2;
|
||
}
|
||
compo_shape_t *shape_down = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(shape_down, COLOR_BLACK);
|
||
compo_shape_set_align_center(shape_down, false);
|
||
compo_shape_set_location(shape_down, 0, offset_y, GUI_SCREEN_WIDTH, 53);
|
||
|
||
//创建按钮
|
||
compo_button_t *btn;
|
||
btn = compo_button_create_by_image(frm, UI_BUF_COMMON_NO_BIN);
|
||
compo_setid(btn, COMPO_ID_BTN_NO);
|
||
compo_button_set_pos(btn, 1+31, 122+18);
|
||
|
||
btn = compo_button_create_by_image(frm, UI_BUF_ALARM_CLOCK_YES_BIN);
|
||
compo_setid(btn, COMPO_ID_BTN_YES);
|
||
compo_button_set_pos(btn, 65+31, 122+18);
|
||
|
||
/* 两个滑动区域 */
|
||
btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_SETTIME_HOUR);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X - SETTIME_NUM_PIC_OFFSET_X, GUI_SCREEN_CENTER_Y, 40, TOUCH_HEIGHT);
|
||
|
||
btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_SETTIME_MIN);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X + SETTIME_NUM_PIC_OFFSET_X, GUI_SCREEN_CENTER_Y, 40, TOUCH_HEIGHT);
|
||
|
||
return frm;
|
||
}
|
||
|
||
static void alarm_clock_set_num_pos_cal(s32 dy, u8 id, bool press)
|
||
{
|
||
f_set_time_t *f_set_time = (f_set_time_t*)func_cb.f_cb;
|
||
|
||
u16 num_height = f_set_time->num_height;
|
||
|
||
static s32 last_dy = 0;
|
||
s8 dir = 0;
|
||
s32 distance = 0;
|
||
|
||
settime_set_num_item_t *time_item;
|
||
u8 ofs = 0;
|
||
|
||
if (id == COMPO_ID_BTN_SETTIME_HOUR) {
|
||
ofs = 0;
|
||
time_item = &f_set_time->set_num_item[0];
|
||
} else if (id == COMPO_ID_BTN_SETTIME_MIN) {
|
||
ofs = 5;
|
||
time_item = &f_set_time->set_num_item[5];
|
||
}
|
||
|
||
if (press) {
|
||
f_set_time->momentum_dy = (dy - last_dy) * SELECTOR_MOMENTUM_FACTOR; // 使用整数计算来增强动量效应
|
||
distance = dy - last_dy;
|
||
} else {
|
||
distance = f_set_time->momentum_dy;
|
||
if (f_set_time->momentum_dy > 0) {
|
||
f_set_time->momentum_dy -= SELECTOR_FRICTION; // 减少正向动量
|
||
if (f_set_time->momentum_dy < 0) {
|
||
f_set_time->momentum_dy = 0; // 防止动量变为负数
|
||
}
|
||
} else if (f_set_time->momentum_dy < 0) {
|
||
f_set_time->momentum_dy += SELECTOR_FRICTION; // 减少负向动量
|
||
if (f_set_time->momentum_dy > 0) {
|
||
f_set_time->momentum_dy = 0; // 防止动量变为正数
|
||
}
|
||
}
|
||
|
||
if (abs(f_set_time->momentum_dy) < SELECTOR_FRICTION) { // 动量小于摩擦力时,停止滚动
|
||
f_set_time->momentum_dy = 0;
|
||
|
||
dy = 0;
|
||
last_dy = 0;
|
||
distance = 0;
|
||
}
|
||
}
|
||
|
||
time_item[0].y += distance;
|
||
time_item[1].y += distance;
|
||
time_item[2].y += distance;
|
||
time_item[3].y += distance;
|
||
time_item[4].y += distance;
|
||
if (distance || !press) {
|
||
printf("[%d]-->", time_item[2].y);
|
||
}
|
||
|
||
for (int i=0; i<5; i++) {
|
||
if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UP+ofs) {
|
||
if ((time_item[i].y - (SETTIME_NUM_PIC_CENTER_Y - TOUCH_HEIGHT/2)) <= -num_height) {
|
||
dir = -1;
|
||
break;
|
||
} else if (press == false && ((time_item[i].y - (SETTIME_NUM_PIC_CENTER_Y - TOUCH_HEIGHT/2)) <= -num_height/2)) {
|
||
dir = -1;
|
||
break;
|
||
}
|
||
} else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DOWN+ofs) {
|
||
if (time_item[i].y >= (SETTIME_NUM_PIC_CENTER_Y + TOUCH_HEIGHT/2 + num_height)) {
|
||
dir = 1;
|
||
break;
|
||
} else if (press == false && (time_item[i].y >= (SETTIME_NUM_PIC_CENTER_Y + TOUCH_HEIGHT/2 + num_height/2))) {
|
||
dir = 1;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (dir) {
|
||
printf("dir\n");
|
||
for(int i=0; i<5; i++) {
|
||
time_item[i].load_id += dir;
|
||
if (time_item[i].load_id < COMPO_ID_NUM_TIME_SET_HOUR_UU+ofs) {
|
||
time_item[i].load_id = COMPO_ID_NUM_TIME_SET_HOUR_DD+ofs;
|
||
} else if (time_item[i].load_id > COMPO_ID_NUM_TIME_SET_HOUR_DD+ofs) {
|
||
time_item[i].load_id = COMPO_ID_NUM_TIME_SET_HOUR_UU+ofs;
|
||
}
|
||
}
|
||
|
||
if (id == COMPO_ID_BTN_SETTIME_HOUR) {
|
||
f_set_time->hcnt += dir;
|
||
|
||
if (dir && f_set_time->hour == 0) {
|
||
f_set_time->hour = 24;
|
||
}
|
||
f_set_time->hour = (f_set_time->hour - dir) % 24;
|
||
} else if (id == COMPO_ID_BTN_SETTIME_MIN) {
|
||
f_set_time->mcnt += dir;
|
||
|
||
if (dir && f_set_time->min == 0) {
|
||
f_set_time->min = 60;
|
||
}
|
||
f_set_time->min = (f_set_time->min - dir) % 60;
|
||
}
|
||
}
|
||
|
||
if (press == false || dir) {
|
||
for(int i=0; i<5; i++) {
|
||
if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UU+ofs) {
|
||
time_item[i].visible_en = true;
|
||
time_item[i].num_cnt = 2;
|
||
time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR_UU-COMPO_ID_NUM_TIME_SET_HOUR_UU);
|
||
} else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DD+ofs) {
|
||
time_item[i].visible_en = true;
|
||
time_item[i].num_cnt = 2;
|
||
time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR_DD-COMPO_ID_NUM_TIME_SET_HOUR_UU);
|
||
} else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UP+ofs) {
|
||
time_item[i].visible_en = true;
|
||
time_item[i].num_cnt = 2;
|
||
time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR_UP-COMPO_ID_NUM_TIME_SET_HOUR_UU);
|
||
} else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR+ofs) {
|
||
time_item[i].visible_en = true;
|
||
time_item[i].num_cnt = 2;
|
||
time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR-COMPO_ID_NUM_TIME_SET_HOUR_UU);
|
||
} else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DOWN+ofs) {
|
||
time_item[i].visible_en = true;
|
||
time_item[i].num_cnt = 2;
|
||
time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR_DOWN-COMPO_ID_NUM_TIME_SET_HOUR_UU);
|
||
}
|
||
}
|
||
}
|
||
|
||
for (int i=0; i<5; i++) {
|
||
compo_textbox_t *txt_num = compo_getobj_byid(time_item[i].num_id);
|
||
compo_textbox_set_align_center(txt_num, true);
|
||
compo_textbox_set_pos(txt_num, time_item[i].x, time_item[i].y);
|
||
compo_textbox_set_visible(txt_num, time_item[i].visible_en);
|
||
}
|
||
if (distance || !press) {
|
||
printf("[%d]\n", time_item[2].y);
|
||
}
|
||
|
||
last_dy = dy;
|
||
|
||
}
|
||
|
||
static void func_alarm_clock_set_move_handle(u8 id)
|
||
{
|
||
f_set_time_t *f_set_time = (f_set_time_t*)func_cb.f_cb;
|
||
settime_set_num_item_t *time_item;
|
||
bool flag_press = 0;
|
||
u32 tick = tick_get();
|
||
s32 dx = 0, dy = 0; //坐标差量
|
||
char buf[4];
|
||
|
||
if (id == COMPO_ID_BTN_SETTIME_HOUR) {
|
||
time_item = &f_set_time->set_num_item[0];
|
||
} else if (id == COMPO_ID_BTN_SETTIME_MIN) {
|
||
time_item = &f_set_time->set_num_item[5];
|
||
}
|
||
|
||
|
||
for (;;) {
|
||
flag_press = ctp_get_dxy(&dx, &dy);
|
||
//printf("x:%d, y:%d\n",dx, dy);
|
||
|
||
alarm_clock_set_num_pos_cal(dy, id, flag_press);
|
||
|
||
if (!flag_press && f_set_time->momentum_dy) {
|
||
while (!tick_check_expire(tick, 15))
|
||
;
|
||
}
|
||
|
||
/* 15ms刷新一下数字框 */
|
||
if (tick_check_expire(tick, 15)) {
|
||
tick = tick_get();
|
||
if (id == COMPO_ID_BTN_SETTIME_HOUR) {
|
||
for (int idx = 0; idx < 5; idx++) {
|
||
memset(buf, 0, sizeof(buf));
|
||
compo_textbox_t *txt_num = compo_getobj_byid(time_item[idx].num_id);
|
||
if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UU) { //上上次的时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(f_set_time->hour, 1, 1), 1, 1));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UP) { //上次的时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->hour, 1, 1));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR) { //当前时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->hour, 1, 0));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DOWN) { //下次时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->hour, 1, 2));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DD) { //下下次时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(f_set_time->hour, 1, 2), 1, 2));
|
||
}
|
||
compo_textbox_set(txt_num, buf);
|
||
}
|
||
} else if (id == COMPO_ID_BTN_SETTIME_MIN){
|
||
for (int idx = 0; idx < 5; idx++) {
|
||
memset(buf, 0, sizeof(buf));
|
||
compo_textbox_t *txt_num = compo_getobj_byid(time_item[idx].num_id);
|
||
if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_UU) { //上上次的时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(f_set_time->min, 0, 1), 0, 1));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_UP) { //上次的时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->min, 0, 1));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN) { //当前时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->min, 0, 0));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_DOWN) { //下次时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->min, 0, 2));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_DD) { //下下次时间
|
||
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(f_set_time->min, 0, 2), 0, 2));
|
||
}
|
||
compo_textbox_set(txt_num, buf);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!flag_press && f_set_time->momentum_dy == 0) {
|
||
f_set_time->hcnt = 0;
|
||
f_set_time->mcnt = 0;
|
||
break;
|
||
}
|
||
evt_message(msg_dequeue());
|
||
func_process();
|
||
}
|
||
|
||
}
|
||
|
||
//触摸按钮效果处理
|
||
static void func_set_time_button_touch_handle(void)
|
||
{
|
||
int id = compo_get_button_id();
|
||
compo_picturebox_t *select_min_pic = compo_getobj_byid(COMPO_ID_PIC_SELECT_MIN);
|
||
compo_picturebox_t *select_hour_pic = compo_getobj_byid(COMPO_ID_PIC_SELECT_HOUR);
|
||
|
||
switch (id) {
|
||
// case COMPO_ID_BTN_YES:
|
||
// case COMPO_ID_BTN_NO:
|
||
// compo_picturebox_set_visible(pic_click, true);
|
||
// break;
|
||
|
||
case COMPO_ID_BTN_SETTIME_HOUR:
|
||
case COMPO_ID_BTN_SETTIME_MIN:
|
||
/* 更新选择状态 */
|
||
compo_picturebox_set(select_min_pic, id == COMPO_ID_BTN_SETTIME_MIN ? UI_BUF_SETTING_SETTIME_SELECT_BIN : UI_BUF_SETTING_SETTIME_DEFAULT_BIN);
|
||
compo_picturebox_set(select_hour_pic, id == COMPO_ID_BTN_SETTIME_HOUR ? UI_BUF_SETTING_SETTIME_SELECT_BIN : UI_BUF_SETTING_SETTIME_DEFAULT_BIN);
|
||
|
||
func_alarm_clock_set_move_handle(id);
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
//释放按钮效果处理
|
||
static void func_set_time_button_release_handle(void)
|
||
{
|
||
// compo_picturebox_t *pic_click = compo_getobj_byid(COMPO_ID_PIC_CONTINUE_CLICK);
|
||
// compo_picturebox_set_visible(pic_click, false);
|
||
}
|
||
|
||
//单击按钮
|
||
static void func_set_time_button_click(void)
|
||
{
|
||
f_set_time_t *f_set_time = (f_set_time_t*)func_cb.f_cb;
|
||
int id = compo_get_button_id();
|
||
tm_t tm;
|
||
tm = rtc_clock_get();
|
||
|
||
switch (id) {
|
||
case COMPO_ID_BTN_YES:
|
||
tm.hour =f_set_time->hour;
|
||
tm.min = f_set_time->min;
|
||
SysVariable.Rtc.hour = f_set_time->hour;
|
||
SysVariable.Rtc.min = f_set_time->min;
|
||
rtc_clock_set(tm);
|
||
func_switch_to_assign_screen(FUNC_SET_SUB_TIME, true);
|
||
break;
|
||
case COMPO_ID_BTN_NO:
|
||
func_switch_to_assign_screen(FUNC_SET_SUB_TIME, true);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
func_set_time_button_release_handle();
|
||
}
|
||
|
||
//时间设置功能事件处理
|
||
static void func_set_time_process(void)
|
||
{
|
||
func_process();
|
||
}
|
||
|
||
//时间设置功能消息处理
|
||
static void func_set_time_message(size_msg_t msg)
|
||
{
|
||
|
||
switch (msg) {
|
||
case MSG_CTP_TOUCH:
|
||
func_set_time_button_touch_handle();
|
||
break;
|
||
|
||
case MSG_CTP_CLICK:
|
||
func_set_time_button_click();
|
||
break;
|
||
|
||
case MSG_CTP_SHORT_UP:
|
||
case MSG_CTP_SHORT_DOWN:
|
||
case MSG_CTP_SHORT_LEFT:
|
||
case MSG_CTP_LONG:
|
||
func_set_time_button_release_handle();
|
||
break;
|
||
|
||
case MSG_CTP_SHORT_RIGHT:
|
||
func_set_time_button_release_handle();
|
||
func_message(msg);
|
||
break;
|
||
|
||
case MSG_QDEC_BACKWARD:
|
||
case MSG_QDEC_FORWARD:
|
||
break;
|
||
|
||
default:
|
||
func_message(msg);
|
||
break;
|
||
}
|
||
}
|
||
|
||
//进入时间设置功能
|
||
static void func_set_time_enter(void)
|
||
{
|
||
func_cb.f_cb = func_zalloc(sizeof(f_set_time_t));
|
||
func_cb.frm_main = func_set_time_form_create();
|
||
|
||
f_set_time_t *f_set_time = (f_set_time_t*) func_cb.f_cb;
|
||
memcpy(f_set_time->set_num_item, tbl_settime_set_num_item, sizeof(tbl_settime_set_num_item));
|
||
// f_set_time->size = gui_image_get_size(UI_BUF_ALARM_CLOCK_NUM_BIN);
|
||
f_set_time->num_height = widget_text_get_height();
|
||
|
||
f_set_time->hour = SysVariable.Rtc.hour;
|
||
f_set_time->min = SysVariable.Rtc.min;
|
||
func_cb.enter_tick = tick_get();
|
||
}
|
||
|
||
//退出时间设置功能
|
||
static void func_set_time_exit(void)
|
||
{
|
||
printf("%s\n",__func__);
|
||
func_cb.last = FUNC_SET_TIME;
|
||
|
||
compo_form_destroy(func_cb.frm_main);
|
||
func_free(func_cb.f_cb);
|
||
func_cb.frm_main = NULL;
|
||
func_cb.f_cb = NULL;
|
||
}
|
||
|
||
//时间设置功能
|
||
void func_set_time(void)
|
||
{
|
||
printf("%s\n", __func__);
|
||
func_set_time_enter();
|
||
while (func_cb.sta == FUNC_SET_TIME) {
|
||
func_set_time_process();
|
||
func_set_time_message(msg_dequeue());
|
||
}
|
||
func_set_time_exit();
|
||
}
|