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 #define NUM_SLIDERS 4
12 extern char current_patient_name[128];
13 GX_CHAR value_strings[NUM_SLIDERS][8];
14 #define MAX_VAL_LEN 4
15 #define NUM_ANIMATION_STEPS 10
16
17 INT med_levels[NUM_SLIDERS] = {75, 60, 53, 42};
18 GX_BOOL animation_running = GX_FALSE;
19
20 GX_SLIDER *med_sliders[NUM_SLIDERS] = {
21 (GX_SLIDER *) &meds_screen.meds_screen_med1_level,
22 (GX_SLIDER *) &meds_screen.meds_screen_med2_level,
23 (GX_SLIDER *) &meds_screen.meds_screen_med3_level,
24 (GX_SLIDER *) &meds_screen.meds_screen_med4_level
25 };
26
27 INT animation_step;
28
update_prompt(GX_PROMPT * prompt,GX_CHAR * buffer,INT value)29 VOID update_prompt(GX_PROMPT *prompt, GX_CHAR *buffer, INT value)
30 {
31 gx_utility_ltoa(value, buffer, MAX_VAL_LEN);
32 gx_prompt_text_set(prompt, buffer);
33 }
34
meds_screen_event_handler(GX_WINDOW * window,GX_EVENT * myevent)35 UINT meds_screen_event_handler(GX_WINDOW *window, GX_EVENT *myevent)
36 {
37 GX_PROMPT *prompt;
38 GX_SLIDER *slider;
39 INT loop;
40 INT value;
41
42 switch(myevent ->gx_event_type)
43 {
44 case GX_EVENT_SHOW:
45 gx_prompt_text_set(&meds_screen.meds_screen_patient_name, GetPatientName());
46 gx_prompt_text_set(&meds_screen.meds_screen_admit_date, GetPatientAdmitDate());
47 animation_running = GX_TRUE;
48
49 // reset all sliders to initial value 0
50 for (loop = 0; loop < NUM_SLIDERS; loop++)
51 {
52 slider = med_sliders[loop];
53 gx_slider_value_set(slider, &slider->gx_slider_info, 0);
54 }
55 med_screen_base_event_handler(window, myevent);
56 animation_step = 0;
57 gx_system_timer_start(window, 1, 1, 1);
58 break;
59
60 case GX_SIGNAL(ID_SLIDER1, GX_EVENT_SLIDER_VALUE):
61 gx_widget_find(window, ID_VAL1_DISPLAY, 0, (GX_WIDGET **) &prompt);
62 update_prompt(prompt, value_strings[0], myevent->gx_event_payload.gx_event_longdata);
63
64 if (!animation_running)
65 {
66 med_levels[0] = myevent->gx_event_payload.gx_event_longdata;
67 }
68 break;
69
70 case GX_SIGNAL(ID_SLIDER2, GX_EVENT_SLIDER_VALUE):
71 gx_widget_find(window, ID_VAL2_DISPLAY, 0, (GX_WIDGET **) &prompt);
72 update_prompt(prompt, value_strings[1], myevent->gx_event_payload.gx_event_longdata);
73 if (!animation_running)
74 {
75 med_levels[1] = myevent->gx_event_payload.gx_event_longdata;
76 }
77 break;
78
79 case GX_SIGNAL(ID_SLIDER3, GX_EVENT_SLIDER_VALUE):
80 gx_widget_find(window, ID_VAL3_DISPLAY, 0, (GX_WIDGET **) &prompt);
81 update_prompt(prompt, value_strings[2], myevent->gx_event_payload.gx_event_longdata);
82
83 if (!animation_running)
84 {
85 med_levels[2] = myevent->gx_event_payload.gx_event_longdata;
86 }
87 break;
88
89 case GX_SIGNAL(ID_SLIDER4, GX_EVENT_SLIDER_VALUE):
90 gx_widget_find(window, ID_VAL4_DISPLAY, 0, (GX_WIDGET **) &prompt);
91 update_prompt(prompt, value_strings[3], myevent->gx_event_payload.gx_event_longdata);
92
93 if (!animation_running)
94 {
95 med_levels[3] = myevent->gx_event_payload.gx_event_longdata;
96 }
97 break;
98
99 case GX_EVENT_TIMER:
100 animation_step++;
101 if (animation_step == NUM_ANIMATION_STEPS)
102 {
103 gx_system_timer_stop(window, 1);
104
105 for (loop = 0; loop < NUM_SLIDERS; loop++)
106 {
107 slider = med_sliders[loop];
108 gx_slider_value_set(slider, &slider->gx_slider_info, med_levels[loop]);
109 }
110 animation_running = GX_FALSE;
111 }
112 else
113 {
114 for (loop = 0; loop < NUM_SLIDERS; loop++)
115 {
116 slider = med_sliders[loop];
117 value = (med_levels[loop] + slider->gx_slider_info.gx_slider_info_current_val) / 2;
118 gx_slider_value_set(slider, &slider->gx_slider_info, value);
119 }
120 }
121 break;
122
123 default:
124 return med_screen_base_event_handler(window, myevent);;
125 }
126 return 0;
127 }
128
129
med_level_draw(GX_PROMPT * prompt)130 VOID med_level_draw(GX_PROMPT *prompt)
131 {
132 GX_VALUE twidth;
133 GX_FONT *font;
134 GX_PIXELMAP *map;
135 GX_CHAR *text;
136
137 gx_prompt_draw(prompt);
138
139 // Draw the % symbol next to the text:
140 gx_context_font_get(prompt->gx_prompt_font_id, &font);
141 gx_context_pixelmap_get(GX_PIXELMAP_ID_PERCENT, &map);
142 gx_prompt_text_get(prompt, &text);
143 gx_system_string_width_get(font, text, -1, &twidth);
144 gx_canvas_pixelmap_draw(prompt->gx_widget_size.gx_rectangle_left + twidth,
145 prompt->gx_widget_size.gx_rectangle_top, map);
146 }