示例#1
0
/**
 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;
}
示例#3
0
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;
  }
}