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