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 }