@ -4,10 +4,8 @@
# include "Symbols.h"
# include "Symbols.h"
# include "lvgl/lvgl.h"
# include "lvgl/lvgl.h"
using namespace Pinetime : : Applications : : Screens ;
using namespace Pinetime : : Applications : : Screens ;
static void btnEventHandler ( lv_obj_t * obj , lv_event_t event ) {
static void btnEventHandler ( lv_obj_t * obj , lv_event_t event ) {
Timer * screen = static_cast < Timer * > ( obj - > user_data ) ;
Timer * screen = static_cast < Timer * > ( obj - > user_data ) ;
screen - > OnButtonEvent ( obj , event ) ;
screen - > OnButtonEvent ( obj , event ) ;
@ -22,7 +20,7 @@ void Timer::createButtons() {
lv_obj_set_width ( btnMinutesUp , 60 ) ;
lv_obj_set_width ( btnMinutesUp , 60 ) ;
txtMUp = lv_label_create ( btnMinutesUp , nullptr ) ;
txtMUp = lv_label_create ( btnMinutesUp , nullptr ) ;
lv_label_set_text ( txtMUp , " + " ) ;
lv_label_set_text ( txtMUp , " + " ) ;
btnMinutesDown = lv_btn_create ( lv_scr_act ( ) , nullptr ) ;
btnMinutesDown = lv_btn_create ( lv_scr_act ( ) , nullptr ) ;
btnMinutesDown - > user_data = this ;
btnMinutesDown - > user_data = this ;
lv_obj_set_event_cb ( btnMinutesDown , btnEventHandler ) ;
lv_obj_set_event_cb ( btnMinutesDown , btnEventHandler ) ;
@ -31,7 +29,7 @@ void Timer::createButtons() {
lv_obj_set_width ( btnMinutesDown , 60 ) ;
lv_obj_set_width ( btnMinutesDown , 60 ) ;
txtMDown = lv_label_create ( btnMinutesDown , nullptr ) ;
txtMDown = lv_label_create ( btnMinutesDown , nullptr ) ;
lv_label_set_text ( txtMDown , " - " ) ;
lv_label_set_text ( txtMDown , " - " ) ;
btnSecondsUp = lv_btn_create ( lv_scr_act ( ) , nullptr ) ;
btnSecondsUp = lv_btn_create ( lv_scr_act ( ) , nullptr ) ;
btnSecondsUp - > user_data = this ;
btnSecondsUp - > user_data = this ;
lv_obj_set_event_cb ( btnSecondsUp , btnEventHandler ) ;
lv_obj_set_event_cb ( btnSecondsUp , btnEventHandler ) ;
@ -40,7 +38,7 @@ void Timer::createButtons() {
lv_obj_set_width ( btnSecondsUp , 60 ) ;
lv_obj_set_width ( btnSecondsUp , 60 ) ;
txtSUp = lv_label_create ( btnSecondsUp , nullptr ) ;
txtSUp = lv_label_create ( btnSecondsUp , nullptr ) ;
lv_label_set_text ( txtSUp , " + " ) ;
lv_label_set_text ( txtSUp , " + " ) ;
btnSecondsDown = lv_btn_create ( lv_scr_act ( ) , nullptr ) ;
btnSecondsDown = lv_btn_create ( lv_scr_act ( ) , nullptr ) ;
btnSecondsDown - > user_data = this ;
btnSecondsDown - > user_data = this ;
lv_obj_set_event_cb ( btnSecondsDown , btnEventHandler ) ;
lv_obj_set_event_cb ( btnSecondsDown , btnEventHandler ) ;
@ -49,24 +47,20 @@ void Timer::createButtons() {
lv_obj_set_width ( btnSecondsDown , 60 ) ;
lv_obj_set_width ( btnSecondsDown , 60 ) ;
txtSDown = lv_label_create ( btnSecondsDown , nullptr ) ;
txtSDown = lv_label_create ( btnSecondsDown , nullptr ) ;
lv_label_set_text ( txtSDown , " - " ) ;
lv_label_set_text ( txtSDown , " - " ) ;
}
}
Timer : : Timer ( DisplayApp * app , Controllers : : TimerController & timerController )
Timer : : Timer ( DisplayApp * app , Controllers : : TimerController & timerController )
: Screen ( app ) ,
: Screen ( app ) , running { true } , timerController { timerController } {
running { true } ,
timerController { timerController } {
time = lv_label_create ( lv_scr_act ( ) , nullptr ) ;
time = lv_label_create ( lv_scr_act ( ) , nullptr ) ;
lv_obj_set_style_local_text_font ( time , LV_LABEL_PART_MAIN , LV_STATE_DEFAULT , & jetbrains_mono_76 ) ;
lv_obj_set_style_local_text_font ( time , LV_LABEL_PART_MAIN , LV_STATE_DEFAULT , & jetbrains_mono_76 ) ;
lv_obj_set_style_local_text_color ( time , LV_LABEL_PART_MAIN , LV_STATE_DEFAULT , LV_COLOR_GRAY ) ;
lv_obj_set_style_local_text_color ( time , LV_LABEL_PART_MAIN , LV_STATE_DEFAULT , LV_COLOR_GRAY ) ;
uint32_t seconds = timerController . GetTimeRemaining ( ) / 1000 ;
uint32_t seconds = timerController . GetTimeRemaining ( ) / 1000 ;
lv_label_set_text_fmt ( time , " %02lu:%02lu " , seconds / 60 , seconds % 60 ) ;
lv_label_set_text_fmt ( time , " %02lu:%02lu " , seconds / 60 , seconds % 60 ) ;
lv_obj_align ( time , lv_scr_act ( ) , LV_ALIGN_IN_LEFT_MID , 0 , - 20 ) ;
lv_obj_align ( time , lv_scr_act ( ) , LV_ALIGN_IN_LEFT_MID , 0 , - 20 ) ;
btnPlayPause = lv_btn_create ( lv_scr_act ( ) , nullptr ) ;
btnPlayPause = lv_btn_create ( lv_scr_act ( ) , nullptr ) ;
btnPlayPause - > user_data = this ;
btnPlayPause - > user_data = this ;
lv_obj_set_event_cb ( btnPlayPause , btnEventHandler ) ;
lv_obj_set_event_cb ( btnPlayPause , btnEventHandler ) ;
@ -79,20 +73,20 @@ Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController)
lv_label_set_text ( txtPlayPause , Symbols : : play ) ;
lv_label_set_text ( txtPlayPause , Symbols : : play ) ;
createButtons ( ) ;
createButtons ( ) ;
}
}
taskRefresh = lv_task_create ( RefreshTaskCallback , 20 , LV_TASK_PRIO_MID , this ) ;
}
}
Timer : : ~ Timer ( ) {
Timer : : ~ Timer ( ) {
lv_task_del ( taskRefresh ) ;
lv_obj_clean ( lv_scr_act ( ) ) ;
lv_obj_clean ( lv_scr_act ( ) ) ;
}
}
bool Timer : : Refresh ( ) {
void Timer : : Refresh ( ) {
if ( timerController . IsRunning ( ) ) {
if ( timerController . IsRunning ( ) ) {
uint32_t seconds = timerController . GetTimeRemaining ( ) / 1000 ;
uint32_t seconds = timerController . GetTimeRemaining ( ) / 1000 ;
lv_label_set_text_fmt ( time , " %02lu:%02lu " , seconds / 60 , seconds % 60 ) ;
lv_label_set_text_fmt ( time , " %02lu:%02lu " , seconds / 60 , seconds % 60 ) ;
}
}
return running ;
}
}
void Timer : : OnButtonEvent ( lv_obj_t * obj , lv_event_t event ) {
void Timer : : OnButtonEvent ( lv_obj_t * obj , lv_event_t event ) {
@ -105,11 +99,11 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) {
secondsToSet = seconds % 60 ;
secondsToSet = seconds % 60 ;
timerController . StopTimer ( ) ;
timerController . StopTimer ( ) ;
createButtons ( ) ;
createButtons ( ) ;
} else if ( secondsToSet + minutesToSet > 0 ) {
} else if ( secondsToSet + minutesToSet > 0 ) {
lv_label_set_text ( txtPlayPause , Symbols : : pause ) ;
lv_label_set_text ( txtPlayPause , Symbols : : pause ) ;
timerController . StartTimer ( ( secondsToSet + minutesToSet * 60 ) * 1000 ) ;
timerController . StartTimer ( ( secondsToSet + minutesToSet * 60 ) * 1000 ) ;
lv_obj_del ( btnSecondsDown ) ;
lv_obj_del ( btnSecondsDown ) ;
btnSecondsDown = nullptr ;
btnSecondsDown = nullptr ;
lv_obj_del ( btnSecondsUp ) ;
lv_obj_del ( btnSecondsUp ) ;
@ -118,7 +112,6 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) {
btnMinutesDown = nullptr ;
btnMinutesDown = nullptr ;
lv_obj_del ( btnMinutesUp ) ;
lv_obj_del ( btnMinutesUp ) ;
btnMinutesUp = nullptr ;
btnMinutesUp = nullptr ;
}
}
} else {
} else {
if ( ! timerController . IsRunning ( ) ) {
if ( ! timerController . IsRunning ( ) ) {
@ -129,7 +122,7 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) {
minutesToSet + + ;
minutesToSet + + ;
}
}
lv_label_set_text_fmt ( time , " %02d:%02d " , minutesToSet , secondsToSet ) ;
lv_label_set_text_fmt ( time , " %02d:%02d " , minutesToSet , secondsToSet ) ;
} else if ( obj = = btnMinutesDown ) {
} else if ( obj = = btnMinutesDown ) {
if ( minutesToSet = = 0 ) {
if ( minutesToSet = = 0 ) {
minutesToSet = 59 ;
minutesToSet = 59 ;
@ -137,7 +130,7 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) {
minutesToSet - - ;
minutesToSet - - ;
}
}
lv_label_set_text_fmt ( time , " %02d:%02d " , minutesToSet , secondsToSet ) ;
lv_label_set_text_fmt ( time , " %02d:%02d " , minutesToSet , secondsToSet ) ;
} else if ( obj = = btnSecondsUp ) {
} else if ( obj = = btnSecondsUp ) {
if ( secondsToSet > = 59 ) {
if ( secondsToSet > = 59 ) {
secondsToSet = 0 ;
secondsToSet = 0 ;
@ -145,7 +138,7 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) {
secondsToSet + + ;
secondsToSet + + ;
}
}
lv_label_set_text_fmt ( time , " %02d:%02d " , minutesToSet , secondsToSet ) ;
lv_label_set_text_fmt ( time , " %02d:%02d " , minutesToSet , secondsToSet ) ;
} else if ( obj = = btnSecondsDown ) {
} else if ( obj = = btnSecondsDown ) {
if ( secondsToSet = = 0 ) {
if ( secondsToSet = = 0 ) {
secondsToSet = 59 ;
secondsToSet = 59 ;
@ -153,21 +146,16 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) {
secondsToSet - - ;
secondsToSet - - ;
}
}
lv_label_set_text_fmt ( time , " %02d:%02d " , minutesToSet , secondsToSet ) ;
lv_label_set_text_fmt ( time , " %02d:%02d " , minutesToSet , secondsToSet ) ;
}
}
}
}
}
}
}
}
}
}
void Timer : : setDone ( ) {
void Timer : : setDone ( ) {
lv_label_set_text ( time , " 00:00 " ) ;
lv_label_set_text ( time , " 00:00 " ) ;
lv_label_set_text ( txtPlayPause , Symbols : : play ) ;
lv_label_set_text ( txtPlayPause , Symbols : : play ) ;
secondsToSet = 0 ;
secondsToSet = 0 ;
minutesToSet = 0 ;
minutesToSet = 0 ;
createButtons ( ) ;
createButtons ( ) ;
}
}