diff options
Diffstat (limited to 'src/displayapp/screens/Timer.h')
| -rw-r--r-- | src/displayapp/screens/Timer.h | 82 |
1 files changed, 75 insertions, 7 deletions
diff --git a/src/displayapp/screens/Timer.h b/src/displayapp/screens/Timer.h index 1eee6d0..9b1431e 100644 --- a/src/displayapp/screens/Timer.h +++ b/src/displayapp/screens/Timer.h @@ -18,21 +18,89 @@ namespace Pinetime::Applications::Screens { ~Timer() override; void Refresh() override; - void SetDone(); - void OnButtonEvent(lv_obj_t* obj, lv_event_t event); - + void RefreshRunning(); + inline void SetDone() { + lv_label_set_text_static(time, "00:00"); + RefreshRunning(); + secondsToSet = 0; + minutesToSet = 0; + CreateButtons(); + } private: - bool running; + static void btnEventHandler(lv_obj_t* obj, lv_event_t event); + inline void OnButtonEvent(lv_obj_t* obj, lv_event_t event) { + if (event == LV_EVENT_CLICKED) { + if (obj == btnPlayPause) { + if (timerController.IsRunning()) { + uint32_t seconds = timerController.GetSecondsRemaining(); + minutesToSet = seconds / 60; + secondsToSet = seconds % 60; + timerController.StopTimer(); + CreateButtons(); + RefreshRunning(); + } else if (secondsToSet + minutesToSet > 0) { + timerController.StartTimer((secondsToSet + minutesToSet * 60) * 1000); + RefreshRunning(); + DeleteButtons(); + } + } else { + if (!timerController.IsRunning()) { + if (obj == btnMinutesUp) { + if (minutesToSet >= 59) { + minutesToSet = 0; + } else { + minutesToSet++; + } + lv_label_set_text_fmt(time, "%02d:%02d", minutesToSet, secondsToSet); + + } else if (obj == btnMinutesDown) { + if (minutesToSet == 0) { + minutesToSet = 59; + } else { + minutesToSet--; + } + lv_label_set_text_fmt(time, "%02d:%02d", minutesToSet, secondsToSet); + + } else if (obj == btnSecondsUp) { + if (secondsToSet >= 59) { + secondsToSet = 0; + } else { + secondsToSet++; + } + lv_label_set_text_fmt(time, "%02d:%02d", minutesToSet, secondsToSet); + + } else if (obj == btnSecondsDown) { + if (secondsToSet == 0) { + secondsToSet = 59; + } else { + secondsToSet--; + } + lv_label_set_text_fmt(time, "%02d:%02d", minutesToSet, secondsToSet); + } + } + } + } + } + void CreateButtons(); + inline void DeleteButtons() { + lv_obj_del(btnSecondsDown); + btnSecondsDown = nullptr; + lv_obj_del(btnSecondsUp); + btnSecondsUp = nullptr; + lv_obj_del(btnMinutesDown); + btnMinutesDown = nullptr; + lv_obj_del(btnMinutesUp); + btnMinutesUp = nullptr; + } uint8_t secondsToSet = 0; uint8_t minutesToSet = 0; Controllers::TimerController& timerController; - void createButtons(); - void stop(); + void Stop(); lv_obj_t* backgroundLabel; lv_task_t* taskRefresh; - lv_obj_t *time, *btnPlayPause, *txtPlayPause, *btnMinutesUp, *btnMinutesDown, *btnSecondsUp, *btnSecondsDown, *txtMUp, + lv_obj_t *time, *btnPlayPause, *txtPlayPause, *btnMinutesUp = nullptr, *btnMinutesDown, *btnSecondsUp, *btnSecondsDown, *txtMUp, *txtMDown, *txtSUp, *txtSDown; }; } |
