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