644 lines
27 KiB
C
644 lines
27 KiB
C
#include "include.h"
|
||
#include "func.h"
|
||
#include "app_variable.h"
|
||
#include "m_remind.h"
|
||
#if TRACE_EN
|
||
#define TRACE(...) printf(__VA_ARGS__)
|
||
#else
|
||
#define TRACE(...)
|
||
#endif
|
||
|
||
//组件ID
|
||
enum {
|
||
//按键
|
||
COMPO_ID_BTN_CONTINUE = 1,
|
||
COMPO_ID_BTN_ACLOCK_HOUR,
|
||
COMPO_ID_BTN_ACLOCK_MIN,
|
||
COMPO_ID_BTN_YES_CLICK,
|
||
COMPO_ID_BTN_NO_CLICK,
|
||
|
||
//图像
|
||
COMPO_ID_PIC_SELECT_HOUR,
|
||
COMPO_ID_PIC_SELECT_MIN,
|
||
|
||
//数字
|
||
COMPO_ID_NUM_ACLOCK_SET_HOUR_UU,
|
||
COMPO_ID_NUM_ACLOCK_SET_HOUR_UP,
|
||
COMPO_ID_NUM_ACLOCK_SET_HOUR,
|
||
COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN,
|
||
COMPO_ID_NUM_ACLOCK_SET_HOUR_DD,
|
||
|
||
COMPO_ID_NUM_ACLOCK_SET_MIN_UU,
|
||
COMPO_ID_NUM_ACLOCK_SET_MIN_UP,
|
||
COMPO_ID_NUM_ACLOCK_SET_MIN,
|
||
COMPO_ID_NUM_ACLOCK_SET_MIN_DOWN,
|
||
COMPO_ID_NUM_ACLOCK_SET_MIN_DD,
|
||
};
|
||
|
||
typedef struct disturd_set_num_item_t_ {
|
||
u32 res_addr;
|
||
int num_cnt;
|
||
u16 num_id;
|
||
s16 load_id;
|
||
int val;
|
||
s16 x;
|
||
s16 y;
|
||
bool visible_en;
|
||
} disturd_set_num_item_t;
|
||
|
||
typedef struct f_disturd_sub_set_t_ {
|
||
disturd_set_num_item_t set_num_item[11];
|
||
area_t size;
|
||
u16 num_height;
|
||
s16 hcnt;
|
||
s16 mcnt;
|
||
u32 start_num;
|
||
u32 end_num;
|
||
s32 momentum_dy;
|
||
} f_disturd_sub_set_t;
|
||
|
||
#define DISTURD_SET_NUM_ITEM_CNT ((int)(sizeof(tbl_disturd_set_num_item) / sizeof(tbl_disturd_set_num_item[0])))
|
||
|
||
#define ALARM_NUM_PIC_OFFSET_X 57 //时间框的中心坐标
|
||
#define ALARM_NUM_PIC_CENTER_Y 126
|
||
#define ALARM_TXT_ITEM_H_X 64
|
||
#define ALARM_TXT_ITEM_M_X 178
|
||
|
||
#define ALARM_TXT_ITEM_Y 36
|
||
#define ALARM_TXT_ITEM_Y_OFFSET 45
|
||
#define TOUCH_HEIGHT ALARM_TXT_ITEM_Y_OFFSET * 3
|
||
|
||
#define ALARM_CLOCK_SET_NUM_POS_Y_START ALARM_TXT_ITEM_Y
|
||
#define ALARM_CLOCK_SET_NUM_POS_Y(y_start,space,cnt) (y_start)+(space)*(cnt)
|
||
|
||
#define SELECTOR_FRICTION 16 // 摩擦力,用于减少动量
|
||
#define SELECTOR_MOMENTUM_FACTOR 6 // 动量因子,用于控制滑动的敏感度和速度
|
||
|
||
//搞个数字item,创建时遍历一下
|
||
static const disturd_set_num_item_t tbl_disturd_set_num_item[] = {
|
||
/* res_addr, num_cnt, num_id, load_num_id val, x, y, visible_en */
|
||
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_HOUR_UU, COMPO_ID_NUM_ACLOCK_SET_HOUR_UU, 22, ALARM_TXT_ITEM_H_X, ALARM_TXT_ITEM_Y, true},
|
||
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_HOUR_UP, COMPO_ID_NUM_ACLOCK_SET_HOUR_UP, 23, ALARM_TXT_ITEM_H_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET, true},
|
||
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_HOUR, COMPO_ID_NUM_ACLOCK_SET_HOUR, 0, ALARM_TXT_ITEM_H_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET*2, true},
|
||
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN, COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN, 1, ALARM_TXT_ITEM_H_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET*3, true},
|
||
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_HOUR_DD, COMPO_ID_NUM_ACLOCK_SET_HOUR_DD, 2, ALARM_TXT_ITEM_H_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET*4, true},
|
||
|
||
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_MIN_UU, COMPO_ID_NUM_ACLOCK_SET_MIN_UU, 58, ALARM_TXT_ITEM_M_X, ALARM_TXT_ITEM_Y, true},
|
||
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_MIN_UP, COMPO_ID_NUM_ACLOCK_SET_MIN_UP, 59, ALARM_TXT_ITEM_M_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET, true},
|
||
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_MIN, COMPO_ID_NUM_ACLOCK_SET_MIN, 0, ALARM_TXT_ITEM_M_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET*2, true},
|
||
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_MIN_DOWN, COMPO_ID_NUM_ACLOCK_SET_MIN_DOWN, 1, ALARM_TXT_ITEM_M_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET*3, true},
|
||
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_MIN_DD, COMPO_ID_NUM_ACLOCK_SET_MIN_DD, 2, ALARM_TXT_ITEM_M_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET*4, true},
|
||
|
||
};
|
||
|
||
//获取 时分 上一个和下一个的数字
|
||
static u8 func_disturd_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;
|
||
}
|
||
}
|
||
|
||
//创建定时勿扰设置窗体
|
||
compo_form_t *func_disturd_sub_set_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);
|
||
if(SysVariable.disturd_sel) {
|
||
compo_form_set_title(frm, i18n[STR_DISTURD_TIM_END]);
|
||
} else {
|
||
compo_form_set_title(frm, i18n[STR_DISTURD_TIM_START]);
|
||
}
|
||
|
||
//图片,三个蓝色小框框
|
||
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, GUI_SCREEN_CENTER_X - ALARM_NUM_PIC_OFFSET_X, ALARM_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, GUI_SCREEN_CENTER_X + ALARM_NUM_PIC_OFFSET_X, ALARM_NUM_PIC_CENTER_Y);
|
||
|
||
//创建数字
|
||
compo_textbox_t *num;
|
||
char str_buff[4];
|
||
u8 hour, min;
|
||
if(SysVariable.disturd_sel) {
|
||
if (func_cb.last == FUNC_ALARM_CLOCK_SUB_EDIT) {
|
||
hour = SysVariable.disturd_end_time_sec / 3600;
|
||
min = (SysVariable.disturd_end_time_sec % 3600) / 60;
|
||
} else {
|
||
hour = SysVariable.disturd_end_time_sec / 3600;
|
||
min = (SysVariable.disturd_end_time_sec % 3600) / 60;
|
||
}
|
||
} else {
|
||
if (func_cb.last == FUNC_ALARM_CLOCK_SUB_EDIT) {
|
||
hour = SysVariable.disturd_start_time_sec / 3600;
|
||
min = (SysVariable.disturd_start_time_sec % 3600) / 60;
|
||
} else {
|
||
hour = SysVariable.disturd_start_time_sec / 3600;
|
||
min = (SysVariable.disturd_start_time_sec % 3600) / 60;
|
||
}
|
||
}
|
||
for (u8 idx = 0; idx < DISTURD_SET_NUM_ITEM_CNT; idx++) {
|
||
num = compo_textbox_create(frm, tbl_disturd_set_num_item[idx].num_cnt);
|
||
compo_textbox_set_font(num, tbl_disturd_set_num_item[idx].res_addr);
|
||
compo_setid(num, tbl_disturd_set_num_item[idx].num_id);
|
||
compo_textbox_set_pos(num, tbl_disturd_set_num_item[idx].x, tbl_disturd_set_num_item[idx].y);
|
||
compo_textbox_set_visible(num, tbl_disturd_set_num_item[idx].visible_en);
|
||
|
||
if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UU) { //上上次的时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(hour, 1, 1), 1, 1));
|
||
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UP) { //上次的时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(hour, 1, 1));
|
||
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR) { //当前时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", hour);
|
||
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN) { //下次时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(hour, 1, 2));
|
||
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DD) { //下下次时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(hour, 1, 2), 1, 2));
|
||
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_UU) {
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(min, 0, 1), 0, 1));
|
||
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_UP) {
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(min, 0, 1));
|
||
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN) {
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", min);
|
||
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_DOWN) {
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(min, 0, 2));
|
||
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_DD) {
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(min, 0, 2), 0, 2));
|
||
}
|
||
compo_textbox_set(num, str_buff);
|
||
}
|
||
|
||
// 上方渐变图层
|
||
s16 offset_y = 30;
|
||
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, 31);
|
||
offset_y += 31;
|
||
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 = 153;
|
||
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, 100);
|
||
|
||
/* 两个滑动区域 */
|
||
compo_button_t *btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_ACLOCK_HOUR);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X - ALARM_NUM_PIC_OFFSET_X, GUI_SCREEN_CENTER_Y, 100, 200);
|
||
|
||
btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_ACLOCK_MIN);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X + ALARM_NUM_PIC_OFFSET_X, GUI_SCREEN_CENTER_Y, 100, 200);
|
||
|
||
// 新建按钮
|
||
btn = compo_button_create_by_image(frm, UI_BUF_COMMON_NO_BIN);
|
||
compo_setid(btn, COMPO_ID_BTN_NO_CLICK);
|
||
compo_button_set_pos(btn, 59, 263);
|
||
|
||
btn = compo_button_create_by_image(frm, UI_BUF_ALARM_CLOCK_YES_BIN);
|
||
compo_setid(btn, COMPO_ID_BTN_YES_CLICK);
|
||
compo_button_set_pos(btn, 181, 263);
|
||
|
||
return frm;
|
||
}
|
||
|
||
static void disturd_set_num_pos_cal(s32 dy, u8 id, bool press)
|
||
{
|
||
f_disturd_sub_set_t *f_alarm_set = (f_disturd_sub_set_t*)func_cb.f_cb;
|
||
|
||
u16 num_height = f_alarm_set->num_height;
|
||
|
||
static s32 last_dy = 0;
|
||
s8 dir = 0;
|
||
s32 distance = 0;
|
||
|
||
disturd_set_num_item_t *time_item;
|
||
u8 ofs = 0;
|
||
|
||
if (id == COMPO_ID_BTN_ACLOCK_HOUR) {
|
||
ofs = 0;
|
||
time_item = &f_alarm_set->set_num_item[0];
|
||
} else if (id == COMPO_ID_BTN_ACLOCK_MIN) {
|
||
ofs = 5;
|
||
time_item = &f_alarm_set->set_num_item[5];
|
||
}
|
||
|
||
if (press) {
|
||
f_alarm_set->momentum_dy = (dy - last_dy) * SELECTOR_MOMENTUM_FACTOR; // 使用整数计算来增强动量效应
|
||
distance = dy - last_dy;
|
||
} else {
|
||
distance = f_alarm_set->momentum_dy;
|
||
if (f_alarm_set->momentum_dy > 0) {
|
||
f_alarm_set->momentum_dy -= SELECTOR_FRICTION; // 减少正向动量
|
||
if (f_alarm_set->momentum_dy < 0) {
|
||
f_alarm_set->momentum_dy = 0; // 防止动量变为负数
|
||
}
|
||
} else if (f_alarm_set->momentum_dy < 0) {
|
||
f_alarm_set->momentum_dy += SELECTOR_FRICTION; // 减少负向动量
|
||
if (f_alarm_set->momentum_dy > 0) {
|
||
f_alarm_set->momentum_dy = 0; // 防止动量变为正数
|
||
}
|
||
}
|
||
|
||
if (abs(f_alarm_set->momentum_dy) < SELECTOR_FRICTION) { // 动量小于摩擦力时,停止滚动
|
||
f_alarm_set->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;
|
||
|
||
for (int i=0; i<5; i++) {
|
||
if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UP+ofs) {
|
||
if ((time_item[i].y - (ALARM_NUM_PIC_CENTER_Y - TOUCH_HEIGHT/2)) <= -num_height) {
|
||
dir = -1;
|
||
break;
|
||
} else if (press == false && ((time_item[i].y - (ALARM_NUM_PIC_CENTER_Y - TOUCH_HEIGHT/2)) <= -num_height/2)) {
|
||
dir = -1;
|
||
break;
|
||
}
|
||
} else if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN+ofs) {
|
||
if (time_item[i].y >= (ALARM_NUM_PIC_CENTER_Y + TOUCH_HEIGHT/2 + num_height)) {
|
||
dir = 1;
|
||
break;
|
||
} else if (press == false && (time_item[i].y >= (ALARM_NUM_PIC_CENTER_Y + TOUCH_HEIGHT/2 + num_height/2))) {
|
||
dir = 1;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (dir) {
|
||
for(int i=0; i<5; i++) {
|
||
time_item[i].load_id += dir;
|
||
if (time_item[i].load_id < COMPO_ID_NUM_ACLOCK_SET_HOUR_UU+ofs) {
|
||
time_item[i].load_id = COMPO_ID_NUM_ACLOCK_SET_HOUR_DD+ofs;
|
||
} else if (time_item[i].load_id > COMPO_ID_NUM_ACLOCK_SET_HOUR_DD+ofs) {
|
||
time_item[i].load_id = COMPO_ID_NUM_ACLOCK_SET_HOUR_UU+ofs;
|
||
}
|
||
}
|
||
|
||
if (id == COMPO_ID_BTN_ACLOCK_HOUR) {
|
||
f_alarm_set->hcnt += dir;
|
||
} else if (id == COMPO_ID_BTN_ACLOCK_MIN) {
|
||
f_alarm_set->mcnt += dir;
|
||
}
|
||
}
|
||
|
||
if (press == false || dir) {
|
||
for(int i=0; i<5; i++) {
|
||
if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UU+ofs) {
|
||
time_item[i].visible_en = true;
|
||
time_item[i].num_cnt = 2;
|
||
time_item[i].y = ALARM_CLOCK_SET_NUM_POS_Y(ALARM_CLOCK_SET_NUM_POS_Y_START,ALARM_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_ACLOCK_SET_HOUR_UU-COMPO_ID_NUM_ACLOCK_SET_HOUR_UU);
|
||
} else if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DD+ofs) {
|
||
time_item[i].visible_en = true;
|
||
time_item[i].num_cnt = 2;
|
||
time_item[i].y = ALARM_CLOCK_SET_NUM_POS_Y(ALARM_CLOCK_SET_NUM_POS_Y_START,ALARM_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_ACLOCK_SET_HOUR_DD-COMPO_ID_NUM_ACLOCK_SET_HOUR_UU);
|
||
} else if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UP+ofs) {
|
||
time_item[i].visible_en = true;
|
||
time_item[i].num_cnt = 2;
|
||
time_item[i].y = ALARM_CLOCK_SET_NUM_POS_Y(ALARM_CLOCK_SET_NUM_POS_Y_START,ALARM_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_ACLOCK_SET_HOUR_UP-COMPO_ID_NUM_ACLOCK_SET_HOUR_UU);
|
||
} else if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR+ofs) {
|
||
time_item[i].visible_en = true;
|
||
time_item[i].num_cnt = 2;
|
||
time_item[i].y = ALARM_CLOCK_SET_NUM_POS_Y(ALARM_CLOCK_SET_NUM_POS_Y_START,ALARM_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_ACLOCK_SET_HOUR-COMPO_ID_NUM_ACLOCK_SET_HOUR_UU);
|
||
} else if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN+ofs) {
|
||
time_item[i].visible_en = true;
|
||
time_item[i].num_cnt = 2;
|
||
time_item[i].y = ALARM_CLOCK_SET_NUM_POS_Y(ALARM_CLOCK_SET_NUM_POS_Y_START,ALARM_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN-COMPO_ID_NUM_ACLOCK_SET_HOUR_UU);
|
||
}
|
||
}
|
||
}
|
||
|
||
for (int i=0; i<5; i++) {
|
||
compo_textbox_t *num = compo_getobj_byid(time_item[i].num_id);
|
||
compo_textbox_set_pos(num, time_item[i].x, time_item[i].y);
|
||
compo_textbox_set_visible(num, time_item[i].visible_en);
|
||
}
|
||
|
||
last_dy = dy;
|
||
}
|
||
|
||
static void func_disturd_set_move_handle(u8 id)
|
||
{
|
||
f_disturd_sub_set_t *f_alarm_set = (f_disturd_sub_set_t*)func_cb.f_cb;
|
||
disturd_set_num_item_t *time_item;
|
||
bool flag_press = 0;
|
||
u32 tick = tick_get();
|
||
s32 dx = 0, dy = 0; //坐标差量
|
||
char str_buff[4];
|
||
|
||
if (id == COMPO_ID_BTN_ACLOCK_HOUR) {
|
||
time_item = &f_alarm_set->set_num_item[0];
|
||
} else if (id == COMPO_ID_BTN_ACLOCK_MIN) {
|
||
time_item = &f_alarm_set->set_num_item[5];
|
||
}
|
||
|
||
u8 hour, min;
|
||
|
||
if(SysVariable.disturd_sel) {
|
||
if (func_cb.last == FUNC_ALARM_CLOCK_SUB_EDIT) {
|
||
hour = f_alarm_set->end_num / 3600;
|
||
min = (f_alarm_set->end_num % 3600) / 60;
|
||
} else {
|
||
hour = f_alarm_set->end_num / 3600;
|
||
min = (f_alarm_set->end_num % 3600) / 60;
|
||
}
|
||
} else {
|
||
if (func_cb.last == FUNC_ALARM_CLOCK_SUB_EDIT) {
|
||
hour = f_alarm_set->start_num / 3600;
|
||
min = (f_alarm_set->start_num % 3600) / 60;
|
||
} else {
|
||
hour = f_alarm_set->start_num / 3600;
|
||
min = (f_alarm_set->start_num % 3600) / 60;
|
||
}
|
||
}
|
||
|
||
s8 hour_disp = hour, min_disp = min;
|
||
for (;;) {
|
||
flag_press = ctp_get_dxy(&dx, &dy);
|
||
//printf("x:%d, y:%d\n",dx, dy);
|
||
|
||
disturd_set_num_pos_cal(dy, id, flag_press);
|
||
|
||
if (!flag_press && f_alarm_set->momentum_dy) {
|
||
while (!tick_check_expire(tick, 15))
|
||
;
|
||
}
|
||
|
||
hour_disp = (hour - f_alarm_set->hcnt) % 24;
|
||
min_disp = (min - f_alarm_set->mcnt) % 60;
|
||
|
||
/* 15ms刷新一下数字框 */
|
||
if (tick_check_expire(tick, 15)) {
|
||
tick = tick_get();
|
||
if (id == COMPO_ID_BTN_ACLOCK_HOUR) {
|
||
for (int idx = 0; idx < 5; idx++) {
|
||
compo_textbox_t *num = compo_getobj_byid(time_item[idx].num_id);
|
||
if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UU) { //上上次的时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(hour_disp, 1, 1), 1, 1));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UP) { //上次的时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(hour_disp, 1, 1));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR) { //当前时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(hour_disp, 1, 0));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN) { //下次时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(hour_disp, 1, 2));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DD) { //下下次时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(hour_disp, 1, 2), 1, 2));
|
||
}
|
||
compo_textbox_set(num, str_buff);
|
||
}
|
||
} else if (id == COMPO_ID_BTN_ACLOCK_MIN){
|
||
for (int idx = 0; idx < 5; idx++) {
|
||
compo_textbox_t *num = compo_getobj_byid(time_item[idx].num_id);
|
||
if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_UU) { //上上次的时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(min_disp, 0, 1), 0, 1));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_UP) { //上次的时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(min_disp, 0, 1));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN) { //当前时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(min_disp, 0, 0));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_DOWN) { //下次时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(min_disp, 0, 2));
|
||
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_DD) { //下下次时间
|
||
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(min_disp, 0, 2), 0, 2));
|
||
}
|
||
compo_textbox_set(num, str_buff);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!flag_press && f_alarm_set->momentum_dy == 0) {
|
||
f_alarm_set->hcnt = 0;
|
||
f_alarm_set->mcnt = 0;
|
||
hour = func_disturd_get_time_cal(hour_disp, 1, 0);
|
||
min = func_disturd_get_time_cal(min_disp, 0, 0);
|
||
if (SysVariable.disturd_sel) {
|
||
// SysVariable.disturd_end_time_sec = hour * 3600 + min * 60;
|
||
f_alarm_set->end_num = hour * 3600 + min * 60;
|
||
} else {
|
||
// SysVariable.disturd_start_time_sec = hour * 3600 + min * 60;
|
||
f_alarm_set->start_num = hour * 3600 + min * 60;
|
||
|
||
}
|
||
// printf("total_sec:%d, hour:%d, min:%d\n",SysVariable.disturd_start_time_sec, hour, min);
|
||
break;
|
||
}
|
||
evt_message(msg_dequeue());
|
||
func_process();
|
||
}
|
||
|
||
}
|
||
|
||
//触摸按钮效果处理
|
||
static void func_disturd_sub_set_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_ACLOCK_HOUR:
|
||
case COMPO_ID_BTN_ACLOCK_MIN:
|
||
/* 更新选择状态 */
|
||
compo_picturebox_set(select_min_pic, id == COMPO_ID_BTN_ACLOCK_MIN ? UI_BUF_SETTING_SETTIME_SELECT_BIN : UI_BUF_SETTING_SETTIME_DEFAULT_BIN);
|
||
compo_picturebox_set(select_hour_pic, id == COMPO_ID_BTN_ACLOCK_HOUR ? UI_BUF_SETTING_SETTIME_SELECT_BIN : UI_BUF_SETTING_SETTIME_DEFAULT_BIN);
|
||
|
||
func_disturd_set_move_handle(id);
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//释放按钮效果处理
|
||
static void func_disturd_sub_set_button_release_handle(void)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//单击按钮
|
||
static void func_disturd_sub_set_button_click(void)
|
||
{
|
||
int id = compo_get_button_id();
|
||
f_disturd_sub_set_t *f_alarm_set = (f_disturd_sub_set_t*) func_cb.f_cb;
|
||
|
||
switch (id) {
|
||
case COMPO_ID_BTN_YES_CLICK:
|
||
func_switch_to_assign_screen(FUNC_SET_SUB_DISTURD, false);
|
||
if (SysVariable.disturd_sel) {
|
||
SysVariable.disturd_end_time_sec = f_alarm_set->end_num;
|
||
} else {
|
||
SysVariable.disturd_start_time_sec = f_alarm_set->start_num;
|
||
}
|
||
task_stack_pop();
|
||
|
||
break;
|
||
|
||
case COMPO_ID_BTN_NO_CLICK:
|
||
func_switch_to_assign_screen(FUNC_SET_SUB_DISTURD, true);
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
judge_disturd();
|
||
func_disturd_sub_set_button_release_handle();
|
||
}
|
||
|
||
//定时勿扰设置功能事件处理
|
||
static void func_disturd_sub_set_process(void)
|
||
{
|
||
func_process();
|
||
}
|
||
|
||
//定时勿扰设置功能消息处理
|
||
static void func_disturd_sub_set_message(size_msg_t msg)
|
||
{
|
||
switch (msg) {
|
||
case MSG_CTP_TOUCH:
|
||
func_disturd_sub_set_button_touch_handle();
|
||
break;
|
||
|
||
case MSG_CTP_CLICK:
|
||
func_disturd_sub_set_button_click();
|
||
break;
|
||
|
||
case MSG_CTP_SHORT_UP:
|
||
case MSG_CTP_SHORT_DOWN:
|
||
case MSG_CTP_SHORT_LEFT:
|
||
case MSG_CTP_LONG:
|
||
func_disturd_sub_set_button_release_handle();
|
||
break;
|
||
|
||
case MSG_CTP_SHORT_RIGHT:
|
||
break;
|
||
|
||
case MSG_QDEC_BACKWARD:
|
||
case MSG_QDEC_FORWARD:
|
||
break;
|
||
|
||
default:
|
||
func_message(msg);
|
||
break;
|
||
}
|
||
}
|
||
|
||
//进入定时勿扰设置功能
|
||
static void func_disturd_sub_set_enter(void)
|
||
{
|
||
func_cb.f_cb = func_zalloc(sizeof(f_disturd_sub_set_t));
|
||
|
||
f_disturd_sub_set_t *f_alarm_set = (f_disturd_sub_set_t *)func_cb.f_cb;
|
||
memcpy(f_alarm_set->set_num_item, tbl_disturd_set_num_item, sizeof(tbl_disturd_set_num_item));
|
||
|
||
func_cb.frm_main = func_disturd_sub_set_form_create();
|
||
|
||
/* 初始化时间数据 */
|
||
if (SysVariable.disturd_sel) {
|
||
f_alarm_set->end_num = SysVariable.disturd_end_time_sec;
|
||
} else {
|
||
f_alarm_set->start_num = SysVariable.disturd_start_time_sec;
|
||
}
|
||
|
||
// f_alarm_set->size = gui_image_get_size(UI_BUF_ALARM_CLOCK_NUM_BIN);
|
||
f_alarm_set->num_height = widget_text_get_height();
|
||
|
||
func_cb.enter_tick = tick_get();
|
||
}
|
||
|
||
//退出定时勿扰设置功能
|
||
static void func_disturd_sub_set_exit(void)
|
||
{
|
||
printf("%s\n",__func__);
|
||
func_cb.last = FUNC_DISTURD_SUB_SET;
|
||
|
||
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_disturd_sub_set(void)
|
||
{
|
||
printf("%s\n", __func__);
|
||
func_disturd_sub_set_enter();
|
||
while (func_cb.sta == FUNC_DISTURD_SUB_SET) {
|
||
func_disturd_sub_set_process();
|
||
func_disturd_sub_set_message(msg_dequeue());
|
||
}
|
||
func_disturd_sub_set_exit();
|
||
}
|