1 /* This is a demo of the high-performance GUIX graphics framework. */
2
3 #include <stdio.h>
4 #include "gx_api.h"
5 #include "guix_widget_types_resources.h"
6 #include "guix_widget_types_specifications.h"
7
8 extern SCROLL_WHEEL_SCREEN_CONTROL_BLOCK Scroll_Wheel_Screen;
9
10 VOID animation_speed_set();
11 VOID day_count_update();
12 extern UINT string_length_get(GX_CONST GX_CHAR* input_string, UINT max_string_length);
13
14 /******************************************************************************************/
15 /* Override default event processing of "Scroll_Wheel_Screen" to handle signals from my */
16 /* child widgets. */
17 /******************************************************************************************/
scroll_wheel_screen_event_process(GX_WINDOW * window,GX_EVENT * event_ptr)18 UINT scroll_wheel_screen_event_process(GX_WINDOW *window, GX_EVENT *event_ptr)
19 {
20 switch (event_ptr->gx_event_type)
21 {
22 case GX_EVENT_SHOW:
23 gx_window_event_process(window, event_ptr);
24 animation_speed_set();
25 break;
26 case GX_SIGNAL(ID_SCROLL_WHEEL_MONTH, GX_EVENT_LIST_SELECT):
27 case GX_SIGNAL(ID_SCROLL_WHEEL_YEAR, GX_EVENT_LIST_SELECT):
28 day_count_update();
29 break;
30
31 default:
32 return gx_window_event_process(window, event_ptr);
33 }
34
35 return 0;
36 }
37
38 /******************************************************************************************/
39 /* Row value format callback of day wheel. */
40 /******************************************************************************************/
day_wheel_value_format(GX_NUMERIC_SCROLL_WHEEL * wheel,INT row,GX_STRING * string)41 UINT day_wheel_value_format(GX_NUMERIC_SCROLL_WHEEL *wheel, INT row, GX_STRING *string)
42 {
43 sprintf(wheel->gx_numeric_scroll_wheel_string_buffer, "%02d", row + 1);
44
45 string->gx_string_ptr = wheel->gx_numeric_scroll_wheel_string_buffer;
46 string->gx_string_length = string_length_get(string->gx_string_ptr, GX_NUMERIC_SCROLL_WHEEL_STRING_BUFFER_SIZE - 1);
47
48 return GX_SUCCESS;
49 }
50
51 /******************************************************************************************/
52 /* Set scroll wheel animation speed. */
53 /******************************************************************************************/
animation_speed_set()54 VOID animation_speed_set()
55 {
56 GX_NUMERIC_SCROLL_WHEEL *day_wheel = &Scroll_Wheel_Screen.Scroll_Wheel_Screen_scroll_wheel_day;
57 GX_NUMERIC_SCROLL_WHEEL *year_wheel = &Scroll_Wheel_Screen.Scroll_Wheel_Screen_scroll_wheel_year;
58 GX_STRING_SCROLL_WHEEL *month_wheel = &Scroll_Wheel_Screen.Scroll_Wheel_Screen_scroll_wheel_month;
59
60 gx_scroll_wheel_speed_set(day_wheel, GX_FIXED_VAL_MAKE(1), 200, 10, 2);
61 gx_scroll_wheel_speed_set(month_wheel, 512, 200, 10, 2);
62 gx_scroll_wheel_speed_set(year_wheel, GX_FIXED_VAL_MAKE(2), 200, 10, 2);
63 }
64
65 /******************************************************************************************/
66 /* Update day range. */
67 /******************************************************************************************/
day_count_update()68 VOID day_count_update()
69 {
70 int year;
71 int month;
72 int day_count;
73 int new_day_count;
74
75 GX_NUMERIC_SCROLL_WHEEL *day_wheel = &Scroll_Wheel_Screen.Scroll_Wheel_Screen_scroll_wheel_day;
76 GX_NUMERIC_SCROLL_WHEEL *year_wheel = &Scroll_Wheel_Screen.Scroll_Wheel_Screen_scroll_wheel_year;
77 GX_STRING_SCROLL_WHEEL *month_wheel = &Scroll_Wheel_Screen.Scroll_Wheel_Screen_scroll_wheel_month;
78
79 year = year_wheel->gx_numeric_scroll_wheel_start_val;
80 year += year_wheel->gx_scroll_wheel_selected_row;
81
82 month = month_wheel->gx_scroll_wheel_selected_row + 1;
83 day_count = GX_ABS(day_wheel->gx_numeric_scroll_wheel_end_val - day_wheel->gx_numeric_scroll_wheel_start_val) + 1;
84
85 switch (month)
86 {
87 case 1:
88 case 3:
89 case 5:
90 case 7:
91 case 8:
92 case 10:
93 case 12:
94 new_day_count = 31;
95 break;
96
97 case 2:
98 if ((!(year % 400)) ||
99 (!(year % 4) && (year % 400)))
100 {
101 new_day_count = 29;
102 }
103 else
104 {
105 new_day_count = 28;
106 }
107 break;
108
109 default:
110 new_day_count = 30;
111 break;
112 }
113
114 if (new_day_count != day_count)
115 {
116 gx_numeric_scroll_wheel_range_set(day_wheel, 1, new_day_count);
117 }
118 }
119