Mercurial > public > ostc4
comparison Discovery/Src/tMenuEditXtra.c @ 1018:808153ba3fec GasConsumption
Disable the menu items for editing scrubber timer parameters if an
inactive scrubber timer is selected.
This removes the confusion when users edit a scrubber that is not
active, and are then surprised when the scrubber timer does not work
during the dive. (mikeller)
| author | heinrichsweikamp |
|---|---|
| date | Mon, 09 Jun 2025 09:42:16 +0200 |
| parents | 8c0134a287da |
| children | 52fd91414b6c |
comparison
equal
deleted
inserted
replaced
| 1017:5924a2d1d3ba | 1018:808153ba3fec |
|---|---|
| 39 #include "motion.h" | 39 #include "motion.h" |
| 40 #include "configuration.h" | 40 #include "configuration.h" |
| 41 #include "tInfoPreDive.h" | 41 #include "tInfoPreDive.h" |
| 42 | 42 |
| 43 | 43 |
| 44 #define SCRUBBER_COUNT 2 | |
| 45 | |
| 46 | |
| 44 /* Private function prototypes -----------------------------------------------*/ | 47 /* Private function prototypes -----------------------------------------------*/ |
| 45 void openEdit_CompassHeading(void); | 48 void openEdit_CompassHeading(void); |
| 46 void openEdit_ResetStopwatch(void); | 49 void openEdit_ResetStopwatch(void); |
| 47 void openEdit_SimFollowDecostops(void); | 50 void openEdit_SimFollowDecostops(void); |
| 48 void openEdit_SetManualMarker(void); | 51 void openEdit_SetManualMarker(void); |
| 194 | 197 |
| 195 exitMenuEdit_to_Menu_with_Menu_Update_do_not_write_settings_for_this_only(); | 198 exitMenuEdit_to_Menu_with_Menu_Update_do_not_write_settings_for_this_only(); |
| 196 } | 199 } |
| 197 | 200 |
| 198 | 201 |
| 199 static void printScrubberResetText(char *text, SSettings *settings, uint8_t scrubberId) | 202 static void printScrubberResetText(char *text, SSettings *settings, uint8_t scrubberId, bool isActive) |
| 200 { | 203 { |
| 201 int16_t currentTimerMinutes = settings->scrubberData[scrubberId].TimerCur; | 204 int16_t currentTimerMinutes = settings->scrubberData[scrubberId].TimerCur; |
| 202 char colour = '\020'; | 205 |
| 203 if (currentTimerMinutes <= 0) { | 206 char *colour = ""; |
| 204 colour = '\025'; | 207 if (isActive) { |
| 205 } else if (currentTimerMinutes <= 30) { | 208 if (currentTimerMinutes <= 0) { |
| 206 colour = '\024'; | 209 colour = "\025"; |
| 207 } | 210 } else if (currentTimerMinutes <= 30) { |
| 208 snprintf(text, 32, "%c\002%c%03i\016\016 %c\017", TXT_ScrubTimeReset, colour, currentTimerMinutes, TXT_Minutes); | 211 colour = "\024"; |
| 209 } | 212 } |
| 210 | 213 } |
| 211 | 214 snprintf(text, 32, "%s%c\002%s%03i\016\016 %c\017", makeGrey(!isActive), TXT_ScrubTimeReset, colour, currentTimerMinutes, TXT_Minutes); |
| 212 static void openEdit_Scrubber(void) | 215 } |
| 213 { | 216 |
| 217 | |
| 218 static void drawScrubberMenu(bool isRefresh) | |
| 219 { | |
| 220 SSettings *settings = settingsGetPointer(); | |
| 221 | |
| 222 resetMenuContentStructure(); | |
| 223 | |
| 214 char text[32]; | 224 char text[32]; |
| 215 uint8_t textIndex = 0; | 225 snprintf(text, 32, "%c \002#%d", TXT_ScrubTime, scrubberMenuId); |
| 216 uint16_t localScrubTimer; | 226 if (isRefresh) { |
| 217 | 227 clean_content(20, 780, ME_Y_LINE1, &FontT48); |
| 218 SSettings *pSettings = settingsGetPointer(); | 228 } |
| 219 | 229 write_field_button(StMXTRA_ScrubTimer, 20, 780, ME_Y_LINE1, &FontT48, text); |
| 220 localScrubTimer = pSettings->scrubberData[scrubberMenuId].TimerMax; | 230 |
| 221 | 231 bool currentScrubberIsActive = settings->scrubberActiveId & (1 << scrubberMenuId); |
| 222 resetMenuEdit(CLUT_MenuPageXtra); | 232 |
| 223 | 233 snprintf(text, 32, "%c %c \002%c", TXT_ScrubTime, TXT_Active, printCheckbox(currentScrubberIsActive)); |
| 224 | 234 if (isRefresh) { |
| 225 snprintf(&text[0], 32,"\001%c",TXT_ScrubTime); | 235 clean_content(20, 780, ME_Y_LINE2, &FontT48); |
| 226 write_topline(text); | 236 } |
| 227 | 237 write_field_button(StMXTRA_ScrubTimer_Active, 20, 780, ME_Y_LINE2, &FontT48, text); |
| 228 | 238 |
| 229 snprintf(&text[0], 32,"%c \002#%d",TXT_ScrubTime,scrubberMenuId); | 239 snprintf(text, 32, "%s%c\016\016(%c)\017", makeGrey(!currentScrubberIsActive), TXT_ScrubTime, TXT_Maximum); |
| 230 write_field_button(StMXTRA_ScrubTimer, 20, 780, ME_Y_LINE1, &FontT48, text); | 240 if (isRefresh) { |
| 231 | 241 clean_content(20, 340, ME_Y_LINE3, &FontT48); |
| 232 if(pSettings->scrubberActiveId & (1 << scrubberMenuId)) | 242 } |
| 233 { | 243 write_label_var(20, 340, ME_Y_LINE3, &FontT48, text); |
| 234 snprintf(&text[0], 32,"%c %c \002\005", TXT_ScrubTime, TXT_Active); | 244 |
| 235 } | 245 uint16_t timerMax = settings->scrubberData[scrubberMenuId].TimerMax; |
| 236 else | 246 if (isRefresh) { |
| 237 { | 247 clean_content(610, 780, ME_Y_LINE3, &FontT48); |
| 238 snprintf(&text[0], 32,"%c %c \002\006", TXT_ScrubTime, TXT_Active); | 248 } |
| 239 } | 249 if (currentScrubberIsActive) { |
| 240 write_field_button(StMXTRA_ScrubTimer_Active, 20, 780, ME_Y_LINE2, &FontT48, text); | 250 snprintf(text, 32, "%s\002###\016\016 %c\017", makeGrey(!currentScrubberIsActive), TXT_Minutes); |
| 241 | 251 write_field_udigit(StMXTRA_ScrubTimer_Max, 610, 780, ME_Y_LINE3, &FontT48, text, timerMax, 0, 0, 0); |
| 242 snprintf(&text[textIndex], 32,\ | 252 } else { |
| 243 "%c" | 253 snprintf(text, 32, "%s\002%03i\016\016 %c\017", makeGrey(!currentScrubberIsActive), timerMax, TXT_Minutes); |
| 244 "\016\016(%c)\017" | 254 write_label_var(610, 780, ME_Y_LINE3, &FontT48, text); |
| 245 ,TXT_ScrubTime | 255 } |
| 246 ,TXT_Maximum); | 256 |
| 247 | 257 printScrubberResetText(text, settings, scrubberMenuId, currentScrubberIsActive); |
| 248 write_label_var( 20, 340, ME_Y_LINE3, &FontT48, text); | 258 if (isRefresh) { |
| 249 snprintf(&text[textIndex], 32, "\002###\016\016 %c\017",TXT_Minutes); | 259 clean_content(20, 780, ME_Y_LINE4, &FontT48); |
| 250 | 260 } |
| 251 write_field_udigit(StMXTRA_ScrubTimer_Max, 610, 780, ME_Y_LINE3, &FontT48, text,localScrubTimer, 0, 0, 0); | 261 if (currentScrubberIsActive) { |
| 252 | 262 write_field_button(StMXTRA_ScrubTimer_Reset, 20, 780, ME_Y_LINE4, &FontT48, text); |
| 253 printScrubberResetText(text, pSettings, scrubberMenuId); | 263 } else { |
| 254 write_field_button(StMXTRA_ScrubTimer_Reset, 20, 780, ME_Y_LINE4, &FontT48, text); | 264 write_label_var(20, 780, ME_Y_LINE4, &FontT48, text); |
| 255 | 265 } |
| 256 if(pSettings->scrubberData[scrubberMenuId].lastDive.WeekDay != 0) | 266 |
| 257 { | 267 if (settings->scrubberData[scrubberMenuId].lastDive.WeekDay != 0) { |
| 258 snprintf(&text[0], 32, "%c%c\002 %02d.%02d.%02d", TXT_2BYTE, TXT2BYTE_SimDiveTime, pSettings->scrubberData[scrubberMenuId].lastDive.Date, pSettings->scrubberData[scrubberMenuId].lastDive.Month, pSettings->scrubberData[scrubberMenuId].lastDive.Year); | 268 snprintf(text, 32, "%s%c%c\002 %02d.%02d.%02d", makeGrey(!currentScrubberIsActive), TXT_2BYTE, TXT2BYTE_SimDiveTime, settings->scrubberData[scrubberMenuId].lastDive.Date, settings->scrubberData[scrubberMenuId].lastDive.Month, settings->scrubberData[scrubberMenuId].lastDive.Year); |
| 259 } | 269 } else { |
| 260 else | 270 snprintf(&text[0], 32, "%s%c%c\002 --.--.--", makeGrey(!currentScrubberIsActive), TXT_2BYTE, TXT2BYTE_SimDiveTime); |
| 261 { | 271 } |
| 262 snprintf(&text[0], 32,"%c%c\002 --.--.--", TXT_2BYTE, TXT2BYTE_SimDiveTime); | 272 if (isRefresh) { |
| 263 } | 273 clean_content(20, 780, ME_Y_LINE5, &FontT48); |
| 264 write_label_var( 20, 780, ME_Y_LINE5, &FontT48, text); | 274 } |
| 265 | 275 write_label_var(20, 780, ME_Y_LINE5, &FontT48, text); |
| 266 switch (pSettings->scrubTimerMode) { | 276 |
| 267 case SCRUB_TIMER_MINUTES: | 277 if (isRefresh) { |
| 268 default: | 278 switch (settings->scrubTimerMode) { |
| 269 snprintf(&text[0], 32,"%c\002%c",TXT_ScrubTimeMode, TXT_Minutes ); | 279 case SCRUB_TIMER_MINUTES: |
| 270 | 280 default: |
| 271 break; | 281 snprintf(text, 32, "%c\002%c", TXT_ScrubTimeMode, TXT_Minutes); |
| 272 case SCRUB_TIMER_PERCENT: | 282 |
| 273 snprintf(&text[0], 32,"%c\002%c",TXT_ScrubTimeMode, TXT_Percent ); | 283 break; |
| 274 | 284 case SCRUB_TIMER_PERCENT: |
| 275 break; | 285 snprintf(text, 32, "%c\002%c", TXT_ScrubTimeMode, TXT_Percent); |
| 276 } | 286 |
| 277 write_field_button(StMXTRA_ScrubTimer_OP_Mode, 20, 780, ME_Y_LINE6, &FontT48, text); | 287 break; |
| 288 } | |
| 289 write_field_button(StMXTRA_ScrubTimer_OP_Mode, 20, 780, ME_Y_LINE6, &FontT48, text); | |
| 290 } | |
| 278 | 291 |
| 279 setEvent(StMXTRA_ScrubTimer, (uint32_t)OnAction_ScrubberTimerId); | 292 setEvent(StMXTRA_ScrubTimer, (uint32_t)OnAction_ScrubberTimerId); |
| 280 setEvent(StMXTRA_ScrubTimer_Active, (uint32_t)OnAction_ScrubberActive); | 293 setEvent(StMXTRA_ScrubTimer_Active, (uint32_t)OnAction_ScrubberActive); |
| 281 setEvent(StMXTRA_ScrubTimer_Max, (uint32_t)OnAction_ScrubberTimerMax); | 294 setEvent(StMXTRA_ScrubTimer_Max, (uint32_t)OnAction_ScrubberTimerMax); |
| 282 setEvent(StMXTRA_ScrubTimer_Reset, (uint32_t)OnAction_ScrubberReset); | 295 setEvent(StMXTRA_ScrubTimer_Reset, (uint32_t)OnAction_ScrubberReset); |
| 283 setEvent(StMXTRA_ScrubTimer_OP_Mode, (uint32_t)OnAction_ScrubberMode); | 296 setEvent(StMXTRA_ScrubTimer_OP_Mode, (uint32_t)OnAction_ScrubberMode); |
| 284 | 297 } |
| 285 | 298 |
| 286 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); | 299 static void openEdit_Scrubber(void) |
| 287 | 300 { |
| 301 char text[32]; | |
| 302 | |
| 303 resetMenuEdit(CLUT_MenuPageXtra); | |
| 304 | |
| 305 snprintf(text, 32, "\001%c", TXT_ScrubTime); | |
| 306 write_topline(text); | |
| 307 | |
| 308 drawScrubberMenu(false); | |
| 309 | |
| 310 write_buttonTextline(TXT2BYTE_ButtonBack, TXT2BYTE_ButtonEnter, TXT2BYTE_ButtonNext); | |
| 288 } | 311 } |
| 289 | 312 |
| 290 static void openEdit_PSCR(void) | 313 static void openEdit_PSCR(void) |
| 291 { | 314 { |
| 292 uint8_t localO2Drop,localLungRatio; | 315 uint8_t localO2Drop,localLungRatio; |
| 471 } | 494 } |
| 472 | 495 |
| 473 | 496 |
| 474 uint8_t OnAction_ScrubberTimerId(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 497 uint8_t OnAction_ScrubberTimerId(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 475 { | 498 { |
| 476 char text[32]; | 499 scrubberMenuId = (scrubberMenuId + 1) % SCRUBBER_COUNT; |
| 477 SSettings *pSettings; | 500 |
| 478 pSettings = settingsGetPointer(); | 501 drawScrubberMenu(true); |
| 479 | |
| 480 if(scrubberMenuId == 0) | |
| 481 { | |
| 482 scrubberMenuId = 1; | |
| 483 } | |
| 484 else | |
| 485 { | |
| 486 scrubberMenuId = 0; | |
| 487 } | |
| 488 | |
| 489 snprintf(&text[0], 32,"%c \002#%d",TXT_ScrubTime,scrubberMenuId); | |
| 490 tMenuEdit_newButtonText(StMXTRA_ScrubTimer, text); | |
| 491 | |
| 492 printScrubberResetText(text, pSettings, scrubberMenuId); | |
| 493 tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Reset, text); | |
| 494 | |
| 495 tMenuEdit_newInput(StMXTRA_ScrubTimer_Max, pSettings->scrubberData[scrubberMenuId].TimerMax, 0, 0, 0); | |
| 496 | |
| 497 if(pSettings->scrubberData[scrubberMenuId].lastDive.WeekDay != 0) | |
| 498 { | |
| 499 snprintf(&text[0], 32, "%c%c\002 %02d.%02d.%02d", TXT_2BYTE, TXT2BYTE_SimDiveTime, pSettings->scrubberData[scrubberMenuId].lastDive.Date, pSettings->scrubberData[scrubberMenuId].lastDive.Month, pSettings->scrubberData[scrubberMenuId].lastDive.Year); | |
| 500 } | |
| 501 else | |
| 502 { | |
| 503 snprintf(&text[0], 32,"%c%c\002 --.--.--", TXT_2BYTE, TXT2BYTE_SimDiveTime); | |
| 504 } | |
| 505 clean_content( 20, 780, ME_Y_LINE5, &FontT48); | |
| 506 write_label_var( 20, 780, ME_Y_LINE5, &FontT48, text); | |
| 507 | |
| 508 if(pSettings->scrubberActiveId & (1 << scrubberMenuId)) | |
| 509 { | |
| 510 snprintf(&text[0], 32,"%c %c \002\005", TXT_ScrubTime, TXT_Active); | |
| 511 } | |
| 512 else | |
| 513 { | |
| 514 snprintf(&text[0], 32,"%c %c \002\006", TXT_ScrubTime, TXT_Active); | |
| 515 } | |
| 516 tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Active, text); | |
| 517 | 502 |
| 518 return UNSPECIFIC_RETURN; | 503 return UNSPECIFIC_RETURN; |
| 519 } | 504 } |
| 520 | 505 |
| 521 static uint8_t OnAction_ScrubberTimerMax(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 506 static uint8_t OnAction_ScrubberTimerMax(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 560 return digitContentNew; | 545 return digitContentNew; |
| 561 } | 546 } |
| 562 | 547 |
| 563 uint8_t OnAction_ScrubberReset(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 548 uint8_t OnAction_ScrubberReset(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 564 { | 549 { |
| 565 char text[32]; | 550 SSettings *pSettings = settingsGetPointer(); |
| 566 SSettings *pSettings; | |
| 567 pSettings = settingsGetPointer(); | |
| 568 pSettings->scrubberData[scrubberMenuId].TimerCur = pSettings->scrubberData[scrubberMenuId].TimerMax; | 551 pSettings->scrubberData[scrubberMenuId].TimerCur = pSettings->scrubberData[scrubberMenuId].TimerMax; |
| 569 pSettings->scrubberData[scrubberMenuId].lastDive.WeekDay = 0; /* invalidate date */ | 552 pSettings->scrubberData[scrubberMenuId].lastDive.WeekDay = 0; /* invalidate date */ |
| 570 | 553 |
| 571 printScrubberResetText(text, pSettings, scrubberMenuId); | 554 drawScrubberMenu(true); |
| 572 tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Reset, text); | |
| 573 | |
| 574 snprintf(&text[0], 32,"%c%c\002 --.--.--", TXT_2BYTE, TXT2BYTE_SimDiveTime); | |
| 575 clean_content( 20, 780, ME_Y_LINE5, &FontT48); | |
| 576 write_label_var( 20, 780, ME_Y_LINE5, &FontT48, text); | |
| 577 | 555 |
| 578 return UNSPECIFIC_RETURN; | 556 return UNSPECIFIC_RETURN; |
| 579 } | 557 } |
| 580 | 558 |
| 581 uint8_t OnAction_ScrubberMode(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 559 uint8_t OnAction_ScrubberMode(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 606 return UNSPECIFIC_RETURN; | 584 return UNSPECIFIC_RETURN; |
| 607 } | 585 } |
| 608 | 586 |
| 609 uint8_t OnAction_ScrubberActive(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 587 uint8_t OnAction_ScrubberActive(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 610 { | 588 { |
| 611 char text[32]; | 589 SSettings *pSettings = settingsGetPointer(); |
| 612 SSettings *pSettings; | 590 |
| 613 pSettings = settingsGetPointer(); | 591 if (pSettings->scrubberActiveId & (1 << scrubberMenuId)) { |
| 614 | 592 pSettings->scrubberActiveId &= ~(1 << scrubberMenuId); |
| 615 if(pSettings->scrubberActiveId & (1 << scrubberMenuId)) | 593 } else { |
| 616 { | 594 pSettings->scrubberActiveId |= (1 << scrubberMenuId); |
| 617 pSettings->scrubberActiveId &= ~(1 << scrubberMenuId); | 595 } |
| 618 snprintf(&text[0], 32,"%c %c \002\006", TXT_ScrubTime, TXT_Active); | 596 |
| 619 } | 597 drawScrubberMenu(true); |
| 620 else | |
| 621 { | |
| 622 pSettings->scrubberActiveId |= (1 << scrubberMenuId); | |
| 623 snprintf(&text[0], 32,"%c %c \002\005", TXT_ScrubTime, TXT_Active); | |
| 624 } | |
| 625 | |
| 626 tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Active, text); | |
| 627 | 598 |
| 628 return UNSPECIFIC_RETURN; | 599 return UNSPECIFIC_RETURN; |
| 629 } | 600 } |
| 630 | 601 |
| 631 #ifdef ENABLE_PSCR_MODE | 602 #ifdef ENABLE_PSCR_MODE |
