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 }