/** Common handler attached to every menu item. Called when you click the select (middle) button on the menu item. Either switches the value inline (e.g. for booleans), or opens a numeric stepper window (e.g. for durations). */ void pomOnMenuSelect(int index, void *context) { PomSettings *s = &app.settings; PomMenuId id = index; switch (id) { case PomMenuLanguage: if (++s->language >= PomLanguageCount) { s->language = 0; } break; case PomMenuVibrateWhileWorking: s->vibrateWhileWorking = !s->vibrateWhileWorking; break; case PomMenuTakeLongRests: s->takeLongRests = !s->takeLongRests; break; case PomMenuRestDuration: number_window_set_value(&durationChooserWindow, s->restTicks/60); number_window_set_label(&durationChooserWindow, POM_TEXT_SETTINGS_REST_DURATION[s->language]); window_stack_push((Window*)&durationChooserWindow, true); break; case PomMenuLongRestDuration: number_window_set_value(&durationChooserWindow, s->longRestTicks/60); number_window_set_label(&durationChooserWindow, POM_TEXT_SETTINGS_LONG_REST_DURATION[s->language]); window_stack_push((Window*)&durationChooserWindow, true); break; case PomMenuWorkDuration: number_window_set_value(&durationChooserWindow, s->workTicks/60); number_window_set_label(&durationChooserWindow, POM_TEXT_SETTINGS_WORK_DURATION[s->language]); window_stack_push((Window*)&durationChooserWindow, true); break; default: return; } pomUpdateMenus(); }
static void reset_menu() { int num_a_items = 0; menu_items[num_a_items++] = (SimpleMenuItem){ .title = "Start", .subtitle = "Lets Push-ups", .callback = select_menu_handler, }; persist_exists(GOAL_KEY)?1: persist_write_int(GOAL_KEY,15); snprintf(goal_str,sizeof(goal_str), "%ld once", persist_read_int(GOAL_KEY)); menu_items[num_a_items++] = (SimpleMenuItem){ .title= "Goal", .subtitle = goal_str, .callback = select_menu_handler, }; snprintf(history_str,sizeof(history_str), "Total: %ld Top: %ld", persist_exists(TOTAL_PUSHUPS_KEY)?persist_read_int(TOTAL_PUSHUPS_KEY) : 0, persist_exists(MAX_PUSHUPS_KEY)?persist_read_int(MAX_PUSHUPS_KEY) : 0); menu_items[num_a_items++] = (SimpleMenuItem){ .title = "History", .subtitle = history_str, .callback = select_menu_handler, }; menu_items[num_a_items++] = (SimpleMenuItem){ .title= "Version", .subtitle = "1.0 @copyright shanfeng", .callback = select_menu_handler, }; sections[0] = (SimpleMenuSection){ .num_items = SECTION_COUNT, .items = menu_items, }; if(menu_layer) { layer_remove_from_parent(simple_menu_layer_get_layer(menu_layer)); simple_menu_layer_destroy(menu_layer); } Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); menu_layer = simple_menu_layer_create(bounds,window,sections, 1,NULL); simple_menu_layer_set_selected_index(menu_layer,menu_select,false); layer_add_child(window_layer, simple_menu_layer_get_layer(menu_layer)); } static void goal_select(struct NumberWindow *number_window, void *context) { persist_write_int(GOAL_KEY,number_window_get_value(number_window)); window_stack_pop(true); } static void select_menu_handler(int index, void *context) { APP_LOG(APP_LOG_LEVEL_DEBUG,"%d",index); switch(index) { case 0: if(!pushups_window) { APP_LOG(APP_LOG_LEVEL_DEBUG, "pushups_window create"); pushups_window = create_pushups_window(); } window_stack_push(pushups_window, true); break; case 1: if(!number_window) { number_window = number_window_create("Goal",(NumberWindowCallbacks){ .selected = goal_select, },NULL); number_window_set_value(number_window, persist_read_int(GOAL_KEY)); number_window_set_min(number_window,5); number_window_set_step_size(number_window, 5); number_window_set_max(number_window,1000); } window_stack_push((Window*)number_window,true); break; case 3: { if(!info_window) { info_window = aboutinfo_window_create(); } window_stack_push(info_window,true); } } menu_select = index; }
static void sync_tuple_changed_callback(const uint32_t key, const Tuple* new_tuple, const Tuple* old_tuple, void* context) { static char nb[16]; static char sb[16]; //itoa((int)new_tuple->value,nb,15); if (error_flag == 1) return; switch (key) { case KEY_ROUTE: APP_LOG(APP_LOG_LEVEL_DEBUG, "RCVD: BUS_NB:%d", (int)new_tuple->value->int32); route = new_tuple->value->int32; itoa((int)new_tuple->value->int32,nb,10); text_layer_set_text(layer_route, nb); number_window_set_value(wind_bus_sel, (int)new_tuple->value->int32); mask_rcv.route = 1; break; case KEY_STOP_NUM: APP_LOG(APP_LOG_LEVEL_DEBUG, "RCVD: stop_NB:%d", (int)new_tuple->value->int32); stop = new_tuple->value->int32; itoa((int)new_tuple->value->int32,sb,10); text_layer_set_text(layer_station, sb); number_window_set_value(wind_stop_sel, (int)new_tuple->value->int32); mask_rcv.stop = 1; break; case KEY_ETA: APP_LOG(APP_LOG_LEVEL_DEBUG, "RCVD: ETA:%d", new_tuple->value->int16); eta = new_tuple->value->int16; set_eta_layer(); mask_rcv.eta = 1; break; case KEY_DST: //APP_LOG(APP_LOG_LEVEL_DEBUG, "RCVD: dst:%s",new_tuple->value->cstring); text_layer_set_text(layer_destination, new_tuple->value->cstring); // make it unbusy. mask_rcv.dst = 1; break; case KEY_DIRECTION: mask_rcv.direction = 1; break; case KEY_GPS: gps = new_tuple->value->int16; if (gps){ text_layer_set_text(layer_gps_str, "GPS Tracking"); } else { text_layer_set_text(layer_gps_str, "NO GPS"); } break; case KEY_STATION_STR: //APP_LOG(APP_LOG_LEVEL_DEBUG, "RCVD: station name:"); text_layer_set_text(layer_station_str, new_tuple->value->cstring); mask_rcv.stopstr= 1; break; default: break; } //APP_LOG(APP_LOG_LEVEL_DEBUG, "mask_rcv.mask:%X", mask_rcv.mask); if (mask_rcv.mask == MASK_TUPLE_RDY){ vibes_short_pulse(); mask_rcv.mask = MASK_TUPLE_RST; busy = 0; } }