1 /* This is a small demo of the high-performance GUIX graphics framework. */
2
3 #include <stdio.h>
4 #include "tx_api.h"
5 #include "gx_api.h"
6 #include "all_widgets_5_3_4_resources.h"
7 #include "all_widgets_5_3_4_specifications.h"
8
9 #define ID_SCROLL_WHEEL_DAY 0xf0
10 #define ID_SCROLL_WHEEL_MONTH 0xf1
11 #define ID_SCROLL_WHEEL_YEAR 0xf2
12
13 extern GX_WINDOW *pScrollWheelScreen;
14 extern GX_BOOL day_wheel_selected_row_changed;
15 extern GX_BOOL month_wheel_selected_row_changed;
16
17 VOID day_count_update();
18 VOID animation_speed_set();
19
20 /* Define day wheel callback function. */
day_wheel_value_format(GX_NUMERIC_SCROLL_WHEEL * wheel,INT row)21 GX_CONST GX_CHAR *day_wheel_value_format(GX_NUMERIC_SCROLL_WHEEL *wheel, INT row)
22 {
23 sprintf(wheel->gx_numeric_scroll_wheel_string_buffer, "%02d", row + 1);
24 return wheel->gx_numeric_scroll_wheel_string_buffer;
25 }
26
string_to_int(const char * string)27 int string_to_int(const char *string)
28 {
29 int value = 0;
30
31 while (string[0])
32 {
33 value = value * 10 + string[0] - '0';
34 string++;
35 }
36
37 return value;
38 }
39
select_day()40 VOID select_day()
41 {
42 int selected_day;
43 GX_SINGLE_LINE_TEXT_INPUT *input;
44 GX_NUMERIC_SCROLL_WHEEL *day_wheel;
45
46 gx_widget_find(pScrollWheelScreen, ID_DAY_WHEEL, GX_SEARCH_DEPTH_INFINITE, &day_wheel);
47
48 gx_widget_find(pScrollWheelScreen, ID_DAY_INPUT, GX_SEARCH_DEPTH_INFINITE, &input);
49
50 if (input && day_wheel)
51 {
52 selected_day = string_to_int(input->gx_single_line_text_input_buffer);
53 gx_scroll_wheel_selected_set(day_wheel, selected_day - 1);
54 }
55 }
56
57 /* Override default event processing of scroll wheel screen. */
scroll_wheel_screen_event_handler(GX_WINDOW * window,GX_EVENT * event_ptr)58 UINT scroll_wheel_screen_event_handler(GX_WINDOW *window, GX_EVENT *event_ptr)
59 {
60
61 switch (event_ptr->gx_event_type)
62 {
63 case GX_EVENT_SHOW:
64 gx_window_event_process(window, event_ptr);
65 animation_speed_set();
66 break;
67
68 case GX_SIGNAL(ID_DAY_WHEEL, GX_EVENT_LIST_SELECT):
69 day_wheel_selected_row_changed = GX_TRUE;
70 break;
71
72 case GX_SIGNAL(ID_MONTH_WHEEL, GX_EVENT_LIST_SELECT):
73 month_wheel_selected_row_changed = GX_TRUE;
74 day_count_update();
75 break;
76
77 case GX_SIGNAL(ID_YEAR_WHEEL, GX_EVENT_LIST_SELECT):
78 day_count_update();
79 break;
80
81 case GX_SIGNAL(ID_DAY_SELECT, GX_EVENT_CLICKED):
82 select_day();
83 break;
84
85 default:
86 return next_button_handler(window, event_ptr);
87 }
88
89 return 0;
90 }
91
animation_speed_set()92 VOID animation_speed_set()
93 {
94 GX_NUMERIC_SCROLL_WHEEL *day_wheel;
95 GX_NUMERIC_SCROLL_WHEEL *year_wheel;
96 GX_STRING_SCROLL_WHEEL *month_wheel;
97
98 gx_widget_find(pScrollWheelScreen, ID_DAY_WHEEL, GX_SEARCH_DEPTH_INFINITE, &day_wheel);
99 gx_widget_find(pScrollWheelScreen, ID_YEAR_WHEEL, GX_SEARCH_DEPTH_INFINITE, &year_wheel);
100 gx_widget_find(pScrollWheelScreen, ID_MONTH_WHEEL, GX_SEARCH_DEPTH_INFINITE, &month_wheel);
101
102 gx_scroll_wheel_speed_set(day_wheel, GX_FIXED_VAL_MAKE(1), 100, 10, 2);
103 gx_scroll_wheel_speed_set(month_wheel, (GX_FIXED_VAL_MAKE(1) / 2), 100, 10, 2);
104 gx_scroll_wheel_speed_set(year_wheel, GX_FIXED_VAL_MAKE(2), 100, 10, 2);
105 }
106
day_count_update()107 VOID day_count_update()
108 {
109 int year;
110 int month;
111 int day_count;
112 int new_day_count;
113
114 GX_NUMERIC_SCROLL_WHEEL *day_wheel;
115 GX_NUMERIC_SCROLL_WHEEL *year_wheel;
116 GX_STRING_SCROLL_WHEEL *month_wheel;
117
118 gx_widget_find(pScrollWheelScreen, ID_DAY_WHEEL, GX_SEARCH_DEPTH_INFINITE, &day_wheel);
119 gx_widget_find(pScrollWheelScreen, ID_YEAR_WHEEL, GX_SEARCH_DEPTH_INFINITE, &year_wheel);
120 gx_widget_find(pScrollWheelScreen, ID_MONTH_WHEEL, GX_SEARCH_DEPTH_INFINITE, &month_wheel);
121
122 year = year_wheel->gx_numeric_scroll_wheel_start_val;
123 year += year_wheel->gx_scroll_wheel_selected_row;
124
125 month = month_wheel->gx_scroll_wheel_selected_row + 1;
126 day_count = GX_ABS(day_wheel->gx_numeric_scroll_wheel_end_val - day_wheel->gx_numeric_scroll_wheel_start_val) + 1;
127
128 switch (month)
129 {
130 case 1:
131 case 3:
132 case 5:
133 case 7:
134 case 8:
135 case 10:
136 case 12:
137 new_day_count = 31;
138 break;
139
140 case 2:
141 if ((!(year % 400)) ||
142 (!(year % 4) && (year % 400)))
143 {
144 new_day_count = 29;
145 }
146 else
147 {
148 new_day_count = 28;
149 }
150 break;
151
152 default:
153 new_day_count = 30;
154 break;
155 }
156
157 if (new_day_count != day_count)
158 {
159 gx_numeric_scroll_wheel_range_set(day_wheel, 1, new_day_count);
160 }
161 }
162