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 #include "demo_guix_medical_mouse_support.h"
10 
11 
12 VOID patient_prompt_draw(GX_PROMPT *prompt);
13 
14 int selected_patient_index = 0;
15 
16 /* Define constants for patients screen.  */
17 #define MR_NUM_SHIFT                            208
18 #define ROOM_NUM_SHIFT                          128
19 #define ADMIT_DATE_SHIFT                        112
20 #define PATIENT_LIST_VISIBLE_ROWS               9
21 
22 #include "guix_medical_mouse_support_resources.h"
23 #include "guix_medical_mouse_support_specifications.h"
24 
25 typedef struct PATIENT_DATA_STRUCT {
26     char *name;
27     char *mr_num;
28     char *room_num;
29     char *admit_date;
30 } PATIENT_DATA;
31 
32 
33 typedef struct PATIENT_ROW_STRUCT {
34     GX_WIDGET background;
35     GX_PROMPT name;
36     GX_PROMPT mr_num;
37     GX_PROMPT room_num;
38     GX_PROMPT admit_date;
39 } PATIENT_ROW;
40 
41 PATIENT_DATA patient_list[] = {
42 { "Anderson, Fionna",       "MRN125",       "1B107",    "May 23, 2016"},
43 { "Abramson, Frank",        "MRN117",       "1D205",    "Apr 30, 2016"},
44 { "Adderiy, James",         "MRN093",       "1D208",    "Dec 25, 2015"},
45 { "Adrian, Michaela",       "MRN043",       "2B204",    "Jun 15, 2016"},
46 { "Aldridge, Robert",       "MRN108",       "2B214",    "May 07, 2016"},
47 { "Alsopp, Antony",         "MRN071",       "3A455",    "May 31, 2016"},
48 { "Babcock, Margarita",     "MRN055",       "1D310",    "Feb 24, 2016"},
49 { "Baldwin, Susan",         "MRN114",       "3A523",    "May 30, 2016"},
50 { "Barnes, Fionna",         "MRN125",       "1B107",    "May 23, 2016"},
51 { "Bawerman, Frank",        "MRN117",       "1D205",    "Apr 30, 2016"},
52 { "Benson, James",   	    "MRN093",       "1D208",    "Dec 25, 2015"},
53 { "Birch, Michaela",        "MRN043",       "2B204",    "Jun 15, 2016"},
54 { "Calhoun, Rober", 	    "MRN108",       "2B214",    "May 07, 2016"},
55 { "Carey, Antony",          "MRN071",       "3A455",    "May 31, 2016"},
56 { "Carroll, Margarita",     "MRN055",       "1D310",    "Feb 24, 2016"},
57 { "Chandter, Susan",        "MRN114",       "3A523",    "May 30, 2016"},
58 { "Charlson, Frank",       	"MRN117",       "1D205",    "Apr 30, 2016"},
59 { "Daniels, James",     	"MRN093",       "1D208",    "Dec 25, 2015"},
60 { "Day, Michaela",      	"MRN043",       "2B204",    "Jun 15, 2016"},
61 { "Derrick, Robert",       	"MRN108",       "2B214",    "May 07, 2016"},
62 { "Dodson, Antony",         "MRN071",       "3A455",    "May 31, 2016"},
63 { "Eddington, Margarita",   "MRN055",       "1D310",    "Feb 24, 2016"},
64 { "Ellington, Susan",       "MRN114",       "3A523",    "May 30, 2016"},
65 { "Faber, Fionna",          "MRN125",       "1B107",    "May 23, 2016"},
66 { "Farmer, Frank",	        "MRN117",       "1D205",    "Apr 30, 2016"},
67 { "Ferguson, James",        "MRN093",       "1D208",    "Dec 25, 2015"},
68 { "Fisher, Michaela",       "MRN043",       "2B204",    "Jun 15, 2016"},
69 { "Flannagan, Robert",      "MRN108",       "2B214",    "May 07, 2016"},
70 { "Galbraith, Antony",      "MRN071",       "3A455",    "May 31, 2016"},
71 { "Garrison, Margarita",    "MRN055",       "1D310",    "Feb 24, 2016"},
72 { "Gerald, Susan",          "MRN114",       "3A523",    "May 30, 2016"},
73 { "Gilbert, Frank",         "MRN117",       "1D205",    "Apr 30, 2016"},
74 { "Hailey, James",          "MRN093",       "1D208",    "Dec 25, 2015"},
75 { "Hancock, Michaela",      "MRN043",       "2B204",    "Jun 15, 2016"},
76 { "Harrison, Robert",       "MRN108",       "2B214",    "May 07, 2016"},
77 { "Jacobson, Antony",       "MRN071",       "3A455",    "May 31, 2016"},
78 { "Jeff, Margarita",        "MRN055",       "1D310",    "Feb 24, 2016"},
79 { "Keat, Susan",	        "MRN114",       "3A523",    "May 30, 2016"},
80 { "Kendal, Fionna",	        "MRN125",       "1B107",    "May 23, 2016"},
81 { "Laird, Frank",           "MRN117",       "1D205",    "Apr 30, 2016"},
82 { "Larkins, James",         "MRN093",       "1D208",    "Dec 25, 2015"},
83 { "Leapman, Michaela",      "MRN043",       "2B204",    "Jun 15, 2016"},
84 { "MacAdam, Robert",        "MRN108",       "2B214",    "May 07, 2016"},
85 { "MacDonald, Antony",      "MRN071",       "3A455",    "May 31, 2016"},
86 { "Parkinson, Margarita",   "MRN055",       "1D310",    "Feb 24, 2016"},
87 { "Samuels, Susan",         "MRN114",       "3A523",    "May 30, 2016"},
88 { GX_NULL, GX_NULL, GX_NULL, GX_NULL}
89 };
90 
91 PATIENT_ROW row_memory[PATIENT_LIST_VISIBLE_ROWS + 1];
92 
GetPatientName(void)93 GX_CHAR *GetPatientName(void)
94 {
95     return patient_list[selected_patient_index].name;
96 }
97 
GetPatientAdmitDate(void)98 GX_CHAR *GetPatientAdmitDate(void)
99 {
100     return patient_list[selected_patient_index].admit_date;
101 }
102 
patient_row_create(GX_VERTICAL_LIST * list,GX_WIDGET * widget,INT index)103 void patient_row_create(GX_VERTICAL_LIST *list, GX_WIDGET *widget, INT index)
104 {
105     GX_RECTANGLE childsize;
106     PATIENT_ROW *row = (PATIENT_ROW *) widget;
107     GX_RESOURCE_ID bkgnd_color = GX_COLOR_ID_ODD_ROW;
108 	GX_BOOL result;
109 
110     if (index & 1)
111     {
112         bkgnd_color = GX_COLOR_ID_WINDOW_FILL;
113     }
114 
115 	gx_widget_created_test(&row -> background, &result);
116 
117     if (!result)
118     {
119         gx_utility_rectangle_define(&childsize, list->gx_window_client.gx_rectangle_left + 10, 0,
120                                                 list->gx_window_client.gx_rectangle_right - 10, 27);
121         gx_widget_create(&row->background, NULL, list, GX_STYLE_ENABLED, GX_ID_NONE, &childsize);
122         gx_widget_status_add(&row -> background, GX_STATUS_SELECTABLE | GX_STATUS_ACCEPTS_FOCUS);
123 
124         childsize.gx_rectangle_left += 10;
125         childsize.gx_rectangle_right = childsize.gx_rectangle_left + 190;
126         gx_prompt_create(&row->name, NULL, &row->background, 0,
127             GX_STYLE_TRANSPARENT|GX_STYLE_TEXT_LEFT, 0, &childsize);
128         gx_widget_draw_set(&row->name, patient_prompt_draw);
129         gx_prompt_text_color_set(&row->name, GX_COLOR_ID_OFF_WHITE, GX_COLOR_ID_BLACK, GX_COLOR_ID_BLACK);
130 
131         gx_utility_rectangle_shift(&childsize, MR_NUM_SHIFT, 0);
132         gx_prompt_create(&row->mr_num, NULL, &row->background, 0,
133             GX_STYLE_TRANSPARENT|GX_STYLE_TEXT_LEFT, 0, &childsize);
134         gx_widget_draw_set(&row->mr_num, patient_prompt_draw);
135         gx_prompt_text_color_set(&row->mr_num, GX_COLOR_ID_OFF_WHITE, GX_COLOR_ID_BLACK, GX_COLOR_ID_BLACK);
136 
137         gx_utility_rectangle_shift(&childsize, ROOM_NUM_SHIFT, 0);
138         gx_prompt_create(&row->room_num, NULL, &row->background, 0,
139             GX_STYLE_TRANSPARENT|GX_STYLE_TEXT_LEFT, 0, &childsize);
140         gx_widget_draw_set(&row->room_num, patient_prompt_draw);
141         gx_prompt_text_color_set(&row->room_num, GX_COLOR_ID_OFF_WHITE, GX_COLOR_ID_BLACK, GX_COLOR_ID_BLACK);
142 
143         gx_utility_rectangle_shift(&childsize, ADMIT_DATE_SHIFT, 0);
144         gx_prompt_create(&row->admit_date, NULL, &row->background, 0,
145             GX_STYLE_TRANSPARENT|GX_STYLE_TEXT_LEFT, 0, &childsize);
146         gx_widget_draw_set(&row->admit_date, patient_prompt_draw);
147         gx_prompt_text_color_set(&row->admit_date, GX_COLOR_ID_OFF_WHITE, GX_COLOR_ID_BLACK, GX_COLOR_ID_BLACK);
148     }
149     gx_widget_fill_color_set(&row->background, bkgnd_color, GX_COLOR_ID_GREEN, GX_COLOR_ID_GREEN);
150     gx_prompt_text_set(&row->name, patient_list[index].name);
151     gx_prompt_text_set(&row->mr_num, patient_list[index].mr_num);
152     gx_prompt_text_set(&row->room_num, patient_list[index].room_num);
153     gx_prompt_text_set(&row->admit_date, patient_list[index].admit_date);
154 }
155 
patient_prompt_draw(GX_PROMPT * prompt)156 VOID patient_prompt_draw(GX_PROMPT *prompt)
157 {
158     // assume the style of the background before drawing:
159     if (prompt->gx_widget_parent)
160     {
161         if (prompt->gx_widget_parent->gx_widget_style & GX_STYLE_DRAW_SELECTED)
162         {
163             prompt->gx_widget_style |= GX_STYLE_DRAW_SELECTED;
164         }
165         else
166         {
167             prompt->gx_widget_style &= ~GX_STYLE_DRAW_SELECTED;
168         }
169     }
170     gx_prompt_draw(prompt);
171 }
172 
patient_list_children_create(PATIENTS_SCREEN_CONTROL_BLOCK * win)173 VOID patient_list_children_create(PATIENTS_SCREEN_CONTROL_BLOCK *win)
174 {
175     INT count;
176     GX_VERTICAL_LIST *list = &win ->patients_screen_patient_list;
177 
178     for (count = 0; count <= PATIENT_LIST_VISIBLE_ROWS; count++)
179     {
180         patient_row_create(list, (GX_WIDGET *) &row_memory[count], count);
181     }
182 }
183 
patients_screen_event_handler(GX_WINDOW * window,GX_EVENT * myevent)184 UINT patients_screen_event_handler(GX_WINDOW *window, GX_EVENT *myevent)
185 {
186 GX_VERTICAL_LIST *list;
187 PATIENTS_SCREEN_CONTROL_BLOCK *screen = (PATIENTS_SCREEN_CONTROL_BLOCK *) window;
188 
189     switch(myevent->gx_event_type)
190     {
191     case GX_SIGNAL(ID_PATIENT_LIST, GX_EVENT_LIST_SELECT):
192         list = &screen ->patients_screen_patient_list;
193         gx_vertical_list_selected_index_get(list, &selected_patient_index);
194 
195         myevent->gx_event_type = GX_SIGNAL(ID_MEDS_BUTTON, GX_EVENT_CLICKED);
196         break;
197     }
198     return med_screen_base_event_handler(window, myevent);;
199 }
200