1
2 #include "gx_api.h"
3
4 #define ID_NUMBER_TIMER 1
5
6 GX_WINDOW demo_window_a;
7 GX_WINDOW demo_window_b;
8 GX_WINDOW demo_window_c;
9 GX_WINDOW demo_window_d;
10 GX_WINDOW window_a_frame;
11 GX_PROMPT demo_prompt;
12 GX_PIXELMAP_PROMPT demo_number;
13 GX_TEXT_BUTTON demo_stop_button;
14 GX_TEXT_BUTTON demo_go_button;
15 GX_SINGLE_LINE_TEXT_INPUT text_input_ptr;
16 GX_SLIDER demo_slider;
17 GX_ICON demo_icon;
18 GX_SCROLLBAR win_a_vertical_scrollbar;
19 GX_SCROLLBAR win_a_horizontal_scrollbar;
20
21 GX_CHECKBOX checkbox1;
22 GX_RADIO_BUTTON radio1;
23 GX_RADIO_BUTTON radio2;
24
25 GX_BOOL flag = TRUE;
26
27 static void my_timer_entry(ULONG);
28
29 #define WIN_A_COLOR 0x800000
30 #define WIN_B_COLOR 0x008000
31 #define WIN_C_COLOR 0x000080
32
33 TX_TIMER number_timer;
34
35 INT NumVal = 0;
36 char numbuf[12];
37
38 /* Define GUIX strings and string IDs for this demo. */
39
40 enum demo_string_ids
41 {
42 SID_HELLO = 1,
43 SID_ANOTHER,
44 SID_STOP,
45 SID_GO,
46 SID_MOVABLE,
47 SID_BLUE_WIN,
48 SID_RED_WIN,
49 STRING_TABLE_MAX
50 };
51
52 char *demo_strings[] = {
53 NULL,
54 "Hello GUIX",
55 "Another example string",
56 "Stop",
57 "Go",
58 "movable",
59 "Blue Window",
60 "Red Window"
61 };
62
63 extern GX_PIXELMAP cal_poppy_200_png_24xrgb_ca_pixelmap;
64 extern GX_PIXELMAP cal_poppy_320_png_24xrgb_ca_pixelmap;
65 extern GX_PIXELMAP Frog8_200_png_24xrgb_ca_pixelmap;
66 extern GX_PIXELMAP tfield_fill_small_png_24xrgb_ca_pixelmap;
67 extern GX_PIXELMAP tfield_left_small_png_24xrgb_ca_pixelmap;
68 extern GX_PIXELMAP tfield_right_small_png_24xrgb_ca_pixelmap;
69 extern GX_PIXELMAP threadx_png_24xrgb_ca_pixelmap;
70
71 extern GX_PIXELMAP radiobutton_on_pixelmap;
72 extern GX_PIXELMAP radiobutton_off_pixelmap;
73 extern GX_PIXELMAP checkbox_on_pixelmap;
74 extern GX_PIXELMAP checkbox_off_pixelmap;
75
76 GX_PIXELMAP *demo_pixelmap_table[] = {
77 NULL,
78 &radiobutton_on_pixelmap,
79 &radiobutton_off_pixelmap,
80 &checkbox_on_pixelmap,
81 &checkbox_off_pixelmap,
82 &cal_poppy_200_png_24xrgb_ca_pixelmap,
83 &tfield_fill_small_png_24xrgb_ca_pixelmap,
84 &tfield_left_small_png_24xrgb_ca_pixelmap,
85 &tfield_right_small_png_24xrgb_ca_pixelmap,
86 &threadx_png_24xrgb_ca_pixelmap
87 };
88
89 enum demo_pixelmaps {
90
91 BID_WALLPAPER = GX_FIRST_USER_PIXELMAP,
92 BID_PROMPT_FILL,
93 BID_PROMPT_LEFT,
94 BID_PROMPT_RIGHT,
95 BID_THREADX,
96 NUMBER_OF_PIXELMAPS
97 };
98
99 /* widget id values used by this demo */
100 enum demo_widget_ids {
101 BID_GO = 1, /* the GO button */
102 BID_STOP, /* the STOP button */
103 BID_MOVABLE,
104 BID_BLUE_WIN,
105 BID_RED_WIN,
106 ID_SLIDER,
107 ID_WINDOW_A,
108 ID_WINDOW_B,
109 ID_WINDOW_C,
110 ID_WINDOW_D,
111 ID_WINDOW_A_FRAME
112 };
113
114 /* application specific events used by this demo */
115 enum demo_events {
116 DEMO_EVENT_START_COUNTER = GX_FIRST_APP_EVENT, /* event sent to start numeric counter */
117 DEMO_EVENT_STOP_COUNTER /* event sent to stop numeric counter */
118 };
119
120 /* Define prototypes. */
121
122 UINT demo_win_a_event_handler(GX_WIDGET *me, GX_EVENT *myevent);
123 UINT demo_window_b_event_handler(GX_WIDGET *me, GX_EVENT *myevent);
124 UINT window_d_event_handler(GX_WIDGET *widget, GX_EVENT *myevent);
125
126 VOID demo_window_c_draw(GX_WIDGET *me);
127 VOID demo_window_a_draw(GX_WIDGET *me);
128
129 extern GX_WINDOW_ROOT *_gx_system_root_window_created_list;
130 static GX_SLIDER_INFO slider_info;
131
dummy_app_create(void)132 void dummy_app_create(void)
133 {
134 GX_RECTANGLE size;
135 GX_RECTANGLE child_size;
136 GX_WINDOW_ROOT *root;
137
138 root = _gx_system_root_window_created_list;
139
140 /* Install the demo string table. */
141 gx_system_string_table_set(demo_strings, STRING_TABLE_MAX);
142
143 /* Install the demo bitmap table. */
144 gx_system_pixelmap_table_set(demo_pixelmap_table, NUMBER_OF_PIXELMAPS);
145
146 /* Create a window frame that will do scrolling */
147 gx_utility_rectangle_define(&size, 0, 0, 199, 199);
148 gx_utility_rectangle_center(&size, &root -> gx_widget_size);
149 gx_window_create(&window_a_frame, NULL, root, GX_STYLE_BORDER_THIN, ID_WINDOW_A_FRAME, &size);
150
151 /* add a vertical scrollbar to the window */
152 gx_vertical_scrollbar_create(&win_a_vertical_scrollbar, NULL, &window_a_frame, GX_NULL);
153
154 /* add a horizontal scrollbar to the window */
155 gx_horizontal_scrollbar_create(&win_a_horizontal_scrollbar, NULL, &window_a_frame, GX_NULL);
156
157 /* Create a window that contains a few buttons */
158 child_size = size;
159 child_size.gx_rectangle_bottom += 200;
160 child_size.gx_rectangle_right += 200;
161
162 gx_window_create(&demo_window_a, "window a", &window_a_frame, GX_STYLE_BORDER_THIN, ID_WINDOW_A, &child_size);
163 // gx_widget_fill_color_set(&demo_window_a, GX_CID_BLUE);
164 gx_window_wallpaper_set(&demo_window_a, BID_WALLPAPER, TRUE);
165 //gx_widget_status_remove(&demo_window_a, GX_STATUS_MOVABLE);
166
167 /* provide an event handler for the button window */
168 gx_widget_event_process_set(&demo_window_a, demo_win_a_event_handler);
169 gx_widget_draw_set(&demo_window_a, demo_window_a_draw);
170
171 /* create the slider */
172 gx_utility_rectangle_define(&child_size, 0, 0, 99, 34);
173 gx_utility_rectangle_center(&child_size, &demo_window_a.gx_widget_size);
174
175 gx_utility_rectangle_shift(&child_size, 0, -68);
176
177 memset(&slider_info, 0, sizeof(slider_info));
178 slider_info.min_val = 64;
179 slider_info.max_val = 255;
180 slider_info.min_travel = 10;
181 slider_info.max_travel = 10;
182 slider_info.needle_height = 20;
183 slider_info.needle_inset = 6;
184 slider_info.increment = 5;
185
186 gx_slider_create(&demo_slider, NULL, &demo_window_a,
187 GX_STYLE_BORDER_THIN | GX_STYLE_SHOW_NEEDLE | GX_STYLE_SHOW_TICKMARKS,
188 ID_SLIDER, &child_size, 10, &slider_info);
189
190 /* Create the Stop and Go buttons. */
191
192 gx_utility_rectangle_shift(&child_size, 0, 40);
193 gx_text_button_create(&demo_go_button, "demo go button", &demo_window_a, SID_GO, 0, BID_GO, &child_size);
194
195 gx_utility_rectangle_shift(&child_size, 0, 40);
196 gx_text_button_create(&demo_stop_button, "demo stop button", &demo_window_a, SID_STOP, 0, BID_STOP, &child_size);
197
198 gx_utility_rectangle_shift(&child_size, 0, 40);
199 child_size.gx_rectangle_left = (199 - threadx_png_24xrgb_ca_pixelmap.gx_pixelmap_width) / 2;
200 child_size.gx_rectangle_left += demo_window_a.gx_widget_size.gx_rectangle_left;
201 gx_icon_create(&demo_icon, NULL, &demo_window_a, BID_THREADX, BID_THREADX, 0, child_size.gx_rectangle_left, child_size.gx_rectangle_top);
202
203 /* default to 50% alpha value for slider */
204 gx_slider_value_set(&demo_slider, 128);
205
206 /* Create Window B on background canvas */
207 gx_utility_rectangle_shift(&size, -210, -60);
208 //gx_window_create(&demo_window_b, "demo win b", &demo_root_window, GX_STYLE_BORDER_THIN, ID_WINDOW_B, &size);
209 gx_window_create(&demo_window_b, "demo win b", root, GX_STYLE_BORDER_NONE, ID_WINDOW_B, &size);
210 gx_widget_event_process_set(&demo_window_b, demo_window_b_event_handler);
211 gx_widget_status_add(&demo_window_b, GX_STATUS_MOVABLE);
212
213 /* assign a wallpaper to counter Window */
214 gx_window_wallpaper_set(&demo_window_b, BID_WALLPAPER, TRUE);
215
216 /* Create a prompt on demo counter Window */
217 gx_utility_rectangle_define(&child_size, 0, 0, 179, 32);
218 gx_utility_rectangle_center(&child_size, &demo_window_b.gx_widget_size);
219 gx_prompt_create(&demo_prompt, "demo prompt", &demo_window_b, SID_HELLO,
220 GX_STYLE_BORDER_THIN | GX_STYLE_TEXT_CENTER, 0, &child_size);
221
222 /* Create a bitmap-prompt on demo counter window */
223 gx_utility_rectangle_shift(&child_size, 0, 50);
224 child_size.gx_rectangle_bottom = child_size.gx_rectangle_top + tfield_fill_small_png_24xrgb_ca_pixelmap.gx_pixelmap_height - 1;
225 gx_pixelmap_prompt_create(&demo_number, "demo number", &demo_window_b, 0,
226 BID_PROMPT_LEFT, BID_PROMPT_FILL, BID_PROMPT_RIGHT,
227 GX_STYLE_BORDER_THIN | GX_STYLE_TEXT_RIGHT, 0, &child_size);
228 gx_widget_fill_color_set(&demo_number, GX_CID_WHITE, GX_CID_WHITE);
229
230 /* Create demo draw Window C */
231 gx_utility_rectangle_shift(&size, 420, 120);
232 gx_window_create(&demo_window_c, "demo window c", root, GX_STYLE_BORDER_NONE, ID_WINDOW_C, &size);
233 gx_widget_draw_set(&demo_window_c, demo_window_c_draw);
234 gx_widget_status_add(&demo_window_c, GX_STATUS_MOVABLE);
235
236 /* KGM this is broken, remove for now.
237 gx_utility_rectangle_define(&size, 300, 50, 420, 80);
238 gx_single_line_text_input_create(&text_input_ptr, "text input", &demo_root_window, size, 1,
239 "zero one TWO Three for five",27, GX_ECHO, GX_SOLID_LINE, GX_VERTICAL_BLINKING_CURSOR, 0, 0);
240 */
241 /* create demo window d */
242 gx_utility_rectangle_define(&size, 10, 300, 209, 499);
243 gx_window_create(&demo_window_d, "demo window d", root, GX_STYLE_BORDER_NONE, ID_WINDOW_D, &size);
244 gx_widget_event_process_set(&demo_window_d, window_d_event_handler);
245 gx_widget_fill_color_set(&demo_window_d, GX_CID_BLUE, GX_CID_BLUE);
246
247 size.gx_rectangle_top += 10;
248 size.gx_rectangle_left += 10;
249 size.gx_rectangle_right -= 10;
250 size.gx_rectangle_bottom = size.gx_rectangle_top + 20;
251
252 gx_checkbox_create(&checkbox1, "checkbox1", &demo_window_d, SID_MOVABLE,
253 GX_STYLE_TEXT_LEFT | GX_STYLE_ENABLED | GX_STYLE_TRANSPARENT,
254 BID_MOVABLE, &size);
255
256 gx_text_button_color_set(&checkbox1, GX_CID_WHITE, GX_CID_WHITE);
257
258 gx_utility_rectangle_shift(&size, 0, 30);
259 gx_radio_button_create(&radio1, "blue window", &demo_window_d, SID_BLUE_WIN,
260 GX_STYLE_TEXT_LEFT | GX_STYLE_ENABLED | GX_STYLE_BUTTON_PUSHED | GX_STYLE_TRANSPARENT,
261 BID_BLUE_WIN, &size);
262 gx_text_button_color_set(&radio1, GX_CID_WHITE, GX_CID_WHITE);
263
264 gx_utility_rectangle_shift(&size, 0, 30);
265 gx_radio_button_create(&radio2, "red window", &demo_window_d, SID_RED_WIN,
266 GX_STYLE_TEXT_LEFT | GX_STYLE_ENABLED | GX_STYLE_TRANSPARENT,
267 BID_RED_WIN, &size);
268 gx_text_button_color_set(&radio2, GX_CID_WHITE, GX_CID_WHITE);
269
270 /* put overlay a in front */
271 gx_widget_front_move(&window_a_frame, NULL);
272
273 /* Show the root window. */
274 _gx_widget_show((GX_WIDGET *) root);
275 }
276
277
window_d_event_handler(GX_WIDGET * widget,GX_EVENT * myevent)278 UINT window_d_event_handler(GX_WIDGET *widget, GX_EVENT *myevent)
279 {
280 switch(myevent ->gx_event_type)
281 {
282 case GX_SIGNAL(BID_MOVABLE, GX_EVENT_TOGGLE_ON):
283 gx_widget_status_add(&demo_window_d, GX_STATUS_MOVABLE);
284 break;
285
286 case GX_SIGNAL(BID_MOVABLE, GX_EVENT_TOGGLE_OFF):
287 gx_widget_status_remove(&demo_window_d, GX_STATUS_MOVABLE);
288 break;
289
290 case GX_SIGNAL(BID_BLUE_WIN, GX_EVENT_RADIO_SELECT):
291 gx_widget_fill_color_set(widget, GX_CID_BLUE, GX_CID_BLUE);
292 break;
293
294 case GX_SIGNAL(BID_RED_WIN, GX_EVENT_RADIO_SELECT):
295 gx_widget_fill_color_set(widget, GX_CID_RED, GX_CID_RED);
296 break;
297
298 default:
299 return gx_window_event_process(widget, myevent);
300 }
301 return 0;
302 }
303
demo_win_a_event_handler(GX_WIDGET * widget,GX_EVENT * myevent)304 UINT demo_win_a_event_handler(GX_WIDGET *widget, GX_EVENT *myevent)
305 {
306 GX_EVENT newevent;
307 UINT status = 0;
308
309 switch(myevent -> gx_event_type)
310 {
311 case GX_EVENT_SLIDER_VALUE:
312 break;
313
314 case GX_SIGNAL(BID_GO, GX_EVENT_CLICKED):
315 newevent.gx_event_sender = ID_WINDOW_A;
316 newevent.gx_event_target = ID_WINDOW_B;
317 newevent.gx_event_type = DEMO_EVENT_START_COUNTER;
318 gx_system_event_send(&newevent);
319 break;
320
321 case GX_SIGNAL(BID_STOP, GX_EVENT_CLICKED):
322 newevent.gx_event_sender = ID_WINDOW_A;
323 newevent.gx_event_target = ID_WINDOW_B;
324 newevent.gx_event_type = DEMO_EVENT_STOP_COUNTER;
325 gx_system_event_send(&newevent);
326 break;
327
328 default:
329 status = gx_window_event_process(widget, myevent);
330 break;
331 }
332 return status;
333 }
334
counter_update(VOID)335 VOID counter_update(VOID)
336 {
337 /* change the displayed number */
338 NumVal++;
339 gx_utility_ltoa(NumVal, numbuf, 10);
340 gx_prompt_text_set(&demo_number, numbuf);
341 }
342
demo_window_b_event_handler(GX_WIDGET * widget,GX_EVENT * myevent)343 UINT demo_window_b_event_handler(GX_WIDGET *widget, GX_EVENT *myevent)
344 {
345 UINT status = 0;
346
347 switch(myevent->gx_event_type)
348 {
349 case GX_EVENT_SHOW:
350 gx_widget_event_process(widget, myevent);
351 counter_update();
352 return GX_SUCCESS;
353
354 case GX_EVENT_HIDE:
355 gx_widget_event_process(widget, myevent);
356 gx_system_timer_stop(widget, 0);
357 return GX_SUCCESS;
358
359 case GX_EVENT_TIMER:
360 if (myevent->gx_event_payload.gx_event_timer_id == ID_NUMBER_TIMER)
361 {
362 counter_update();
363 }
364 break;
365
366 case DEMO_EVENT_START_COUNTER:
367 gx_system_timer_start(widget, ID_NUMBER_TIMER, 1, 1);
368 break;
369
370 case DEMO_EVENT_STOP_COUNTER:
371 gx_system_timer_stop(widget, 0);
372 break;
373
374 default:
375 status = gx_window_event_process(widget, myevent);
376 break;
377 }
378 return status;
379 }
380
demo_text_input_event_handler(GX_WIDGET * widget,GX_EVENT * myevent)381 UINT demo_text_input_event_handler(GX_WIDGET *widget, GX_EVENT *myevent)
382 {
383 UINT status = 0;
384
385 return status;
386 }
387
demo_window_a_draw(GX_WIDGET * widget)388 VOID demo_window_a_draw(GX_WIDGET *widget)
389 {
390 GX_WINDOW *win = (GX_WINDOW *) widget;
391
392 gx_window_draw(widget);
393 gx_context_brush_define(GX_CID_WHITE, GX_CID_WHITE, 0);
394 gx_context_brush_width_set(1);
395 gx_screen_rectangle_draw(&win ->gx_window_client);
396 }
397
demo_window_c_draw(GX_WIDGET * widget)398 VOID demo_window_c_draw(GX_WIDGET *widget)
399 {
400 INT xpos;
401 INT ypos;
402
403 /* do normal background drawing first. */
404 gx_window_draw(widget);
405 gx_context_brush_define(GX_CID_WHITE, GX_CID_WHITE, GX_BRUSH_ALIAS);
406 gx_context_brush_width_set(1);
407
408
409 //gx_screen_line_draw(widget ->gx_widget_size.gx_rectangle_left + 10, widget ->gx_widget_size.gx_rectangle_top + 10,
410 // widget ->gx_widget_size.gx_rectangle_left + 20, widget ->gx_widget_size.gx_rectangle_top + 20);
411 for (xpos = widget ->gx_widget_size.gx_rectangle_left + 10,
412 ypos = widget ->gx_widget_size.gx_rectangle_top + 10;
413 xpos <= widget ->gx_widget_size.gx_rectangle_right - 10,
414 ypos <= widget ->gx_widget_size.gx_rectangle_bottom - 10;
415 xpos += 10, ypos += 10)
416 {
417 /* Draw line from top-middle to lower-right. */
418 gx_screen_line_draw(xpos, widget ->gx_widget_size.gx_rectangle_top + 10,
419 widget ->gx_widget_size.gx_rectangle_right - 10, ypos);
420 }
421
422 gx_context_line_color_set(GX_CID_RED);
423
424 for (ypos = widget ->gx_widget_size.gx_rectangle_top + 10,
425 xpos = widget ->gx_widget_size.gx_rectangle_left + 10;
426 ypos <= widget ->gx_widget_size.gx_rectangle_bottom - 10,
427 xpos <= widget ->gx_widget_size.gx_rectangle_right - 10;
428 xpos += 10, ypos += 10)
429 {
430 /* Draw line from top-middle to lower-right. */
431 gx_screen_line_draw(widget ->gx_widget_size.gx_rectangle_left + 10, ypos,
432 xpos, widget ->gx_widget_size.gx_rectangle_bottom - 10);
433 }
434 }
435
436
437