Mercurial > public > ostc4
comparison Discovery/Src/tMenuEditSystem.c @ 944:44599695df41 Evo_2_23
Restructure Date/Time menu:
To have more space for upcoming optins the selection of the date format (DDMMYY) has been moved into a submenu. In addition the function was upgraded to support multi language handling.
author | Ideenmodellierer |
---|---|
date | Thu, 19 Dec 2024 18:58:18 +0100 |
parents | 940f8e132638 |
children | c6b858f2e025 |
comparison
equal
deleted
inserted
replaced
943:e7f87ade3037 | 944:44599695df41 |
---|---|
46 /*#define HAVE_DEBUG_VIEW */ | 46 /*#define HAVE_DEBUG_VIEW */ |
47 static uint8_t infoPage = 0; | 47 static uint8_t infoPage = 0; |
48 | 48 |
49 /* Private function prototypes -----------------------------------------------*/ | 49 /* Private function prototypes -----------------------------------------------*/ |
50 void openEdit_DateTime(void); | 50 void openEdit_DateTime(void); |
51 void openEdit_DateFormat(void); | |
51 void openEdit_Language(void); | 52 void openEdit_Language(void); |
52 void openEdit_Design(void); | 53 void openEdit_Design(void); |
53 void openEdit_Information(void); | 54 void openEdit_Information(void); |
54 void openEdit_Reset(void); | 55 void openEdit_Reset(void); |
55 void openEdit_Maintenance(void); | 56 void openEdit_Maintenance(void); |
58 | 59 |
59 /* Announced function prototypes -----------------------------------------------*/ | 60 /* Announced function prototypes -----------------------------------------------*/ |
60 uint8_t OnAction_Date (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 61 uint8_t OnAction_Date (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
61 uint8_t OnAction_Time (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 62 uint8_t OnAction_Time (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
62 uint8_t OnAction_12HR (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 63 uint8_t OnAction_12HR (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
64 uint8_t OnAction_Format (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | |
63 uint8_t OnAction_DDMMYY (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 65 uint8_t OnAction_DDMMYY (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
64 uint8_t OnAction_MMDDYY (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 66 uint8_t OnAction_MMDDYY (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
65 uint8_t OnAction_YYMMDD (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 67 uint8_t OnAction_YYMMDD (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
66 uint8_t OnAction_DST (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 68 uint8_t OnAction_DST (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
67 uint8_t OnAction_English (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 69 uint8_t OnAction_English (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
235 | 237 |
236 void openEdit_DateTime(void) | 238 void openEdit_DateTime(void) |
237 { | 239 { |
238 RTC_DateTypeDef Sdate; | 240 RTC_DateTypeDef Sdate; |
239 RTC_TimeTypeDef Stime; | 241 RTC_TimeTypeDef Stime; |
240 uint8_t day,month,year,hour,minute, dateFormat, ddmmyy, mmddyy, yymmdd; | 242 uint8_t day,month,year,hour,minute; |
241 char text[32]; | 243 char text[32]; |
244 char formatStr[10]; | |
242 SSettings *pSettings; | 245 SSettings *pSettings; |
243 const SFirmwareData *pFirmwareInfo; | 246 const SFirmwareData *pFirmwareInfo; |
244 pFirmwareInfo = firmwareDataGetPointer(); | 247 pFirmwareInfo = firmwareDataGetPointer(); |
245 const SDiveState * pStateReal = stateRealGetPointer(); | 248 const SDiveState * pStateReal = stateRealGetPointer(); |
246 | 249 |
247 pSettings = settingsGetPointer(); | 250 pSettings = settingsGetPointer(); |
251 | |
252 set_globalState(StMSYS1_DateTime); | |
253 resetMenuEdit(CLUT_MenuPageSystem); | |
254 | |
248 translateDate(pStateReal->lifeData.dateBinaryFormat, &Sdate); | 255 translateDate(pStateReal->lifeData.dateBinaryFormat, &Sdate); |
249 translateTime(pStateReal->lifeData.timeBinaryFormat, &Stime); | 256 translateTime(pStateReal->lifeData.timeBinaryFormat, &Stime); |
250 year = Sdate.Year; | 257 year = Sdate.Year; |
251 month = Sdate.Month; | 258 month = Sdate.Month; |
252 day = Sdate.Date; | 259 day = Sdate.Date; |
261 | 268 |
262 if(day < 1) | 269 if(day < 1) |
263 day = 1; | 270 day = 1; |
264 | 271 |
265 // daylightsaving = Stime.DayLightSaving; | 272 // daylightsaving = Stime.DayLightSaving; |
266 dateFormat = pSettings->date_format; | 273 |
267 ddmmyy = 0; | 274 switch(pSettings->date_format) |
268 mmddyy = 0; | 275 { |
269 yymmdd = 0; | 276 default: |
270 | 277 case DDMMYY: snprintf(formatStr,10,"DDMMYY"); |
271 if(dateFormat == DDMMYY) | 278 break; |
272 ddmmyy = 1; | 279 case MMDDYY: snprintf(formatStr,10,"MMDDYY"); |
273 else | 280 break; |
274 if(dateFormat == MMDDYY) | 281 case YYMMDD: snprintf(formatStr,10,"YYMMDD"); |
275 mmddyy = 1; | 282 break; |
276 else | 283 }; |
277 yymmdd = 1; | |
278 | 284 |
279 text[0] = '\001'; | 285 text[0] = '\001'; |
280 text[1] = TXT_DateAndTime; | 286 text[1] = TXT_DateAndTime; |
281 text[2] = 0; | 287 text[2] = 0; |
282 | 288 |
283 write_topline(text); | 289 write_topline(text); |
284 | 290 |
285 write_label_fix( 20, 340, ME_Y_LINE1, &FontT42, TXT_TimeConfig); | 291 write_label_fix( 20, 340, ME_Y_LINE1, &FontT42, TXT_TimeConfig); |
286 write_label_fix( 20, 340, ME_Y_LINE2, &FontT42, TXT_Format); | 292 write_label_fix( 20, 340, ME_Y_LINE2, &FontT42, TXT_Format); |
287 write_label_fix( 20, 340, ME_Y_LINE3, &FontT42, TXT_DateConfig); | 293 write_label_fix( 20, 340, ME_Y_LINE3, &FontT42, TXT_DateConfig); |
288 write_label_var( 600, 800, ME_Y_LINE4, &FontT48, "\016\016DDMMYY\017"); | 294 write_label_fix( 20, 790, ME_Y_LINE4, &FontT42, TXT_Format); |
289 write_label_fix( 20, 790, ME_Y_LINE5, &FontT42, TXT_Format); | |
290 // write_label_fix( 350 ,580, 250, &FontT42, TXT_Daylightsaving); | |
291 | 295 |
292 write_field_2digit(StMSYS1_Time, 320, 780, ME_Y_LINE1, &FontT48, "##:##", (uint32_t)hour, (uint32_t)minute, 0, 0); | 296 write_field_2digit(StMSYS1_Time, 320, 780, ME_Y_LINE1, &FontT48, "##:##", (uint32_t)hour, (uint32_t)minute, 0, 0); |
293 write_field_on_off(StMSYS1_12HR, 320, 790, ME_Y_LINE2, &FontT48, "12 HR", pSettings->amPMTime); | 297 write_field_on_off(StMSYS1_12HR, 320, 790, ME_Y_LINE2, &FontT48, "12 HR", pSettings->amPMTime); |
294 write_field_2digit(StMSYS1_Date, 320, 780, ME_Y_LINE3, &FontT48, "##-##-20##", (uint32_t)day, (uint32_t)month, (uint32_t)year, 0); | 298 |
295 write_field_on_off(StMSYS1_DDMMYY, 320, 790, ME_Y_LINE4, &FontT48, "DDMMYY", ddmmyy); | 299 switch(pSettings->date_format) |
296 write_field_on_off(StMSYS1_MMDDYY, 320, 790, ME_Y_LINE5, &FontT48, "MMDDYY", mmddyy); | 300 { |
297 write_field_on_off(StMSYS1_YYMMDD, 320, 790, ME_Y_LINE6, &FontT48, "YYMMDD", yymmdd); | 301 default: |
298 // write_field_on_off(StMSYS1_DST, 350, 580, 310, &FontT48, "Active", daylightsaving); | 302 case DDMMYY: write_field_2digit(StMSYS1_Date, 320, 780, ME_Y_LINE3, &FontT48, "##-##-20##", (uint32_t)day, (uint32_t)month, (uint32_t)year, 0); |
303 break; | |
304 case MMDDYY: write_field_2digit(StMSYS1_Date, 320, 780, ME_Y_LINE3, &FontT48, "##-##-20##", (uint32_t)month, (uint32_t)day, (uint32_t)year, 0); | |
305 break; | |
306 case YYMMDD: write_field_2digit(StMSYS1_Date, 320, 780, ME_Y_LINE3, &FontT48, "20##-##-##", (uint32_t)year, (uint32_t)month, (uint32_t)day, 0); | |
307 break; | |
308 } | |
309 | |
310 | |
311 write_field_button(StMSYS1_FORMAT, 320, 790, ME_Y_LINE4, &FontT48, formatStr); | |
299 | 312 |
300 setEvent(StMSYS1_Date, (uint32_t)OnAction_Date); | 313 setEvent(StMSYS1_Date, (uint32_t)OnAction_Date); |
301 setEvent(StMSYS1_Time, (uint32_t)OnAction_Time); | 314 setEvent(StMSYS1_Time, (uint32_t)OnAction_Time); |
302 setEvent(StMSYS1_12HR, (uint32_t)OnAction_12HR); | 315 setEvent(StMSYS1_12HR, (uint32_t)OnAction_12HR); |
303 setEvent(StMSYS1_DDMMYY, (uint32_t)OnAction_DDMMYY); | 316 setEvent(StMSYS1_FORMAT, (uint32_t)OnAction_Format); |
304 setEvent(StMSYS1_MMDDYY, (uint32_t)OnAction_MMDDYY); | |
305 setEvent(StMSYS1_YYMMDD, (uint32_t)OnAction_YYMMDD); | |
306 // setEvent(StMSYS1_DST, (uint32_t)OnAction_DST); | 317 // setEvent(StMSYS1_DST, (uint32_t)OnAction_DST); |
307 | 318 |
308 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); | 319 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); |
309 } | 320 } |
310 | 321 |
316 RTC_DateTypeDef sdatestructure; | 327 RTC_DateTypeDef sdatestructure; |
317 | 328 |
318 const SFirmwareData *pFirmwareInfo; | 329 const SFirmwareData *pFirmwareInfo; |
319 pFirmwareInfo = firmwareDataGetPointer(); | 330 pFirmwareInfo = firmwareDataGetPointer(); |
320 | 331 |
332 uint8_t mapDMY[3]; | |
333 switch(settingsGetPointer()->date_format) | |
334 { | |
335 default: | |
336 case DDMMYY: mapDMY[0] = 0; | |
337 mapDMY[1] = 1; | |
338 mapDMY[2] = 2; | |
339 break; | |
340 case MMDDYY: mapDMY[0] = 1; | |
341 mapDMY[1] = 0; | |
342 mapDMY[2] = 2; | |
343 break; | |
344 case YYMMDD: mapDMY[0] = 2; | |
345 mapDMY[1] = 1; | |
346 mapDMY[2] = 0; | |
347 break; | |
348 } | |
349 | |
321 if(action == ACTION_BUTTON_ENTER) | 350 if(action == ACTION_BUTTON_ENTER) |
322 { | 351 { |
323 return digitContent; | 352 return digitContent; |
324 } | 353 } |
325 if(action == ACTION_BUTTON_ENTER_FINAL) | 354 if(action == ACTION_BUTTON_ENTER_FINAL) |
326 { | 355 { |
327 evaluateNewString(editId, &newDay, &newMonth, &newYear, 0); | 356 switch(settingsGetPointer()->date_format) |
357 { | |
358 default: | |
359 case DDMMYY: evaluateNewString(editId, &newDay, &newMonth, &newYear, 0); | |
360 break; | |
361 case MMDDYY: evaluateNewString(editId, &newMonth, &newDay, &newYear, 0); | |
362 break; | |
363 case YYMMDD: evaluateNewString(editId, &newYear, &newMonth, &newDay, 0); | |
364 break; | |
365 } | |
366 | |
328 if(newDay == 0) | 367 if(newDay == 0) |
329 newDay = 1; | 368 newDay = 1; |
330 if(newDay > 31) | 369 if(newDay > 31) |
331 newDay = 31; | 370 newDay = 31; |
332 if(newMonth == 0) | 371 if(newMonth == 0) |
347 sdatestructure.Year = newYear; | 386 sdatestructure.Year = newYear; |
348 setWeekday(&sdatestructure); | 387 setWeekday(&sdatestructure); |
349 | 388 |
350 setDate(sdatestructure); | 389 setDate(sdatestructure); |
351 | 390 |
352 tMenuEdit_newInput(editId, newDay, newMonth, newYear, 0); | 391 switch(settingsGetPointer()->date_format) |
392 { | |
393 default: | |
394 case DDMMYY: tMenuEdit_newInput(editId, newDay, newMonth, newYear, 0); | |
395 break; | |
396 case MMDDYY: tMenuEdit_newInput(editId, newMonth, newDay, newYear, 0); | |
397 break; | |
398 case YYMMDD: tMenuEdit_newInput(editId, newYear, newMonth, newDay, 0); | |
399 break; | |
400 } | |
401 | |
353 return UNSPECIFIC_RETURN; | 402 return UNSPECIFIC_RETURN; |
354 } | 403 } |
355 if(action == ACTION_BUTTON_NEXT) /* clip values to a specific range e.g. 12 months */ | 404 if(action == ACTION_BUTTON_NEXT) /* clip values to a specific range e.g. 12 months */ |
356 { | 405 { |
357 digitContentNew = digitContent + 1; | 406 digitContentNew = digitContent + 1; |
358 if((blockNumber == 0) && (digitContentNew > '0' + 31)) | 407 |
408 if((blockNumber == mapDMY[0]) && (digitContentNew > '0' + 31)) | |
409 { | |
359 digitContentNew = '1'; | 410 digitContentNew = '1'; |
360 if((blockNumber == 1) && (digitContentNew > '0' + 12)) | 411 } |
412 if((blockNumber == mapDMY[1]) && (digitContentNew > '0' + 12)) | |
413 { | |
361 digitContentNew = '1'; | 414 digitContentNew = '1'; |
362 if((blockNumber == 2) && (digitContentNew > '0' + pFirmwareInfo->release_year + 10)) | 415 } |
416 if((blockNumber == mapDMY[2]) && (digitContentNew > '0' + pFirmwareInfo->release_year + 10)) | |
417 { | |
363 digitContentNew = '0' + pFirmwareInfo->release_year; | 418 digitContentNew = '0' + pFirmwareInfo->release_year; |
419 } | |
364 return digitContentNew; | 420 return digitContentNew; |
365 } | 421 } |
366 if(action == ACTION_BUTTON_BACK) /* clip values to a specific range e.g. 12 months */ | 422 if(action == ACTION_BUTTON_BACK) /* clip values to a specific range e.g. 12 months */ |
367 { | 423 { |
368 digitContentNew = digitContent - 1; | 424 digitContentNew = digitContent - 1; |
369 if((blockNumber == 0) && (digitContentNew < '1')) | 425 if((blockNumber == mapDMY[0]) && (digitContentNew < '1')) |
426 { | |
370 digitContentNew = '0' + 31; | 427 digitContentNew = '0' + 31; |
371 if((blockNumber == 1) && (digitContentNew < '1')) | 428 } |
429 if((blockNumber == mapDMY[1]) && (digitContentNew < '1')) | |
430 { | |
372 digitContentNew = '0' + 12; | 431 digitContentNew = '0' + 12; |
373 if((blockNumber == 2) && (digitContentNew < '0' + pFirmwareInfo->release_year)) | 432 } |
433 if((blockNumber == mapDMY[2]) && (digitContentNew < '0' + pFirmwareInfo->release_year)) | |
434 { | |
374 digitContentNew = '0' + pFirmwareInfo->release_year + 10; | 435 digitContentNew = '0' + pFirmwareInfo->release_year + 10; |
436 } | |
375 return digitContentNew; | 437 return digitContentNew; |
376 } | 438 } |
377 /* | 439 /* |
378 if(action == ACTION_BUTTON_NEXT) | 440 if(action == ACTION_BUTTON_NEXT) |
379 { | 441 { |
484 | 546 |
485 pSettings = settingsGetPointer(); | 547 pSettings = settingsGetPointer(); |
486 pSettings->amPMTime = !(pSettings->amPMTime); | 548 pSettings->amPMTime = !(pSettings->amPMTime); |
487 | 549 |
488 tMenuEdit_set_on_off(editId, pSettings->amPMTime); | 550 tMenuEdit_set_on_off(editId, pSettings->amPMTime); |
551 | |
552 return UNSPECIFIC_RETURN; | |
553 } | |
554 | |
555 void openEdit_DateFormat(void) | |
556 { | |
557 char text[32]; | |
558 SSettings *pSettings; | |
559 | |
560 uint8_t ddmmyy = 0; | |
561 uint8_t mmddyy= 0; | |
562 uint8_t yymmdd = 0; | |
563 | |
564 pSettings = settingsGetPointer(); | |
565 | |
566 | |
567 set_globalState(StMSYS1_FORMAT); | |
568 resetMenuEdit(CLUT_MenuPageSystem); | |
569 setBackMenu((uint32_t)openEdit_DateTime,0,4); | |
570 | |
571 switch(pSettings->date_format) | |
572 { | |
573 default: | |
574 case DDMMYY: ddmmyy = 1; | |
575 break; | |
576 case MMDDYY: mmddyy = 1; | |
577 break; | |
578 case YYMMDD: yymmdd = 1; | |
579 break; | |
580 }; | |
581 | |
582 text[0] = '\001'; | |
583 text[1] = TXT_Format; | |
584 text[2] = 0; | |
585 | |
586 write_topline(text); | |
587 | |
588 write_label_fix( 20, 790, ME_Y_LINE2, &FontT42, TXT_Format); | |
589 | |
590 write_field_on_off(StMSYS1_DDMMYY, 320, 790, ME_Y_LINE1, &FontT48, "DDMMYY", ddmmyy); | |
591 write_field_on_off(StMSYS1_MMDDYY, 320, 790, ME_Y_LINE2, &FontT48, "MMDDYY", mmddyy); | |
592 write_field_on_off(StMSYS1_YYMMDD, 320, 790, ME_Y_LINE3, &FontT48, "YYMMDD", yymmdd); | |
593 | |
594 setEvent(StMSYS1_DDMMYY, (uint32_t)OnAction_DDMMYY); | |
595 setEvent(StMSYS1_MMDDYY, (uint32_t)OnAction_MMDDYY); | |
596 setEvent(StMSYS1_YYMMDD, (uint32_t)OnAction_YYMMDD); | |
597 | |
598 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); | |
599 } | |
600 | |
601 uint8_t OnAction_Format(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | |
602 { | |
603 openEdit_DateFormat(); | |
489 | 604 |
490 return UNSPECIFIC_RETURN; | 605 return UNSPECIFIC_RETURN; |
491 } | 606 } |
492 | 607 |
493 uint8_t OnAction_DDMMYY(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 608 uint8_t OnAction_DDMMYY(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |