1 /* This is a small demo of the high-performance GUIX graphics framework. */
2 
3 #include <stdio.h>
4 #include "gx_api.h"
5 
6 #include "guix_medical_mouse_support_resources.h"
7 #include "guix_medical_mouse_support_specifications.h"
8 
9 GX_WINDOW_ROOT    *root;
10 GX_MOUSE_CURSOR_INFO mouse_cursor;
11 
12 #define TIME_DATE_TIMER  100
13 
14 const GX_CHAR *day_names[7] = {
15     "Sunday",
16     "Monday",
17     "Tuesday",
18     "Wednesday",
19     "Thursday",
20     "Friday",
21     "Saturday"
22 };
23 
24 const GX_CHAR *month_names[12] = {
25     "Jan",
26     "Feb",
27     "Mar",
28     "Apr",
29     "May",
30     "Jun",
31     "Jul",
32     "Aug",
33     "Sep",
34     "Oct",
35     "Nov",
36     "Dec"
37 };
38 
39 /* Define prototypes.   */
40 
41 VOID  start_guix(VOID);
42 extern UINT win32_graphics_driver_setup_24xrgb(GX_DISPLAY *display);
43 VOID patient_list_children_create(PATIENTS_SCREEN_CONTROL_BLOCK *win);
44 
main(int argc,char ** argv)45 int main(int argc, char ** argv)
46 {
47   tx_kernel_enter();
48   return(0);
49 }
50 
51 
tx_application_define(void * first_unused_memory)52 VOID tx_application_define(void *first_unused_memory)
53 {
54     start_guix();
55 }
56 
start_guix(VOID)57 VOID  start_guix(VOID)
58 {
59     GX_CANVAS *canvas;
60 
61     GX_DISPLAY *display;
62 
63     /* Initialize GUIX.  */
64     gx_system_initialize();
65 
66     gx_studio_display_configure(MAIN_DISPLAY, win32_graphics_driver_setup_24xrgb,
67                                 LANGUAGE_ENGLISH, MAIN_DISPLAY_DEFAULT_THEME, &root);
68 
69     display = root->gx_window_root_canvas->gx_canvas_display;
70 
71     /* create the patients screen */
72     gx_studio_named_widget_create("patients_screen", (GX_WIDGET *)root, GX_NULL);
73     patient_list_children_create(&patients_screen);
74 
75     /* create the vitals screen */
76     gx_studio_named_widget_create("vitals_screen", GX_NULL, GX_NULL);
77 
78     /* create the meds screen */
79     gx_studio_named_widget_create("meds_screen", GX_NULL, GX_NULL);
80 
81 
82     canvas = root->gx_window_root_canvas;
83     mouse_cursor.gx_mouse_cursor_image_id = GX_PIXELMAP_ID_MOUSE;
84     mouse_cursor.gx_mouse_cursor_hotspot_x = 0;
85     mouse_cursor.gx_mouse_cursor_hotspot_y = 0;
86 
87     gx_canvas_mouse_define(canvas, &mouse_cursor);
88     gx_canvas_mouse_show(canvas);
89 
90     /* Show the root window to make it and patients screen visible.  */
91     gx_widget_show(root);
92 
93     /* start GUIX thread */
94     gx_system_start();
95 }
96 
ToggleScreen(GX_WIDGET * new_win,GX_WIDGET * old_win)97 void ToggleScreen(GX_WIDGET *new_win, GX_WIDGET *old_win)
98 {
99     if (!new_win->gx_widget_parent)
100     {
101         gx_widget_attach(root, new_win);
102     }
103     else
104     {
105         gx_widget_show(new_win);
106     }
107     gx_widget_hide(old_win);
108 }
109 
UpdateTimeDate(MED_SCREEN_BASE_CONTROL_BLOCK * window)110 VOID UpdateTimeDate(MED_SCREEN_BASE_CONTROL_BLOCK *window)
111 {
112 #ifdef WIN32
113 static GX_CHAR time_string[6];
114 static GX_CHAR am_pm[3];
115 static GX_CHAR date_string[20];
116 
117 SYSTEMTIME local_time;
118     GetLocalTime(&local_time);
119     if (local_time.wHour < 12)
120     {
121         sprintf(time_string, "%d:%02d", local_time.wHour, local_time.wMinute);
122         GX_STRCPY(am_pm, "AM");
123     }
124     else
125     {
126         sprintf(time_string, "%d:%02d", local_time.wHour - 12, local_time.wMinute);
127         GX_STRCPY(am_pm, "PM");
128     }
129     gx_prompt_text_set(&window->med_screen_base_time_of_day, time_string);
130     gx_prompt_text_set(&window->med_screen_base_AM_PM, am_pm);
131     gx_prompt_text_set(&window->med_screen_base_day_prompt, day_names[local_time.wDayOfWeek]);
132 
133     sprintf(date_string, "%s %02d, %d", month_names[local_time.wMonth - 1], local_time.wDay, local_time.wYear);
134     gx_prompt_text_set(&window->med_screen_base_date_prompt, date_string);
135 
136 #else
137 #endif
138 }
139 
med_screen_base_event_handler(GX_WINDOW * window,GX_EVENT * myevent)140 UINT med_screen_base_event_handler(GX_WINDOW *window, GX_EVENT *myevent)
141 {
142     switch (myevent->gx_event_type)
143     {
144     case GX_EVENT_SHOW:
145         gx_window_event_process(window, myevent);
146         UpdateTimeDate((MED_SCREEN_BASE_CONTROL_BLOCK *) window);
147         gx_system_timer_start(window, TIME_DATE_TIMER, GX_TICKS_SECOND * 60, GX_TICKS_SECOND * 30);
148         break;
149 
150     case GX_EVENT_TIMER:
151         UpdateTimeDate((MED_SCREEN_BASE_CONTROL_BLOCK *) window);
152         break;
153 
154     default:
155         return gx_window_event_process(window, myevent);
156     }
157     return 0;
158 }
159 
160 /* Define prototypes.   */
page_button_draw(GX_PIXELMAP_BUTTON * widget)161 VOID page_button_draw(GX_PIXELMAP_BUTTON *widget)
162 {
163     GX_PIXELMAP *bkgnd;
164     GX_PIXELMAP *icon;
165 
166     GX_CHAR *text;
167     GX_FONT *font;
168     INT width;
169     GX_VALUE string_width;
170     INT xpos;
171     INT ypos;
172     INT top;
173     INT left;
174     INT parent_id = 0;
175     GX_BOOL draw_selected = GX_FALSE;
176 
177     left = widget->gx_widget_size.gx_rectangle_left;
178     top = widget->gx_widget_size.gx_rectangle_top;
179 
180     if (widget->gx_widget_style & GX_STYLE_BUTTON_PUSHED)
181     {
182         draw_selected = GX_TRUE;
183         top += 2;
184     }
185     if (widget->gx_widget_parent)
186     {
187         parent_id = widget->gx_widget_parent->gx_widget_id;
188     }
189 
190     switch(widget->gx_widget_id)
191     {
192     case ID_PATIENTS_BUTTON:
193         gx_widget_pixelmap_get(widget, GX_PIXELMAP_ID_ICON_PATIENTS, &icon);
194         text = "Patient List";
195 
196         if (parent_id == ID_PATIENTS_SCREEN)
197         {
198             draw_selected = GX_TRUE;
199         }
200         break;
201 
202     case ID_MEDS_BUTTON:
203         gx_widget_pixelmap_get(widget, GX_PIXELMAP_ID_ICON_MEDICATIONS, &icon);
204         text = "Medications";
205 
206         if (parent_id == ID_MEDS_SCREEN)
207         {
208             draw_selected = GX_TRUE;
209         }
210         break;
211 
212     case ID_VITALS_BUTTON:
213         gx_widget_pixelmap_get(widget, GX_PIXELMAP_ID_ICON_VITALS, &icon);
214         text = "Vitals";
215 
216         if (parent_id == ID_VITALS_SCREEN)
217         {
218             draw_selected = GX_TRUE;
219         }
220         break;
221     }
222 
223     if (draw_selected)
224     {
225         gx_widget_pixelmap_get(widget, GX_PIXELMAP_ID_BUTTON_ACTIVE, &bkgnd);
226         gx_context_fill_color_set(GX_COLOR_ID_WHITE);
227         gx_context_line_color_set(GX_COLOR_ID_WHITE);
228     }
229     else
230     {
231         gx_widget_pixelmap_get(widget, GX_PIXELMAP_ID_BUTTON, &bkgnd);
232         gx_context_fill_color_set(GX_COLOR_ID_LIGHT_GRAY);
233         gx_context_line_color_set(GX_COLOR_ID_LIGHT_GRAY);
234     }
235 
236     gx_canvas_pixelmap_draw(left, top, bkgnd);
237     gx_widget_font_get(widget, GX_FONT_ID_SMALL_BOLD, &font);
238     gx_system_string_width_get(font, text, -1, &string_width);
239 
240     // draw the icon
241     width = icon->gx_pixelmap_width + string_width + 10;
242     xpos = widget->gx_widget_size.gx_rectangle_right - widget->gx_widget_size.gx_rectangle_left + 1;
243     xpos -= width;
244     xpos = left + (xpos / 2);
245 
246     ypos = widget->gx_widget_size.gx_rectangle_bottom - widget->gx_widget_size.gx_rectangle_top + 1;
247     ypos -= icon->gx_pixelmap_height;
248     ypos = top + (ypos / 2);
249 
250     gx_canvas_pixelmap_draw(xpos, ypos, icon);
251 
252     // draw the text
253     xpos += icon->gx_pixelmap_width + 10;
254 
255     ypos = widget->gx_widget_size.gx_rectangle_bottom - widget->gx_widget_size.gx_rectangle_top + 1;
256     ypos -= font->gx_font_line_height;
257     ypos = top + (ypos / 2);
258     gx_context_font_set(GX_FONT_ID_SMALL_BOLD);
259     gx_canvas_text_draw(xpos, ypos, text, -1);
260 }