feat(ui): extend set_clock_app to edit day/month/year, not just time
time_edit_field now cycles through 5 fields (hour/min/day/month/year) via long-press CONFIRM. Up/down adjusts whichever field is focused, with day clamped to Days_In_Month() when month/year changes, and Clock_RecalcWeekday() called after every date edit so the weekday label stays in sync. UI_UpdateSetTimeDigit() now also refreshes the weekday abbreviation when editing day/month/year, since the computed weekday can change independently of which digit was actually touched. Save writes the full date+weekday via PCF8563_WriteDateTime(). Also removes PCF8563_ReadTime()/WriteTime(), now unused since every caller was updated to the DateTime variants directly.
This commit is contained in:
9
App/ui.c
9
App/ui.c
@@ -480,13 +480,14 @@ void UI_ShowSetTimePage(u8 hour, u8 min, u8 day, u8 month, u8 year, u8 weekday,
|
||||
|
||||
/**
|
||||
* @brief 局部刷新时间设置界面里"正在调节的那一个"字段 (小时/分钟/日/月/年)
|
||||
* @param weekday 根据当前日期算出的星期 (0=周日, ..., 6=周六),调节日/月/年时顺带刷新星期缩写
|
||||
* @param selection 1:小时, 2:分钟, 3:日, 4:月, 5:年
|
||||
* @param blink_on 1:显示数值, 0:消隐(涂黑),用于 500ms 周期闪烁效果
|
||||
* @details 小时/分钟用 32x32px 大字体区域;日/月/年用日期栏里对应的 16x16px 小字体区域,
|
||||
* 都只重画自己那一小块,不触碰锁头/电池/冒号/AM-PM/星期文字等其它内容,
|
||||
* 避免每次闪烁或调值都整屏 LCD_Clear() 造成全屏闪烁。
|
||||
*/
|
||||
void UI_UpdateSetTimeDigit(u8 hour, u8 min, u8 day, u8 month, u8 year, u8 selection, u8 blink_on)
|
||||
void UI_UpdateSetTimeDigit(u8 hour, u8 min, u8 day, u8 month, u8 year, u8 weekday, u8 selection, u8 blink_on)
|
||||
{
|
||||
char buf[3];
|
||||
u16 x;
|
||||
@@ -503,6 +504,12 @@ void UI_UpdateSetTimeDigit(u8 hour, u8 min, u8 day, u8 month, u8 year, u8 select
|
||||
default: x = DATE_BAR_YEAR_X; y = DATE_BAR_Y; w = DATE_BAR_FIELD_W; h = 16; value = year; break;
|
||||
}
|
||||
|
||||
// 调节日/月/年时,星期缩写可能因为日期变化而改变,顺带刷新一下 (不参与闪烁,始终显示)
|
||||
if (selection >= 3) {
|
||||
LCD_FillRect(DATE_BAR_START_X, DATE_BAR_Y, 24, 16, COLOR_BLACK);
|
||||
LCD_ShowString(DATE_BAR_START_X, DATE_BAR_Y, Lang_Get((StringID)(STR_WEEKDAY_SUN + weekday)), COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
|
||||
if (!blink_on) {
|
||||
// 灭周期:直接把这一小块涂黑,形成消隐效果
|
||||
LCD_FillRect(x, y, w, h, COLOR_BLACK);
|
||||
|
||||
Reference in New Issue
Block a user