1 /* This is a small demo of the high-performance GUIX graphics framework. */ 2 3 #include <stdio.h> 4 #include "gx_api.h" 5 #include "all_widgets_32argb_resources.h" 6 #include "all_widgets_32argb_specifications.h" 7 8 #define ID_SCROLL_WHEEL_DAY 0xf0 9 #define ID_SCROLL_WHEEL_MONTH 0xf1 10 #define ID_SCROLL_WHEEL_YEAR 0xf2 11 12 VOID select_day(); 13 VOID day_count_update(); 14 15 /* Override default event processing of scroll wheel screen. */ scroll_wheel_screen_event_handler(GX_WINDOW * window,GX_EVENT * event_ptr)16UINT scroll_wheel_screen_event_handler(GX_WINDOW *window, GX_EVENT *event_ptr) 17 { 18 switch (event_ptr->gx_event_type) 19 { 20 case GX_SIGNAL(ID_YEAR_WHEEL, GX_EVENT_LIST_SELECT): 21 day_count_update(); 22 break; 23 24 case GX_SIGNAL(ID_DAY_SELECT, GX_EVENT_CLICKED): 25 select_day(); 26 break; 27 28 default: 29 return gx_window_event_process(window, event_ptr); 30 } 31 32 return 0; 33 } 34 string_to_int(const char * string)35int string_to_int(const char* string) 36 { 37 int value = 0; 38 39 while (string[0]) 40 { 41 value = value * 10 + string[0] - '0'; 42 string++; 43 } 44 45 return value; 46 } 47 select_day()48VOID select_day() 49 { 50 int selected_day; 51 GX_SINGLE_LINE_TEXT_INPUT* input = &scroll_wheel_screen.scroll_wheel_screen_text_input; 52 GX_NUMERIC_SCROLL_WHEEL* day_wheel = &scroll_wheel_screen.scroll_wheel_screen_day_wheel; 53 54 selected_day = string_to_int(input->gx_single_line_text_input_buffer); 55 gx_scroll_wheel_selected_set(day_wheel, selected_day - 1); 56 } 57 day_count_update()58VOID day_count_update() 59 { 60 int year; 61 int month; 62 int day_count; 63 int new_day_count; 64 65 GX_NUMERIC_SCROLL_WHEEL *day_wheel = &scroll_wheel_screen.scroll_wheel_screen_day_wheel; 66 GX_NUMERIC_SCROLL_WHEEL *year_wheel = &scroll_wheel_screen.scroll_wheel_screen_year_wheel; 67 GX_STRING_SCROLL_WHEEL *month_wheel = &scroll_wheel_screen.scroll_wheel_screen_month_wheel; 68 69 year = year_wheel->gx_numeric_scroll_wheel_start_val; 70 year += year_wheel->gx_scroll_wheel_selected_row; 71 72 month = month_wheel->gx_scroll_wheel_selected_row + 1; 73 day_count = GX_ABS(day_wheel->gx_numeric_scroll_wheel_end_val - day_wheel->gx_numeric_scroll_wheel_start_val) + 1; 74 75 switch (month) 76 { 77 case 1: 78 case 3: 79 case 5: 80 case 7: 81 case 8: 82 case 10: 83 case 12: 84 new_day_count = 31; 85 break; 86 87 case 2: 88 if ((!(year % 400)) || 89 (!(year % 4) && (year % 400))) 90 { 91 new_day_count = 29; 92 } 93 else 94 { 95 new_day_count = 28; 96 } 97 break; 98 99 default: 100 new_day_count = 30; 101 break; 102 } 103 104 if (new_day_count != day_count) 105 { 106 gx_numeric_scroll_wheel_range_set(day_wheel, 1, new_day_count); 107 } 108 } 109